一个开箱即用的AI虚拟主播:LiveStream-Agent完整解析

让AI帮你实时与直播间弹幕互动,带情感、带人设、带记忆,7x24小时无人值守直播
在这里插入图片描述

为什么做这个项目

2025年最火的赛道是什么?虚拟主播绝对排得上号。

从V圈的不断破圈,到品牌直播间里24小时在线的数字人,虚拟主播已经从"小众爱好"变成了"主流生产力"。但真正做过直播的朋友都知道,当虚拟主播的"皮"有了,接下来最大的难题是——内容怎么填

弹幕一多,根本看不过来,更别说一一回复了。新主播尤其痛苦,一边盯着弹幕,一边要控场,还要兼顾内容输出,手忙脚乱是常态。而且人的精力是有限的,不可能24小时都在线。

这时候,LLM Agent的概念给了我启发。

AI Agent(智能体)是2025年技术圈最热的关键词之一,Agent的核心是"感知-思考-执行"的自主循环。我就在想:能不能把Agent的能力搬到直播间里?让AI不仅能"看到"弹幕,还能"理解"上下文、"思考"怎么回复,最后"说出"带有情感的话?

于是LiveStream-Agent诞生了。

LiveStream-Agent是一个开箱即用的虚拟主播AI助手,能够实时接收直播间弹幕,通过大模型进行智能决策,生成带情感的语音回复。最关键的是——这套系统可以7x24小时无人值守运行

实际体验下来,效果非常自然——弹幕进来,AI分析上下文、判断意图、选择语气,最后用带有情感色彩的真人语音说出来。整个过程实时发生,就像直播间里有一个真正的助理在帮你和观众互动。

今天这篇文章,我想完整分享一下这个项目的架构设计、核心链路和部署方法,也算是对自己这段时间开发的一个总结。

整体架构:Sense → Think → Act

整个系统遵循LLM Agent的经典循环:感知 → 思考 → 执行

最核心的设计思路是将直播互动抽象成标准的事件流处理管道:

直播间弹幕

平台连接器

消息过滤

Agent大脑
LLM

情感引擎

TTS语音合成

本机播放

系统分层架构

整个系统自上而下分为三层:接入层、处理层、执行层,每一层都有明确的职责边界。

执行层 - Act 执行

处理层 - Think 思考

接入层 - Sense 感知

直播间平台
弹幕/礼物

Connector
消息接入层

Pipeline
处理管道

Memory
三级记忆

LLM Brain
大模型大脑

Emotion
情感引擎

TTS + Play
语音合成与播放

本机播放
虚拟麦克风

接入层(Sense) 负责连接各直播平台,将不同平台的原生消息格式统一转换为系统内部的标准事件。目前我实现了抖音和B站两个连接器,通过插件化设计可以轻松扩展更多平台。

处理层(Think) 是整个系统的核心。消息进入后先经过过滤和调度,去除垃圾信息和重复内容,然后由LLM Brain结合三级记忆系统进行推理决策,最后通过情感引擎为回复内容赋予情感标签。这一层完成了从"感知"到"决策"的全部思考过程。

执行层(Act) 将决策结果转化为实际行动——把文本内容和情感参数交给TTS引擎合成带情感的语音,并通过本机播放器输出。如果需要推流到直播间,可以配合虚拟音频设备使用。

三层之间通过标准化的数据接口通信,每一层都可以独立替换和升级,这也是系统具备良好扩展性的基础。

核心交互流程

如果说分层架构是系统的"骨架",那交互流程就是系统的"血脉"。下面用时序图展示一条弹幕从进入系统到AI回复播出的完整生命周期:

TTS Brain Pipeline Connector 直播平台 观众 TTS Brain Pipeline Connector 直播平台 观众 发送弹幕 WebSocket消息 协议解码 标准化事件 过滤/去重/调度 构建Prompt+记忆 LLM推理 结构化JSON 文本+情感参数 合成语音 语音回复

整个流程的关键节点如下:

