数字人实时协作功能:Awesome-Digital-Human多用户交互实现
在数字化浪潮席卷各行各业的今天,数字人已不再是孤立的个体,而是逐渐演变为连接人与人、人与信息的重要桥梁。然而,许多数字人应用在多用户实时交互方面仍存在诸多痛点,如响应延迟、数据不同步、交互体验割裂等,严重影响了用户的使用感受和协作效率。本文将深入剖析Awesome-Digital-Human项目如何突破这些瓶颈,实现高效、流畅的多用户实时协作功能,让你全面掌握其实现原理与应用方法。读完本文,你将了解到多用户交互的核心架构、关键技术、实现步骤以及实际应用场景,轻松构建属于自己的数字人协作平台。
多用户交互架构设计
Awesome-Digital-Human的多用户交互功能基于先进的分层架构设计,确保了实时数据传输的高效性和稳定性。该架构主要分为协议层、服务层和引擎层三个部分,各层之间分工明确、协同工作,共同支撑起多用户实时交互的核心功能。
系统架构图如下所示:
graph TB
Client["客户端应用<br/>Client Application"] --> WS["WebSocket服务<br/>WebSocket Server"]
WS --> Server["流式服务<br/>Streaming Service"]
Server --> Engine["流式引擎<br/>Streaming Engine"]
Client -.-> |"数据流<br/>Data Stream"| WS
WS -.-> |"实时结果<br/>Real-time Results"| Client
subgraph "协议层 Protocol Layer"
WS
end
subgraph "服务层 Server Layer"
Server
end
subgraph "引擎层 Engine Layer"
Engine
end
在协议层,项目采用WebSocket协议实现客户端与服务端之间的双向通信。WebSocket协议具有低延迟、全双工通信的特点,非常适合实时数据传输场景。服务层负责处理客户端的请求,进行数据的分发和处理,确保多用户之间的数据同步。引擎层则包含了各种核心引擎,如ASR(语音识别)引擎、TTS(语音合成)引擎、LLM(大语言模型)引擎等,为数字人的交互提供强大的技术支持。
实时通信协议实现
实时通信协议是多用户交互的基础,Awesome-Digital-Human定义了一套完整的二进制协议格式,确保了数据传输的准确性和高效性。所有WebSocket消息都使用统一的格式,包括Action、Payload Size和Payload三个部分。
协议格式如下:
┌──────────────────┬──────────────────────┬──────────────────┐
│ Action (18字节) │ Payload Size (4字节) │ Payload (可变) │
│ │ │ │
│ UTF-8编码字符串 │ 大端序无符号整数 │ 实际数据内容 │
│ 右侧空格填充 │ │ │
└──────────────────┴──────────────────────┴──────────────────┘
其中,Action字段表示操作类型,长度固定为18字节,使用UTF-8编码,右侧用空格填充。Payload Size字段表示Payload的字节长度,为4字节大端序无符号整数。Payload字段则是实际的数据内容,长度可变。
客户端请求类型和服务端响应类型的定义如下表所示:
| Action | 描述 | Payload |
|---|---|---|
ENGINE_START |
开始流式识别 | 空 |
ENGINE_PARTIAL_INPUT |
普通数据块 | 二进制数据 |
ENGINE_FINAL_INPUT |
最终数据块 | 二进制数据 |
ENGINE_STOP |
结束流式识别 | 空 |
PING |
心跳包 | 空 |
| Action | 描述 | Payload |
|---|---|---|
ENGINE_INITIALZING |
引擎初始化 | 空 |
ENGINE_STARTED |
引擎就绪 | 空 |
ENGINE_PARTIAL_OUTPUT |
部分识别结果 | 二进制数据 |
ENGINE_FINAL_OUTPUT |
最终识别结果 | 二进制数据 |
ENGINE_STOPPED |
关闭引擎 | 空 |
ERROR |
错误信息 | 二进制数据(错误描述) |
PONG |
心跳响应 | 空 |
在项目中,WebSocket服务的实现位于digitalHuman/server/ws.py文件中。该文件定义了WebsocketManager类,负责管理WebSocket连接、发送消息和广播消息等功能。其中,broadcast方法用于将消息广播给所有连接的客户端,实现多用户之间的实时数据同步。
async def broadcast(self, message: str) -> None:
# 广播消息
for connection in self._connections:
await connection.send_text(message)
多用户数据同步机制
为了实现多用户之间的数据同步,Awesome-Digital-Human采用了基于WebSocket的广播机制。当一个用户发送消息时,服务端会将消息广播给所有连接的客户端,确保每个用户都能实时接收到最新的交互数据。
在前端,WebSocket客户端的实现位于web/lib/api/websocket.ts文件中。该文件定义了WebsocketClient类,负责与服务端建立连接、发送消息和处理消息等功能。当客户端接收到消息时,会调用onMessage回调函数进行处理,更新界面显示,实现多用户之间的实时交互。
this._ws.onmessage = (event) => {
if (this._onMessage) {
const { action, payload } = parse_message(event.data);
this._onMessage(action as string, payload);
}
};
在数字人对话过程中,聊天记录的管理和同步是非常重要的一环。项目中使用了状态管理库来管理聊天记录,确保多用户之间的聊天记录保持一致。相关代码位于web/app/(products)/sentio/hooks/chat.ts/sentio/hooks/chat.ts)文件中。该文件定义了useChatWithAgent钩子函数,负责处理与Agent的对话逻辑,包括发送消息、接收消息和更新聊天记录等功能。
const chatWithAgent = (
message: string,
postProcess?: (conversation_id: string, message_id: string, think: string, content: string) => void
) => {
addChatRecord({ role: CHAT_ROLE.HUMAN, think: "", content: message });
addChatRecord({ role: CHAT_ROLE.AI, think: "", content: "..." });
// ...
};
模块扩展与多引擎支持
Awesome-Digital-Human具有良好的可扩展性,可以方便地集成各种第三方引擎,如ASR引擎、TTS引擎、LLM引擎等,为多用户交互提供更丰富的功能支持。
项目的配置文件采用了模块化的设计,位于configs/目录下。该目录包含了agents和engines两个子目录,分别用于存放Agent和引擎的配置文件。全局配置文件configs/config_template.yaml用于管理各个模块的子配置文件,定义了系统的通用配置、服务配置、引擎配置和Agent配置等。
COMMON: # 通用配置项
NAME: "Awesome-Digital-Human" # 名字
VERSION: "v3.0.0" # 版本
LOG_LEVEL: "DEBUG" # 日志等级
SERVER: # 服务配置项
IP: "0.0.0.0" # 服务启动IP
PORT: 8000 # 服务启动端口
ENGINES: # 引擎配置项
ASR: # 语音识别配置项
SUPPORT_LIST: [ "xxx.yaml" ] # 支持的语音识别列表
DEFAULT: "xxx.yaml" # 默认使用的语音识别配置
# ...
以Dify Agent为例,其实现代码位于digitalHuman/agent/core/difyAgent.py文件中。该文件定义了DifyApiAgent类,实现了与Dify平台的集成,支持流式交互模式,为多用户提供更智能的对话体验。
async def run(
self,
input: TextMessage,
streaming: bool,
**kwargs
):
try:
if not streaming:
raise KeyError("Dify Agent only supports streaming mode")
# ...
except Exception as e:
logger.error(f"[DifyApiAgent] Exception: {e}", exc_info=True)
yield eventStreamError(str(e))
部署与应用场景
Awesome-Digital-Human提供了多种部署方式,包括裸机开发部署和容器部署,满足不同用户的需求。容器部署是推荐的方式,具有环境隔离、部署简单等优点。相关的部署说明位于docs/deploy_instrction.md文件中,详细介绍了部署的步骤和注意事项。
# 容器部署(体验首选,推荐)
docker-compose -f docker-compose-quickStart.yaml up -d
多用户实时协作功能在许多场景中都有广泛的应用,如在线教育、远程办公、虚拟会议等。例如,在在线教育场景中,多个学生可以同时与数字人教师进行交互,提问问题、参与讨论,提高学习效果。在虚拟会议场景中,多个用户可以通过数字人进行实时交流,分享信息、协同工作,提升会议效率。
总结与展望
Awesome-Digital-Human的多用户实时协作功能通过先进的架构设计、高效的通信协议和灵活的模块扩展,为用户提供了流畅、稳定的实时交互体验。该功能的实现,不仅提升了数字人的实用性和趣味性,也为数字人技术的发展开辟了新的方向。
未来,Awesome-Digital-Human将继续优化多用户交互功能,支持更多的交互方式,如音视频流交互、跨模态交互等。同时,项目还将加强安全性和稳定性,为用户提供更可靠的服务。我们相信,随着技术的不断进步,数字人将在更多的领域得到应用,为人们的生活和工作带来更多的便利和乐趣。
如果你对Awesome-Digital-Human项目感兴趣,欢迎点赞、收藏、关注,获取更多项目相关的信息和更新。下期我们将介绍数字人情感控制功能的实现,敬请期待!
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0152- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
LongCat-Video-Avatar-1.5最新开源LongCat-Video-Avatar 1.5 版本,这是一款经过升级的开源框架,专注于音频驱动人物视频生成的极致实证优化与生产级就绪能力。该版本在 LongCat-Video 基础模型之上构建,可生成高度稳定的商用级虚拟人视频,支持音频-文本转视频(AT2V)、音频-文本-图像转视频(ATI2V)以及视频续播等原生任务,并能无缝兼容单流与多流音频输入。00
auto-devAutoDev 是一个 AI 驱动的辅助编程插件。AutoDev 支持一键生成测试、代码、提交信息等,还能够与您的需求管理系统(例如Jira、Trello、Github Issue 等)直接对接。 在IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。Kotlin03
Intern-S2-PreviewIntern-S2-Preview,这是一款高效的350亿参数科学多模态基础模型。除了常规的参数与数据规模扩展外,Intern-S2-Preview探索了任务扩展:通过提升科学任务的难度、多样性与覆盖范围,进一步释放模型能力。Python00
skillhubopenJiuwen 生态的 Skill 托管与分发开源方案,支持自建与可选 ClawHub 兼容。Python0112

