数字人直播开源项目LiveStream

一、数字人直播功能

数字人直播通过 TTS(文字转语音)驱动虚拟形象说话,配合预先准备好的话术循环播放,加上 AI 自动回复弹幕,实现无人值守的 7×24 小时直播。

LiveStream数字人直播控制系统------它像一座桥梁,连接了虚拟数字人引擎LiveTalking直播平台,并给这座桥装上了 AI 大脑。

二、系统全景

先看一张架构全景图:

整个系统分为四大核心能力:

模块 职责 关键技术
话术引擎 管理带货话术,自动循环播放 优先级队列 + 加权随机选取
弹幕采集 实时抓取多平台弹幕/礼物/关注 WebSocket + 平台适配器
AI 大脑 生成个性化弹幕回复 LLM + 人设记忆 + 知识库 RAG
数字人交互 驱动数字人说话、播放音频/视频 LiveTalking HTTP + SSE

三、与 LiveTalking 的交互:如何"遥控"一个数字人?

这是本系统最核心的交互链路。LiveTalking 是一个开源的数字人引擎,它负责:

  • 🎭 嘴部驱动:根据音频生成口型同步的虚拟人画面
  • 🔊 语音合成:将文字转为自然语音(TTS)
  • 🎬 媒体渲染:播放自定义视频/音频

我们通过 HTTP API + SSE 事件流 两种方式与 LiveTalking 通信:

3.1 发送指令给数字人

python 复制代码
# 文字驱动:发送文字,LiveTalking 自动 TTS + 表情驱动
POST /human  {"sessionid": "xxx", "text": "欢迎来到直播间!", "type": "echo"}

# 音频驱动:上传预录制音频,数字人直接对口型
POST /humanaudio  form-data: { file: "报价音频.wav" }

# 视频驱动:上传视频,LiveTalking 自动解压为帧序列+音频
POST /convert_custom_media  form-data: { file: "产品展示.mp4" }
# 然后加载播放:
POST /load_custom_media  {"sessionid": "xxx", "media_path": "/customvideo/media_xxx"}

这三种方式的灵活性让我们可以支持三种话术类型:

  • ✍️ 文字话术:适合灵活多变的场景,由 LiveTalking 实时 TTS,适合需要每次播放时随机变换其中某些文字的场景。
  • 🎵 音频话术:适合需要特定语气/音效的场景(预录制更可控),不需要消耗tts性能。
  • 🎬 视频话术:提前真人录制,直播场景更真实。只在交互时切换到数字人,该功能需要与商业版livetalking配合。

3.2 感知数字人的播放状态

这是整个系统的节拍器 ------我们通过 SSE(Server-Sent Events)长连接实时感知数字人"说完一句话"的时刻:

python 复制代码
# SSE 事件流:当数字人说完一段内容的瞬间,推送 end 事件
GET /sse?sessionid=xxx

# 事件示例:
data: {"status": "start", "text": "欢迎来到直播间!"}
data: {"status": "end"}   ← 关键!触发下一条播放

当收到 status: "end" 事件时,系统立刻从播放队列中取出下一条内容发送给 LiveTalking。这样实现了无缝衔接------上一条刚说完,下一条立刻跟上,中间没有尴尬的空白。

3.3 Session 管理

LiveTalking 支持多个数字人实例同时运行,我们在前端提供了 Session 选择下拉框,用户可以选择使用哪个数字人。底层通过 LiveTalking 的 admin API 获取活跃 session 列表:

python 复制代码
GET /api/admin/sessions → [{sessionid, model, transport, avatar_id, ...}]

四、智能播放队列:高优弹幕 vs 低优话术的分级调度

这是一个巧妙的设计------两级优先级队列

复制代码
  ┌─────────────────────┐
  │   高优队列 (High)    │  ← 弹幕回复、感谢礼物、欢迎关注
  │   先进先出 FIFO      │     (插在下一条待播放话术前播放)
  └─────────┬───────────┘
            │ 优先级 > 低优
  ┌─────────▼───────────┐
  │   低优队列 (Low)     │  ← 话术循环补位
  │   先进先出 FIFO      │     (弹幕空闲时才播)
  └─────────────────────┘