第一步,消息接入。观众在直播间发送弹幕,直播平台通过WebSocket将消息推送给系统。Connector层负责协议解码,抖音需要解析Protobuf格式,B站则使用bilibili_api库处理。解码完成后,Connector将消息封装成标准的LiveEvent事件对象,向上层传递。

第二步,过滤与调度。Pipeline接收到事件后,首先经过Filter模块进行垃圾检测、去重和关键词过滤;然后Scheduler模块判断是否满足回复条件——包括最小间隔限制、同用户冷却时间、队列长度等。只有通过全部校验的消息才能进入Brain处理。

第三步,AI推理决策。Brain模块从Memory系统拉取三级记忆(短期对话上下文、工作记忆关键事实、长期用户画像),结合人设配置构建完整的System Prompt,调用LLM API进行推理。LLM必须以结构化JSON格式返回,包含回复内容、情感标签、行为类型和内心独白。

第四步,情感语音合成。Pipeline将LLM输出的文本内容和情感参数传递给TTS引擎。Emotion模块将情感标签(如happy)映射为具体的语速和音调调整值,Edge TTS根据这些参数合成带情感的MP3音频,最后由Player模块播放出来。

从弹幕发送到语音播出,整个过程在数秒内完成,观众几乎感受不到延迟。

分层与流程的关系

简单总结一下:分层架构定义了系统"是什么"——有哪些模块、各模块的职责边界;交互流程描述了系统"怎么做"——数据如何在模块间流转、每一步执行什么操作。 两者结合,就构成了系统的完整设计蓝图。

核心模块深度解读

1. 平台连接器(Connector)—— 插件化接入

目前支持抖音和B站两大平台,我设计了插件化架构,方便后续扩展。

BaseConnector

+connect()

+disconnect()

+send_message()

#_emit(event)

DouyinConnector

+connect()

+disconnect()

+send_message()

-decode_protobuf()

BilibiliConnector

+connect()

+disconnect()

+send_message()

-handle_danmaku()

抖音连接器走的是WebSocket + Protobuf协议,需要解析抖音的内部消息格式;B站连接器则基于bilibili_api库实现。

所有连接器都继承自BaseConnector抽象基类,只需要实现connectdisconnectsend_message三个方法,并通过self._emit(LiveEvent(...))发送标准化事件即可。这种设计让新增平台变得非常简单,有需要的同学可以自己扩展。

2. 三级记忆系统(Memory)—— 让AI"记住"观众

这是我花心思最多的模块之一。普通的AI回复是"无状态"的,每条弹幕独立处理,但我希望AI能真正"记住"观众,做到越聊越懂你。

在记忆系统的设计中,我借鉴了RAG(检索增强生成)和Embedding向量检索的思路。对于长期记忆,每条记忆都带有重要性权重(importance),当需要召回时,系统会根据用户ID和记忆key进行精确检索,将高权重的记忆注入到LLM的上下文中,实现"记忆增强生成"的效果。目前我使用的是基于SQLite的轻量级键值检索,未来计划引入向量数据库(如Chroma或Milvus),将记忆文本通过Embedding模型向量化,实现语义级别的相似度检索,让记忆召回更加精准。

长期记忆 - 跨会话沉淀
向量检索 + SQLite

工作记忆 - 本场直播

短期记忆 - 实时对话上下文

窗口滑动

会话结束沉淀

跨会话召回

滑动窗口
最近N轮对话

会话内关键事实
本场直播上下文

Embedding向量化
语义相似度检索

SQLite持久化
键值存储

记忆层级 存储方式 技术实现
短期记忆 滑动窗口(内存) 保持最近N轮对话上下文,用于LLM的实时推理
工作记忆 会话内(内存+SQLite) 记录本场直播的关键事实,如"观众X点了歌《永别纱世里》"
长期记忆 SQLite持久化 + 向量检索 跨会话的用户画像,含importance权重,未来接入向量数据库

数据库ER图

发送

拥有

包含

users

integer

id

PK

string

platform_id

UK

string

platform

UK

string

nickname

