数字人实时协作功能: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项目感兴趣,欢迎点赞、收藏、关注,获取更多项目相关的信息和更新。下期我们将介绍数字人情感控制功能的实现,敬请期待!
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00

