


















分析日期:2026-06-01
项目地址:https://github.com/datascale-ai/opentalking
开源协议:Apache License 2.0
Star 数:912 | Fork 数:228
OpenTalking 是一个开源实时数字人对话编排框架,目标是构建数字人对话产品的核心链路:前端交互、会话状态、LLM 回复、TTS/音色选择、打断控制、字幕事件、WebRTC 音视频播放,以及本地或远端模型服务调用。
核心定位:专注数字人产线编排,而非单纯的 talking-head 模型。项目解决的是从"数字人 Demo"到"数字人产品"之间的工程距离问题——端到端延迟、音画同步、打断控制、多轮对话稳定性等系统工程挑战。
项目支持三种部署层级:
| 类型 | 地址 |
|---|---|
| GitHub 仓库 | https://github.com/datascale-ai/opentalking |
| 在线文档站(中文) | https://datascale-ai.github.io/opentalking/ |
| 在线文档站(英文) | https://datascale-ai.github.io/opentalking/en/ |
注:项目没有独立商业官网,文档站即为官方信息来源。
WebUI 截图:

Demo 视频展示:
整合 LLM、TTS、STT、WebRTC、字幕事件、角色音色、用户打断、前端交互和数字人视频驱动模型的全链路,而非单一模型。用户感知的体验是"它是不是能像一个实时存在的人一样响应我",而非单纯的帧细节质量。
| 路线 | 推荐模型 | 适合场景 |
|---|---|---|
| 初阶1 | quicktalk | 消费级显卡单机实时视频渲染 |
| 初阶2 | wav2lip | 轻量口型同步和自定义形象验证 |
| 高阶1 | sensevoice + local_cosyvoice + quicktalk | 全本地音频链路和私有化验证 |
| 高阶2 | flashtalk | 高质量、多卡、生产部署 |
QuickTalk 模型可在 RTX 3090/4090 上实时运行:
提供 apps/unified/main.py 单进程启动模式,将 API 服务和任务队列合并到一个进程中,类似 LiveTalking 的 python app.py 体验,简化开发调试。
支持多种后端服务提供商:
Mock 模式无需 GPU,使用静态帧或参考图,适合快速验证 API、TTS、WebRTC 全链路连通性。
支持 AI 新闻主播、电商带货、动漫脱口秀、陪伴类角色、企业知识库问答、在线客服、教育讲解等多种场景。
提供完整的中文和英文文档站,配置策略分层清晰(快速体验 → 轻量适配 → 高质量部署)。
通过 OmniRT 接入远端高质量模型(FlashTalk-14B、FlashHead-1.3B),支持多卡 GPU/NPU 分布式部署。
| 项目 | Mock 模式 | QuickTalk 本地 | FlashTalk 高质量 |
|---|---|---|---|
| 操作系统 | Linux / Windows / WSL2 | Linux(推荐 Ubuntu) | Linux |
| Python | 3.10+ | 3.11(推荐) | 3.11 |
| Node.js | 18+ | 18+ | 18+ |
| GPU | 不需要 | RTX 3090/4090 | 多卡 GPU/NPU |
| 显存 | - | ≥ 4 GB | ≥ 24 GB(多卡) |
| 内存 | 4 GB | 16 GB | 32 GB+ |
| 存储 | 2 GB | 10 GB | 50 GB+ |
| 软件 | 用途 | 安装方式 |
|---|---|---|
| Python 3.11 | 后端运行环境 | apt install python3.11 或 conda |
| Node.js 18+ | 前端构建 | apt install nodejs 或 nvm |
| FFmpeg | 媒体处理 | apt install ffmpeg |
| uv | Python 包管理(推荐) | pip install uv |
| CUDA | GPU 加速(可选) | NVIDIA 官方安装 |
核心依赖:
| 包名 | 用途 |
|---|---|
fastapi |
REST API 框架 |
uvicorn |
ASGI 服务器 |
pydantic |
数据验证 |
redis |
消息队列/状态存储 |
aiortc |
WebRTC 实现 |
edge-tts |
Edge TTS(免费) |
dashscope |
阿里云 API SDK |
transformers |
HuggingFace 模型 |
opencv-python |
图像处理 |
mediapipe |
人脸检测 |
insightface |
人脸识别 |
kornia |
深度学习图像处理 |
loguru |
日志管理 |
可选依赖组:
| 组名 | 用途 |
|---|---|
engine |
FlashTalk 等高质量模型 |
models |
本地模型(Wav2Lip、QuickTalk) |
local-audio |
本地 STT/TTS(SenseVoice、CosyVoice) |
quicktalk-cuda |
QuickTalk CUDA 版本 |
ascend |
华思腾 NPU 支持 |
dev |
开发工具(pytest、ruff、mypy) |
| 服务 | 用途 | 获取方式 |
|---|---|---|
| LLM API Key | 对话生成 | 阿里云 DashScope / OpenAI / DeepSeek |
| STT API Key | 语音识别(可选) | 阿里云 DashScope(本地 SenseVoice 无需) |
| TTS API Key | 语音合成(可选) | 阿里云 DashScope(Edge TTS 免费,无需 Key) |
注:使用 Edge TTS + 本地 SenseVoice + QuickTalk 可实现完全免费/私有化部署。
# 1. 设置工作目录
export DIGITAL_HUMAN_HOME=/opt/digital_human
mkdir -p "$DIGITAL_HUMAN_HOME"
cd "$DIGITAL_HUMAN_HOME"
# 2. 克隆项目
git clone https://github.com/datascale-ai/opentalking.git && cd opentalking
# 3. 安装依赖(使用 uv)
uv sync --extra dev --python 3.11
source .venv/bin/activate
# 4. 配置环境变量
cp .env.example .env
# 编辑 .env,填入 API Key
# 5. 启动服务
# Mock 模式(快速验证)
bash scripts/start_unified.sh --mock
# QuickTalk 本地渲染
bash scripts/start_unified.sh --backend local --model quicktalk
# OmniRT 远端推理
bash scripts/start_unified.sh --backend omnirt --model flashtalk --omnirt http://<gpu-server>:9000
配置策略:从上往下读,遇到自己用得上的小节就停。
▸ 路径 1(快速体验):只配第 1 节就够
▸ 路径 2(轻量适配):第 1 + 2 节
▸ 路径 3(高质量部署):第 1 + 2 + 3 节
▸ 第 4 节是高级 / 微调,绝大多数用户不用动
opentalking/
├── apps/ # 应用层
│ ├── api/ # REST API 服务
│ │ ├── main.py # API 入口(FastAPI)
│ │ ├── routes/ # API 路由(7 个模块)
│ │ │ ├── sessions.py # 会话管理 ★★★ 核心
│ │ │ ├── avatars.py # 数字人形象管理 ★★
│ │ │ ├── events.py # SSE 事件推送
│ │ │ ├── health.py # 健康检查
│ │ │ ├── models.py # 模型状态
│ │ │ ├── voices.py # 音色管理
│ │ │ └── tts_preview.py # TTS 预览
│ │ ├── schemas/ # 数据模型定义
│ │ └── services/ # 业务服务层
│ ├── unified/ # 单进程统一入口
│ │ └── main.py # 统一启动(简化部署)
│ ├── web/ # React 前端
│ │ ├── src/
│ │ │ ├── App.tsx # 主应用组件 ★★★
│ │ │ ├── components/ # UI 组件(8 个)
│ │ │ ├── lib/ # 工具库(API/SSE/WebRTC)
│ │ │ └── constants/ # 常量定义
│ │ └── package.json
│ └── cli/ # 命令行工具
│
├── opentalking/ # 核心库 ★★★
│ ├── core/ # 核心模块
│ │ ├── config.py # 配置管理(Pydantic Settings)
│ │ ├── session_store.py # 会话存储
│ │ ├── in_memory_redis.py # 内存 Redis 替代
│ │ ├── bus.py # 事件总线
│ │ └── registry.py # 服务注册
│ ├── pipeline/ # 对话流水线 ★★
│ │ ├── session/ # 会话编排
│ │ ├── speak/ # 语音合成流程
│ │ └── recording/ # 录制功能
│ ├── providers/ # 外部服务适配器 ★★
│ │ ├── llm/ # LLM 适配器
│ │ ├── tts/ # TTS 适配器(Edge/DashScope/CosyVoice)
│ │ ├── stt/ # STT 适配器(DashScope/SenseVoice)
│ │ ├── rtc/ # WebRTC 适配器
│ │ └── synthesis/ # 数字人合成适配器
│ ├── models/ # 数字人模型实现 ★★
│ │ ├── quicktalk/ # QuickTalk 本地模型
│ │ ├── wav2lip/ # Wav2Lip 模型
│ │ ├── musetalk/ # MuseTalk 模型
│ │ └── registry.py # 模型注册表
│ ├── avatar/ # 数字人形象管理
│ ├── voice/ # 音色管理
│ ├── events/ # 事件定义
│ ├── media/ # 媒体处理
│ └── runtime/ # 运行时
│
├── configs/ # 配置文件(YAML)
├── scripts/ # 启动脚本
│ └── start_unified.sh # 统一启动脚本
├── docker/ # Docker 配置
├── docs/ # 文档(MkDocs)
├── examples/avatars/ # 示例数字人形象
├── tests/ # 测试代码
├── .env.example # 环境变量模板
├── pyproject.toml # Python 项目配置
└── docker-compose.yml # Docker Compose
apps/api/routes/sessions.py — 会话管理(核心)文件职责:管理数字人对话会话的创建、控制和事件推送,是整个系统的核心业务逻辑所在。
文件大小:49KB(最大的路由文件)
核心功能:
apps/unified/main.py — 单进程统一入口文件职责:提供单进程启动模式,将 API 服务和任务队列合并到一个进程中。
核心设计:
InMemoryRedis 替代真实 Redis,简化单机部署opentalking/core/config.py — 配置管理文件职责:使用 Pydantic Settings 管理所有配置项。
配置来源:
configs/default.yaml)OPENTALKING_).env 文件配置分层:API → 基础设施 → LLM → TTS → STT → 模型 → OmniRT
opentalking/providers/ — 服务适配器LLM 适配器:支持 OpenAI-compatible endpoint(通义千问、DeepSeek 等)
TTS 适配器:
STT 适配器:
opentalking/models/ — 数字人模型实现| 模型 | 输入类型 | Backend | 资源需求 |
|---|---|---|---|
mock |
参考图/静态帧 | mock | 无需 GPU |
quicktalk |
template video + audio | local | RTX 3090/4090 |
wav2lip |
参考图 + audio | local/omnirt | ≥ 8GB GPU |
musetalk |
full frames + audio | omnirt/local | ≥ 12GB GPU |
flashtalk |
portrait + audio | omnirt | 多卡 GPU/NPU |
apps/web/src/App.tsx — React 前端主组件文件职责:前端主组件,管理数字人对话的完整交互流程。
核心功能:
用户输入(文本/语音)
│
▼
┌─────────────────────────────────────────────┐
│ apps/web (React 前端) │
│ - 形象选择、聊天输入、消息显示 │
│ - SSE 连接、WebRTC 视频播放 │
└─────────────────────────────────────────────┘
│ HTTP / WebSocket / SSE
▼
┌─────────────────────────────────────────────┐
│ apps/api (FastAPI 后端) │
│ routes/sessions.py ★ 会话管理核心 │
│ routes/avatars.py 形象管理 │
│ routes/events.py SSE 事件推送 │
└─────────────────────────────────────────────┘
│
├─────────────────────────────────────────┤
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ LLM │ │ TTS │ │ STT │ │ WebRTC │ │ Synthesis│
│Provider│ │Provider│ │Provider│ │ Provider│ │ Provider │
│ │ │ │ │ │ │ │ │ │
│ OpenAI │ │ Edge │ │ DashScope│ │ aiortc │ │ QuickTalk│
│Compat │ │ DashScope│ │SenseVoice│ │ │ │ Wav2Lip │
│ │ │ CosyVoice│ │ │ │ │ │ FlashTalk│
└────────┘ └────────┘ └────────┘ └────────┘ └────────┘
│ │ │ │
▼ ▼ ▼ ▼
云端LLM 语音合成 语音识别 数字人视频渲染
(DashScope) (Edge免费) (本地/云端) (本地GPU/OmniRT)
# apps/unified/main.py 核心流程
from opentalking.core.in_memory_redis import InMemoryRedis
from opentalking.pipeline.session.runner import SessionRunner
from opentalking.runtime.task_consumer import consume_task_queue
@asynccontextmanager
async def unified_lifespan(app: FastAPI):
# 1. 使用内存 Redis 替代真实 Redis
mem = InMemoryRedis()
app.state.redis = mem
runners: dict[str, SessionRunner] = {}
app.state.session_runners = runners
# 2. 启动任务消费队列(内置 Worker)
consumer = asyncio.create_task(
consume_task_queue(mem, avatars_root, device, runners)
)
# 3. 预热 STT 模型(可选)
await _prewarm_local_stt_on_startup()
# 4. 预热数字人形象 Worker(可选)
if prewarm_raw:
asyncio.create_task(_prewarm())
yield # 服务运行期间
# 5. 清理资源
consumer.cancel()
for s in list(runners.values()):
await s.close()
apps/web/src/App.tsx (前端交互)
│
├──→ lib/api.ts (HTTP API 调用)
│ └──→ apps/api/routes/sessions.py (会话创建/控制)
│ ├──→ opentalking/providers/llm (LLM 流式回复)
│ ├──→ opentalking/providers/tts (TTS 合成)
│ ├──→ opentalking/providers/stt (语音识别)
│ └──→ opentalking/pipeline/session (会话编排)
│
├──→ lib/sse.ts (SSE 事件订阅)
│ └──→ apps/api/routes/events.py (字幕/状态推送)
│
└──→ lib/webrtc.ts (WebRTC 视频播放)
└──→ opentalking/providers/rtc (实时音视频)
└──→ opentalking/models/quicktalk (视频渲染)
└──→ OmniRT (远端推理,可选)
| 场景 | 说明 |
|---|---|
| AI 新闻主播 | 实时新闻播报,支持新闻女主播形象 |
| 电商带货 | 虚拟主播进行商品讲解和推广 |
| 动漫脱口秀 | 动漫风格的虚拟角色进行娱乐内容创作 |
| 陪伴类角色 | 虚拟陪伴、客服助手等交互场景 |
| 企业知识库问答 | 结合 LLM 进行企业内部知识问答 |
| 在线客服 | 实时对话客服系统 |
| 教育讲解 | 教育培训场景的虚拟讲师 |
| 创意演唱/模仿秀 | 虚拟角色进行歌曲演唱或模仿表演 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。