integer

interaction_count

text

tags

sessions

integer

id

PK

string

room_id

string

platform

datetime

start_time

datetime

end_time

integer

message_count

text

summary

messages

integer

id

PK

integer

session_id

FK

integer

user_id

FK

string

role

text

content

string

emotion

string

action

datetime

timestamp

memories

integer

id

PK

integer

user_id

FK

string

key

text

value

float

importance

blob

embedding

数据持久化在data/agent_memory.db中,有了这套记忆系统,AI就能真正做到"记得老观众",互动体验大幅提升。

3. LLM大脑(Brain)—— 结构化输出驱动行为

这是整个LLM Agent的"决策中枢"。每次LLM调用会构建完整的System Prompt,包含人设、对话历史和记忆,要求模型以结构化JSON回复。

在这个模块中,我深度融合了Prompt Engineering的技术实践:

  • 角色扮演指令:通过System Prompt定义主播的人设、性格、说话风格和行为规则,让LLM精准扮演虚拟主播角色
  • Few-shot示例:在Prompt中嵌入对话示例,引导LLM理解输出格式和风格要求
  • 结构化输出约束:强制要求LLM输出JSON格式,通过明确的schema定义确保输出可解析
  • 上下文窗口管理:精心控制输入token数量,在LLM上下文窗口限制内最大化保留有效信息

此外,系统内置了Tool Calling机制。LLM输出的action字段(reply/greet/thank_gift/ignore/question)本质上是调用不同"工具"的指令——当action为thank_gift时,系统会自动触发礼物感谢流程;当action为question时,系统会调整TTS的语调为疑问语气。这种设计将LLM的决策与系统行为解耦,实现了灵活的"决策-执行"分离。

有效

无效

reply

greet

thank_gift

question

ignore

当前弹幕

构建System Prompt

人设配置

三级记忆

对话历史

调用LLM API

解析JSON响应

校验格式

提取字段

回退策略

content/emotion/action

action分发

正常回复

欢迎新观众

感谢礼物

反问语气

静默忽略

System Prompt构建示例

你是一个虚拟主播,正在直播间与观众实时互动。

## 你的人设
你的名字是小Q。一个活泼可爱的虚拟主播,善于聊天互动。

## 性格特点
活泼开朗、幽默风趣、共情能力强、偶尔毒舌但不伤人。

## 说话风格
语气轻快,喜欢用语气词(呀、呢、哦、嘛);回应简洁,一般不超过两句话;
善于反问,引导观众继续互动。

## 行为规则
永远不透露自己是AI,坚持虚拟主播身份;优先回复有实质内容的弹幕;
对新观众主动打招呼并表示欢迎。

## 近期对话
[09:00:42] 观众: 小Q,mua一个
[09:00:42] 小Q: 哎呀,这么热情呀~mua!比心比心~
[09:02:12] 观众: 小Q,喜欢喝奶茶吗

## 当前观众信息
昵称:福***;互动次数:245;标签:虚拟主播,音乐,萌宠

## 你对该观众的记忆
点歌偏好:喜欢点歌《永别纱世里》;提及的角色偏好:多次提及Sayori

---
你必须严格按照以下JSON格式回复,不要输出任何其他内容:
{ "content": "...", "emotion": { "category": "...", "intensity": 0.8 },
  "action": "reply|greet|thank_gift|ignore|question",
  "inner_thought": "..." }

LLM输出的结构化JSON

{
  "content": "哈哈,说到奶茶我可就不困了!我超爱喝奶茶的,尤其是那种带芝士奶盖的,你呢?你最喜欢什么口味?",
  "emotion": {
    "category": "happy",
    "intensity": 0.8
  },
  "action": "reply",
  "inner_thought": "这位老粉互动很多,用轻松的语气回应ta的问题"
}

输出字段的含义:

