最近我们把自己做实时数字人过程中的一套工程框架整理了一下,开源出来了,项目叫 OpenTalking。
Github传送门是:OpenTalking
可以看看我们的实机演示:【电商数字人也能开源部署了?OpenTalking实战演示】 www.bilibili.com/video/BV1Cs…
它不是一个单纯的 talking head 模型,也不是只跑一段视频生成 demo 的脚本,而是一个更偏“实时对话数字人产线”的开源框架。简单来说,我们希望它能把 LLM、TTS、STT、WebRTC、字幕事件、角色音色、用户打断、前端交互和数字人视频驱动模型这些东西串起来,让一个数字人真正可以进行实时对话。
我自己在做这个方向的时候,一个很强烈的感受是:数字人 demo 和数字人产品之间,其实隔着一大段工程距离。
如果只是让一张脸动起来,或者让一段音频驱动口型,这件事现在已经有不少开源模型可以做了,比如 Wav2Lip、MuseTalk、LivePortrait、FlashTalk 这些路线。它们各自解决了数字人链路里的某一个关键环节,有的偏口型同步,有的偏头像驱动,有的偏高质量视频生成。但是当你真的想把它做成一个可以和用户连续对话、可以部署、可以切换模型、可以接入真实业务的系统时,问题就会变复杂很多。
用户说一句话之后,系统要先做语音识别;识别出来的文本要交给 LLM;LLM 最好是流式生成,不然等待时间会很长;生成的文本要交给 TTS;TTS 产生音频之后,还要同步驱动数字人视频;前端要低延迟播放音视频;字幕要和语音尽量对齐;用户中途打断时,LLM、TTS、视频流和字幕都要一起停掉,然后进入下一轮对话。
这些环节单独拿出来看,好像每一步都有现成工具。但真正串在一起之后,就会发现大量时间都花在“胶水层”上:状态管理、事件同步、模型服务适配、前后端通信、WebRTC 播放、配置管理、错误恢复、延迟控制、不同后端切换等等。
OpenTalking 想解决的就是这部分问题。
我们不希望它只绑定某一个具体的视频生成模型,而是希望它成为一个相对通用的实时数字人对话框架。你可以先用 Mock 模式把整条链路跑通,也可以在本地接入轻量模型做单机部署,还可以通过远端推理服务接入更高质量的数字人生成后端。对于开发者来说,这样的好处是:你不需要一上来就把所有组件都搭完,而是可以分阶段验证。
比如你刚开始只是想看看实时数字人产品的完整流程,那么可以直接用 Mock 模式。这个模式下不需要下载模型权重,也不需要准备复杂的视频推理环境,主要用来验证前端、后端、LLM、TTS、字幕和对话状态是否能跑通。
如果你想进一步在消费级显卡上跑一个真实的数字人,可以尝试本地推理路线,比如 QuickTalk 或 Wav2Lip 这类方案。它们更适合单机验证和轻量部署,适合开发者在自己的机器上做实验。
如果你对画质、稳定性和吞吐要求更高,可以走远端推理服务的路线,比如通过 OmniRT 接入 FlashTalk 这类后端。这样 OpenTalking 本身负责对话编排和前端交互,真正重的推理部分可以放在更合适的机器上。
我觉得这也是现在实时数字人领域很重要的一个趋势:模型本身当然重要,但系统工程同样重要。一个数字人是否“可用”,不只是看它单帧画质有多好,还要看端到端延迟是否足够低,音画是否同步,用户打断是否自然,多轮对话是否稳定,角色配置是否方便,部署和调试是否简单。
很多时候,用户感知到的体验并不是“这帧脸部细节提升了多少”,而是“它是不是能像一个实时存在的人一样响应我”。这就要求我们把 LLM、语音、视频和前端交互放在一个统一系统里一起优化。
OpenTalking 目前已经包含了 WebUI 前端、后端 API、会话编排、多种模型后端模式、角色配置、字幕事件和基础的实时对话链路。前端里可以配置数字人角色、音色、LLM、TTS、STT 和数字人驱动模型,也可以查看模型连接状态,并进行完整的对话演示。后端则主要负责编排一次对话中发生的各种事件,包括用户输入、模型回复、语音合成、字幕生成、视频播放和打断控制。
目前项目里支持的路线包括 Mock、Local、OmniRT 和 Direct WebSocket。Mock 适合快速跑通;Local 适合本地部署;OmniRT 适合接入远端推理服务;Direct WebSocket 则方便开发者对接自己的模型服务。
如果只是想快速体验,可以从 Mock 模式开始。大致流程是先 clone 项目,安装依赖,复制 .env.example,配置好 LLM 和 TTS,然后运行启动脚本:
export DIGITAL_HUMAN_HOME=/opt/digital_human
mkdir -p "$DIGITAL_HUMAN_HOME"
cd "$DIGITAL_HUMAN_HOME"
git clone https://github.com/datascale-ai/opentalking.git
cd opentalking
uv sync --extra dev --python 3.11
source .venv/bin/activate
cp .env.example .env
bash scripts/start_unified.sh --mock
启动之后,默认可以在浏览器里打开:
http://localhost:5173
这样就能先看到完整的前端交互和对话流程。即使没有准备好数字人模型,也可以先验证整个产品链路。
我们后面还会继续完善几个方向。一个是接入更多数字人模型后端,让不同 talking head、portrait animation、audio-to-video 模型都能更方便地挂进来。另一个是继续优化低延迟交互,包括流式 LLM、流式 TTS、字幕事件同步和用户打断。还有一个方向是角色资产管理,比如角色形象、音色、人设 prompt、静默视频、默认开场白、表情风格等,未来都应该可以更系统地配置和复用。
我个人比较看好实时数字人在几个场景里的应用,比如 AI 新闻主播、在线客服、教育讲解、企业知识库问答、电商讲解、虚拟 IP 和本地化陪伴类应用。尤其是现在 LLM、TTS 和 STT 已经比较成熟,接下来真正决定体验的,可能就是谁能把整条链路做得更稳定、更低延迟、更容易部署。
当然,OpenTalking 现在还处在比较早期的阶段,很多地方还不够完善。我们把它开源出来,一方面是希望给做数字人的开发者一个可以直接上手的工程起点,另一方面也希望和更多对实时数字人感兴趣的人一起讨论:数字人到底应该怎么从一个演示视频,走向一个真正可用的交互产品。
如果你也在关注实时数字人、Talking Head、LLM Agent、TTS/STT、WebRTC 或私有化部署,可以看看这个项目。
GitHub: github.com/datascale-a…
欢迎 Star、提 issue,也欢迎一起交流这个方向。