出队规则非常简洁:优先从高优队列取,高优空了再从低优队列取

python 复制代码
async def get_next(self):
    if self._high:   return self._high.popleft()   # 弹幕优先
    elif self._low:  return self._low.popleft()     # 话术轮播
    return None                                     # 都空了阻塞等待

自动补位机制

低优队列配置了自动补位:当队列中待播放话术少于 2 条时,后台任务自动从话术库中挑选一条加入队列。选取策略也很有讲究:

  1. 加权随机:播放次数越少的话术,被选中的概率越大(避免重复)
  2. 短期去重:最近 5 条已播放的话术不会再次出现

五、AI 大脑:LLM + 人设记忆 + 知识库 RAG

这是让数字人"有灵魂"的关键。

5.1 人设驱动

用户可以自定义数字人的"人设"(Persona),包括:

  • 🏷️ 名称:如"小助手"、"带货达人"
  • 🎭 性格:如"热情友好、耐心细致、幽默风趣"
  • 🗣️ 说话风格:如"轻松活泼,喜欢用简短的句子,偶尔加入网络流行语"
  • 📚 知识范围:如"日常闲聊、生活百科、娱乐八卦"
  • 🚫 禁止话题:可配置避而不谈的内容

这些配置会被拼接到 LLM 的 System Prompt 中,确保每一次 AI 回复都符合人设:

5.2 短期记忆

每位观众都维护独立的对话历史(滑动窗口 10 轮)。当观众 A 问"这个多少钱?"之后又问"那红色的呢?",AI 能结合上下文回答------不是鸡同鸭讲。

5.3 知识库 RAG

这是让数字人"懂行"的能力。商家把产品手册、FAQ、规格表等文档上传到知识库后,系统自动:

  1. 📄 文档解析:支持 PDF、Markdown、纯文本
  2. ✂️ 文本分块:RecursiveCharacterTextSplitter,每块 500 字符,重叠 50 字符
  3. 🧮 向量化存储:通过 Embedding 模型(如 text-embedding-v4)转为向量,存入 ChromaDB
  4. 🔍 语义检索:观众提问时,检索最相关的 2 条知识片段
  5. 💬 增强生成:将检索结果注入 LLM Prompt,生成更准确的回答
python 复制代码
# 弹幕回复的完整链路
async def generate_reply(self, message, sender):
    # Step 1: 检索知识库
    docs = await self._knowledge_base.search(message, k=2)
    kb_context = "\n".join(d.page_content for d in docs)

    # Step 2: 构建 Prompt(人设 + 记忆 + 知识)
    messages = self._build_messages(message, sender, kb_context)

    # Step 3: 调用 LLM 生成回复
    response = await self.client.chat.completions.create(
        model="qwen-plus", messages=messages, max_tokens=200
    )

    # Step 4: 记录到记忆
    self.add_to_memory(sender, "user", message)
    self.add_to_memory(sender, "assistant", reply)
    return reply

模型兼容性

系统采用 OpenAI 兼容接口,支持任何兼容的 LLM 服务:

  • 默认使用 通义千问(qwen-plus) + DashScope Embedding
  • 可切换为 DeepSeek、GLM、Moonshot 等任意兼容 API
  • 通过前端配置页直接修改 API Key 和 Base URL

六、多平台弹幕采集:统一的消息流

弹幕采集采用策略模式设计,不同平台的采集器各自实现统一的抽象接口:

复制代码
BaseDanmakuCollector (抽象基类)
    ├── BilibiliCollector   → bilibili-api 的 LiveDanmaku WebSocket
    ├── DouyinCollector     → 抖音弹幕抓取工具
    └── WxliveCollector     → 视频号弹幕抓取工具

所有平台的消息被归一化为统一的 DanmakuMessage 格式:

python 复制代码
@dataclass
class DanmakuMessage:
    platform: str      # "bilibili" | "douyin" | "wxlive"
    sender: str        # 发送者昵称
    content: str       # 消息内容
    msg_type: str      # "danmaku" | "gift" | "follow" | "enter"
    timestamp: float   # 时间戳