字段 说明 对应技术
content 主播说出口的话,严格符合人设 Prompt Engineering
emotion.category 7种情感之一:happy/excited/calm/sympathetic/funny/serious/warm 情感计算
emotion.intensity 0.0~1.0,映射为TTS语速和音调 参数映射
action 行为类型:reply/greet/thank_gift/ignore/question Tool Calling
inner_thought 内心独白,仅日志记录不播出 Chain-of-Thought

项目采用LLM无关的设计,基于OpenAI兼容接口,理论上支持DeepSeek、GPT、智谱GLM等任意兼容API,大家可以根据自己的需求选择。

4. Agent循环(Loop)与状态管理

整个系统运行在一个持续不断的Agent Loop中。与传统的单次LLM调用不同,LiveStream-Agent是一个长期运行的智能体,每一轮循环都包含"接收→感知→思考→决策→执行"的完整链路。

开始

接收弹幕/礼物事件

感知上下文
记忆检索 + 状态读取

LLM推理决策
Brain.think

是否需要回复

执行动作
TTS合成 + 播放

静默记录

更新记忆
写入新对话

等待下一个事件

这个Loop的核心设计要点:

  • 事件驱动:每一条弹幕或礼物都是一个事件,驱动Agent完成一轮"感知-思考-执行"循环
  • 状态持久化:每一轮循环结束后,对话记录、用户画像、工作记忆都会持久化到SQLite,确保系统重启后状态不丢失
  • 流式处理:采用异步流水线设计,消息在Pipeline中逐级处理,每一级都可以独立并行,最大化吞吐量
  • 优雅退出:按Ctrl+C时系统会完成当前Loop,生成直播摘要后再退出

目前我采用的是单轮独立决策的Loop模式,即每条弹幕独立触发一次完整的"思考-执行"流程。未来计划引入更复杂的多轮对话管理,让Agent在连续对话中保持更长的推理链条。

5. 情感引擎(Emotion)+ TTS —— 让语音"活"起来

情感引擎将LLM输出的情感标签和强度,映射为TTS的语速和音调参数:

emotion.category

情感映射

emotion.intensity

语速 rate

音调 pitch

Edge TTS

MP3音频

本机播放

Edge TTS天然支持通过ratepitch参数控制语音风格:

情感 语速 音调 效果
开心(happy) +10% +5% 轻快上扬
激动(excited) +20% +10% 快速高亢
平静(calm) -10% -5% 舒缓平稳
共情(sympathetic) -5% 0% 温和贴心

TTS引擎使用Microsoft Edge TTS,免费、中文效果好,生成MP3后通过本机播放器输出。如果想推送到直播间,可以使用虚拟音频设备(如VB-Cable)将播放输出作为麦克风输入。

6. 防刷屏调度 —— 保持对话秩序

直播间弹幕密集,直接全部回复会变成"话痨"。我实现了一套完整的调度策略:

命中黑名单

通过

冷却中

可回复

间隔不足

间隔充足

弹幕流入

垃圾过滤

丢弃

同用户冷却

最小间隔

入队等待

进入LLM处理

定时调度器

  • 最小回复间隔:避免回复过于频繁
  • 队列管理:待处理消息排队,防止并发冲突
  • 同用户冷却:同一用户在短时间内不重复回复
  • 垃圾消息过滤:去重、关键词黑名单、长度过滤

7. 桌面UI —— 主播的"第二屏幕"

项目提供了Tkinter桌面界面,包含三个窗口:

桌面UI

控制台窗口
实时日志

字幕悬浮窗
AI回复文字

弹幕滚动窗
观众弹幕

Pipeline

  • 控制台窗口:实时日志,LLM输入输出一目了然
  • 字幕悬浮窗:AI回复文字先于语音显示,观众能"看到"思考过程
  • 弹幕滚动窗:实时显示观众弹幕,持续堆积不消失

项目结构

