首页
/ 数字人实时协作功能:Awesome-Digital-Human多用户交互实现

数字人实时协作功能:Awesome-Digital-Human多用户交互实现

2026-02-05 05:53:13作者:凌朦慧Richard

在数字化浪潮席卷各行各业的今天,数字人已不再是孤立的个体,而是逐渐演变为连接人与人、人与信息的重要桥梁。然而,许多数字人应用在多用户实时交互方面仍存在诸多痛点,如响应延迟、数据不同步、交互体验割裂等,严重影响了用户的使用感受和协作效率。本文将深入剖析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

多用户实时协作功能在许多场景中都有广泛的应用,如在线教育、远程办公、虚拟会议等。例如,在在线教育场景中,多个学生可以同时与数字人教师进行交互,提问问题、参与讨论,提高学习效果。在虚拟会议场景中,多个用户可以通过数字人进行实时交流,分享信息、协同工作,提升会议效率。

PC端页面预览:
PC端页面预览

移动端页面预览:
移动端页面预览

总结与展望

Awesome-Digital-Human的多用户实时协作功能通过先进的架构设计、高效的通信协议和灵活的模块扩展,为用户提供了流畅、稳定的实时交互体验。该功能的实现,不仅提升了数字人的实用性和趣味性,也为数字人技术的发展开辟了新的方向。

未来,Awesome-Digital-Human将继续优化多用户交互功能,支持更多的交互方式,如音视频流交互、跨模态交互等。同时,项目还将加强安全性和稳定性,为用户提供更可靠的服务。我们相信,随着技术的不断进步,数字人将在更多的领域得到应用,为人们的生活和工作带来更多的便利和乐趣。

如果你对Awesome-Digital-Human项目感兴趣,欢迎点赞、收藏、关注,获取更多项目相关的信息和更新。下期我们将介绍数字人情感控制功能的实现,敬请期待!

登录后查看全文
热门项目推荐
相关项目推荐