收到消息后的处理逻辑:

事件类型 AI 处理方式
📝 弹幕(提问/闲聊) LLM + 知识库生成个性化回复
🎁 礼物 模板感谢:"谢谢 XX 的火箭 x1!"
👥 关注 模板欢迎:"欢迎 XX 关注直播间!"

七、完整的数据流:一条弹幕的旅程

让我们跟随一条弹幕,走过整个系统的完整链路:

整个过程从弹幕到达,到数字人开口回答,完整链路通常在 1-3 秒内完成。

八、部署与运行

整体部署非常轻量,适合个人或小团队:

  1. 启动 LiveTalking 数字人引擎

    浏览器打开 http://livetalking-server:8010/index.html 连接视频

    或使用虚拟摄像头模式:--transport virtualcam

  2. 启动 LiveStream 服务

bash 复制代码
cd frontend && npm run build
cd backend
pip install -r requirements.txt #第一次安装运行
python app/main.py     # 默认监听 8020 端口
  1. 打开前端控制台

    Web 模式:直接访问 http://127.0.0.1:8020

  2. 配置

    • 在「系统设置」中配置 LiveTalking 地址和 LLM API Key
    • 在「话术管理」中添加带货话术(文字/音频/视频)
    • 在「人设配置」中设定数字人性格
    • 在「知识库」中上传产品资料(可选)
    • 在「直播控制」中选择 Session 和平台 → 开始直播!
  3. 用 OBS 或直播伴侣抓取数字人画面推流

九、总结与展望

LiveStream 项目展示了数字人直播的核心技术栈------以 LiveTalking 为驱动引擎,以 LLM+RAG 为智能大脑,以优先级队列为调度中枢,以多平台弹幕采集为感知层,构成了一个完整的无人值守直播方案。

它的亮点在于:

  • 🧩 模块化设计:每个组件职责清晰、可独立替换(换 LLM、换弹幕平台都很容易)
  • 🎯 优先级调度:弹幕回复随时打断话术播放,互动体验远好于固定顺序轮播
  • 🧠 知识增强:RAG 让 AI 回复不只是闲聊,而是真正懂产品、懂业务
  • 🔌 多平台兼容:B站、抖音、视频号,你只需要选择平台就能开播
  • 🏠 轻量部署:SQLite + ChromaDB,零外部依赖,笔记本就能跑

当然,这个系统还有很多可以深化的方向:

  1. 多模态数字人:支持更丰富的表情和动作
  2. 情感识别:根据弹幕情绪动态调整回复风格
  3. 数据分析:直播数据大屏、观众画像分析
  4. 更智能的话术管理:根据实时转化率自动调整话术优先级

项目地址

LiveStream: https://github.com/lipku/livestream --- 数字人直播

LiveTalking: https://github.com/lipku/livetalking --- 数字人引擎

作者注:如果你对数字人直播感兴趣,欢迎动手尝试------整个项目在本地就能跑起来。如果本地没有显卡,可以将LiveTalking跑在云服务上。

相关推荐
疯狂敲代码的老刘1 小时前
百度开源 Unlimited-OCR:一次识别整篇文档,告别逐行扫描时代
开源·ocr
阿童木写作2 小时前
Python实现亚马逊商品图批量智能抠图教程
人工智能·python
小弥儿2 小时前
GitHub今日热榜 | 2026-08-01:硬件安全工具与AI教育并行
人工智能·学习·开源·github
axinawang2 小时前
第24课:while循环的应用
python
三亚兴嘉装饰2 小时前
三亚服装店装修
python
小柯南敲键盘2 小时前
速卖通AI图片翻译API集成实战
人工智能·python
vipjx23 小时前
百度网盘不限速原理解析:如何合法合规提升你的网盘下载速度
开源
tqs_123453 小时前
Agent智能体+Skill插件引擎+Milvus混合检索 技术沉淀
java·python·milvus
眼泪划过的星空3 小时前
LangChain 两大基础提示词模板:PromptTemplate 与 ChatPromptTemplate 详解
人工智能·python·langchain