LiveStream-Agent/
├── agent/                     # Agent 核心
│   ├── brain.py               # 大脑:LLM调用、决策、响应生成
│   ├── memory.py              # 记忆系统:三级记忆 + SQLite存储
│   ├── persona.py             # 人设管理:角色定义、Prompt构建
│   └── emotion.py             # 情感引擎:情感标签 ↔ 语速/音调参数
│
├── connectors/                # 平台连接器(插件化)
│   ├── base.py                # 抽象基类,定义统一接口
│   ├── douyin/                # 抖音连接器(WebSocket + Protobuf)
│   └── bilibili/              # B站连接器(bilibili_api)
│
├── llm/                       # 大模型接口层(适配器模式)
│   ├── base.py                # LLM抽象基类 + 数据结构
│   └── adapter.py             # OpenAI兼容适配器
│
├── speech/                    # 语音模块
│   ├── tts.py                 # TTS引擎
│   └── player.py              # 音频播放器
│
├── ui/                        # 界面模块
│   └── __init__.py            # 字幕 + 弹幕窗口(Tkinter)
│
├── pipeline/                  # 消息处理管道
│   ├── orchestrator.py        # 管道编排器
│   ├── filter.py              # 消息过滤
│   └── scheduler.py           # 响应调度
│
├── storage/                   # 持久化存储
│   ├── database.py            # SQLite连接管理(aiosqlite)
│   └── models.py              # 数据模型
│
├── config/                    # 配置中心
│   ├── settings.yaml          # 全局配置
│   ├── personas/              # 人设定义(YAML)
│   └── prompts/               # Prompt模板
│
├── utils/                     # 通用工具
│   └── logger.py              # 统一日志(loguru)
│
├── data/                      # 运行时数据
├── main.py                    # 主入口
├── requirements.txt
└── README.md

技术栈一览

LiveStream-Agent整合了当前LLM Agent生态的核心技术组件:

技术领域 具体技术 在项目中的应用
LLM Agent 自主决策智能体 整套系统遵循Sense-Think-Act范式,实现感知→决策→执行的完整闭环
大语言模型 DeepSeek/GPT/GLM(OpenAI兼容接口) LLM Brain核心推理引擎,负责内容生成和意图理解
Prompt Engineering 角色扮演 + Few-shot + 结构化输出 System Prompt精心设计,控制LLM输出格式和风格
RAG(检索增强生成) 记忆检索 + 上下文注入 从长期记忆中检索用户画像和历史偏好,增强LLM回复质量
Embedding向量检索 文本向量化 + 语义相似度( 长期记忆的语义级检索,接入向量数据库实现精准召回
向量数据库 Chroma / Milvus 存储用户记忆的Embedding向量,支持海量记忆的高效检索
Tool Calling action字段驱动行为分发 LLM输出action触发不同系统行为(回复/欢迎/感谢/忽略/反问)
Agent Loop 事件驱动的持续运行循环 系统7x24h运行,每轮循环完成"接收→感知→思考→执行→更新"
LangGraph 工作流编排 引入LangGraph实现更复杂的多轮对话状态管理和分支路由
TTS语音合成 Edge TTS 将文本+情感参数合成为带情感的中文语音
异步I/O aiohttp + aiosqlite 高并发弹幕处理和异步数据库操作
结构化日志 loguru 完整的LLM输入输出日志,便于调试和优化Prompt

快速部署指南

环境要求

  • Python 3.10+
  • 任一LLM API Key(DeepSeek/OpenAI/智谱GLM)
  • Windows / macOS / Linux

安装步骤

# 克隆项目
git clone https://github.com/LiveStream-Agent.git
cd LiveStream-Agent

# 创建虚拟环境
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 安装依赖
pip install -r requirements.txt

配置

编辑config/settings.yaml,填入LLM API信息:

llm:
  api_key: "sk-your-api-key-here"   # 或设置环境变量 LLM_API_KEY
  base_url: "https://api.deepseek.com"
  model: "deepseek-chat"
  temperature: 0.8

也支持环境变量注入,更安全:

export LLM_API_KEY="sk-your-api-key-here"   # Linux/macOS
set LLM_API_KEY=sk-your-api-key-here        # Windows

启动运行

# 抖音直播间(完整URL)
python main.py https://live.douyin.com/1122334

# 抖音直播间(仅ID)
python main.py 1122334 --platform douyin

# B站直播间
python main.py 1111 --platform bilibili

# 仅文本回复,不播放语音
python main.py 1111 --no-voice

项目根目录还提供了Windows桌面启动脚本启动LiveStream-Agent.bat,一键启动B站1111直播间,自动设置编码和PYTHONPATH。

Ctrl+C优雅退出,会自动生成直播摘要并持久化存储。

二次开发指南

添加新人设

config/personas/下新建YAML文件,参考default.yaml的结构:

name: "小Q"
title: "活泼可爱的虚拟主播"
description: "善于聊天互动的虚拟主播"
traits:
  - "活泼开朗"
  - "幽默风趣"
  - "共情能力强"
style: "语气轻快,喜欢用语气词(呀、呢、哦、嘛)"
rules:
  - "永远不透露自己是AI"
  - "优先回复有实质内容的弹幕"

然后在settings.yaml中切换:

agent:
  persona: "my-new-persona"

支持运行时热切换:brain.switch_persona("my-new-persona")

对接新LLM

任何兼容OpenAI SDK格式的API均可直接使用,只需修改base_urlmodel。如需特殊处理,可继承llm/base.pyBaseLLMAdapter实现自定义适配器。

添加新直播平台

继承connectors/base.pyBaseConnector,实现三个核心方法即可。平台消息通过_emit(LiveEvent(...))标准化后进入处理管道。

扩展记忆检索(接入向量数据库)

当前长期记忆使用SQLite进行键值检索。如果需要接入向量数据库实现语义检索,可以按照以下步骤扩展:

# storage/vector_store.py
import chromadb
from sentence_transformers import SentenceTransformer

class VectorMemoryStore:
    def __init__(self):
        self.client = chromadb.Client()
        self.collection = self.client.get_or_create_collection("memories")
        self.encoder = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
    
    def add_memory(self, user_id, text, importance):
        embedding = self.encoder.encode(text).tolist()
        self.collection.add(
            embeddings=[embedding],
            documents=[text],
            metadatas=[{"user_id": user_id, "importance": importance}]
        )
    
    def retrieve(self, user_id, query, top_k=3):
        query_embedding = self.encoder.encode(query).tolist()
        results = self.collection.query(
            query_embeddings=[query_embedding],
            where={"user_id": user_id},
            n_results=top_k
        )
        return results["documents"]

适用场景与使用须知

适用场景

  • 虚拟主播/数字人24小时无人直播
  • 游戏直播的实时弹幕互动
  • 电商直播的自动答疑与促单
  • 内容创作者的直播辅助工具

使用须知

  • 本项目仅用于学习和研究目的
  • 请遵守各直播平台的使用条款,合理使用
  • 建议在使用前测试语音输出效果,调整情感参数

总结

从最初的一个小想法,到如今功能完整的开源项目,LiveStream-Agent经历了不少迭代。在设计上,LiveStream-Agent遵循了LLM Agent的经典范式(Sense → Think → Act),深度融合了Prompt Engineering、结构化输出、Tool Calling、RAG记忆检索、Agent Loop等前沿技术;在工程上,插件化、配置化、异步化的设计让系统具备良好的扩展性;在体验上,三级记忆 + 情感语音带来了真正"有温度"的互动。

最关键的是,LiveStream-Agent让"24小时无人直播"从概念变成了现实。 你只需要启动程序,AI就会替你值守直播间,实时回复弹幕、感谢礼物、与观众互动,就像一个永远不会累的虚拟主播。

项目采用MIT许可证,完全开源。如果你对这个项目感兴趣,欢迎去GitHub点个Star,也欢迎大家提Issue和PR一起完善。

后续我还计划支持更多直播平台、接入LangGraph实现更复杂的多轮对话编排、引入向量数据库和Embedding检索升级记忆系统、优化情感表达的细腻度、接入更多TTS引擎。如果你有好的想法,也欢迎一起交流!


如果这篇文章对你有帮助,欢迎点赞、收藏、转发!

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