要给 Hume AI Voice 添加实时 AI 数字人,可以消费 EVI 的 audio_output 事件,并把同一份助手语音同时交给播放链路和 Spatius。 Motion Server 将语音转换为动作数据,AvatarKit 在终端本地渲染角色。应用还必须让音频顺序、正常结束和打断在两条链路上保持一致。
独立指南: Spatius 与 Hume AI 不存在隶属、背书或官方集成合作关系。本文仅依据双方公开文档说明一种互操作架构,并不代表已经提供打包好的原生连接器。
最后核验:2026 年 9 月 24 日。
Hume AI 与 Spatius 各自负责什么
Hume Empathic Voice Interface 是对话层。它接收用户实时音频、管理交互,并返回包括转写、助手文本、输出音频和响应生命周期事件在内的结构化消息。
Spatius 从视觉边界开始工作:接收应用已经批准播放的助手语音、生成动作数据,并通过 AvatarKit 在客户端本地渲染数字人。它不替代 Hume 的语音模型、提示词、工具、对话状态或轮次管理。
| 职责 | Hume EVI 应用 | Spatius |
|---|---|---|
| 用户麦克风与对话会话 | 负责 | 不负责 |
| 助手行为、工具与声音 | 负责 | 不负责 |
| 最终助手语音 | 生成并播放 | 作为数字人动作输入 |
| 音频排序与轮次协调 | 由应用负责 | 消费已经协调好的轮次 |
| 面部动作生成 | 无需负责 | Motion Server 生成动作数据 |
| 数字人渲染 | 不负责 | AvatarKit 在客户端本地渲染 |
| 产品 UI、字幕、分析与人工转接 | 由应用负责 | 不负责 |
这样可以保留 Hume 的表现力语音体验,同时为网页、移动端、自助终端、教学或引导式工作流增加可见角色。
参考架构
最重要的原则是:用户听到的 Hume 输出音频,必须也是驱动数字人的那一份音频。
用户麦克风
↓
Hume EVI 会话
├─ 对话、工具与打断事件
└─ 助手 audio_output 消息
↓
应用音频协调器
├─ 播放队列
└─ 单次解码与格式转换
↓
Spatius Motion Server
↓ 动作数据
AvatarKit 客户端渲染
不要把用户麦克风音频发送到数字人层。仅为了驱动角色,也没有必要传输提示词、私密转写、工具参数、客户记录或智能体内部状态。
保持数字人同步的音频路径
Hume 的音频指南说明,audio_output 消息的 data 字段包含 Base64 编码的 WAV 音频。由于输出可能比实际播放速度更快,应用需要维护有序播放队列。
数字人链路应该只解码一次消息,并保留它在当前助手轮次中的位置。解码后的语音供两个协调后的消费者使用:用户播放链路和 Spatius 输入链路。如果当前 Spatius 会话要求标准的单声道、16 位有符号小端 PCM,应先解开 WAV 容器,再进行一次确定性的格式转换。不能把多个 WAV 文件连在一起后当作没有文件头的原始 PCM。
| 音频规则 | 原因 |
|---|---|
| 两套系统共用一个助手轮次 ID | 防止旧分片驱动下一轮回答 |
| 只保留一份有序助手语音源 | 保证动作对应用户真正听到的内容 |
| 只执行一次有文档依据的格式转换 | 避免采样率、声道和容器歧义 |
| 区分正常结束与打断 | 防止把自然结束当作取消 |
| 只设置一个权威播放路径 | 避免回声和重复播放 |
实施步骤
1. 先单独验证 EVI
从 Hume 的 TypeScript 快速入门开始。在连接第二个实时系统之前,先确认麦克风采集、智能体响应、工具调用、正常结束和用户打断都可用。否则,音频故障很容易被误判成数字人故障。
2. 长期凭证必须留在服务端
使用 Hume 当前文档提供的客户端安全授权方式,不要在浏览器中暴露长期 API Key。Spatius 也采用同样的安全边界:API Key 留在后端,AvatarKit 只获取 Direct Mode 客户端指南中要求的短期会话信息。
3. 给每个助手轮次分配唯一标识
响应开始时创建 utterance ID,并把它关联到播放分片、转换后的数字人音频、正常结束和打断事件。同一会话内不复用的递增序号就足够。
协调器应该拒绝已经结束或被打断的轮次所产生的迟到分片。这比从转写文本猜测当前响应更可靠。
4. 解码并分发每条输出音频
先对 audio_output.data 做 Base64 解码,再解开 WAV 容器并把语音加入用户播放队列。随后把同一份语音转换成当前 Spatius 会话要求的格式,按顺序流式发送给 Motion Server。Spatius 音频规范针对的是助手语音,不是用户麦克风输入。
收到 Hume audio_output:
校验当前 utterance ID
只解码一次 WAV
把语音加入播放队列
转换同一份语音并加入 Spatius 队列
正常完成响应:
完成两条队列
通知数字人输入结束
用户打断:
停止该轮次的播放
清空该轮次未处理的数字人音频
以上是架构级伪代码。精确方法名应以当前 Hume 事件定义和 AvatarKit SDK 参考为准,不应复制未经验证的适配器代码。
5. 正确结束完整响应
Hume 在助手轮次完成时会发送包括 assistant_end 在内的生命周期消息。最后一个语音分片进入两条队列后,再结束对应的 Spatius 输入。正常 end-of-input 允许已接收语音自然完成,与丢弃被打断的响应不是同一操作。
6. Barge-in 时同时停止两套系统
Hume 将 user_interruption 和新的 user_message 视为停止排队播放的原因。相同事件必须作用于对应的数字人轮次。如果声音已经停止而缓冲中的数字人输入仍在继续,角色就会看起来像在无视用户。
| 事件 | 播放动作 | 数字人动作 |
|---|---|---|
| 第一段助手音频 | 启动当前队列 | 启动对应 Spatius utterance |
| 当前轮次后续音频 | 保持顺序 | 保持相同顺序 |
| 助手正常结束 | 播放完并完成 | 发送正常 end-of-input |
| 用户打断 | 停止并清空队列 | 打断并清空同一轮次 |
| 已关闭轮次的迟到分片 | 丢弃 | 丢弃 |
| 任一连接失败 | 记录失败层 | 展示可控的纯音频或重试状态 |
Spatius 不只是音量可视化
波形或“正在说话”指示器只能响应音量,无法提供语音驱动的面部动作。Spatius 架构由 Motion Server 返回动作数据,再由 AvatarKit 本地渲染角色,而不是向客户端再传输一条完成的视频流。
应用仍可控制布局、镜头、字幕、工具状态、无障碍控制、降级 UI 和角色在产品中的位置,也可以把语音层和数字人层分开测量:
| 指标 | Hume/应用层 | Spatius/数字人层 |
|---|---|---|
| 首段助手音频时间 | 在此测量 | 作为输入边界 |
| 音频间断或对话错误 | 在此测量 | 不包含 |
| 音频到动作的传输 | 不包含 | 在此测量 |
| 客户端渲染稳定性 | 产品客户端 | 在目标设备测 AvatarKit |
| 打断正确性 | 共享产品事件 | 必须与声音同时停止 |
推荐记录 utterance ID、Hume 事件类型、分片序号、首段音频时间、首帧动作时间、格式转换失败、打断原因和清理结果。关于分段测量,可参考如何评估实时 AI 数字人延迟。
成本与适用场景
Hume 的订阅、用量、超额费用和并发条款应以其官方定价页为准。Spatius 与应用基础设施属于独立成本层,应使用 Spatius 定价单独建模。没有明确工作负载时,不应把两家供应商合并成一个通用的每分钟价格。
当用户本来就面对屏幕,且产品希望为 Hume 语音增加品牌化视觉形象时,这套架构更适合。纯电话部署通常不需要数字人。如果团队希望一家供应商承担完整对话栈并直接输出成品视频,它也可能不是最佳选择。
如需查看不绑定具体语音供应商的方案,可阅读如何把 TTS 音频流式传给实时 AI 数字人。
Hume AI 数字人常见问题
这是 Hume AI 与 Spatius 的官方集成吗?
不是。本文只依据公开接口说明一种独立互操作方案,不代表 Hume 合作关系或打包好的原生连接器。
Spatius 会替代 Hume EVI 吗?
不会。Hume 继续负责语音和对话,Spatius 接收经过批准的助手语音并增加动作生成与本地数字人渲染。
应该根据转写文本驱动数字人吗?
转写适合字幕与 UI 状态。数字人应由最终助手音频驱动,确保动作跟随用户实际听到的声音。
EVI 的 WAV 数据可以直接当作原始 PCM 吗?
不可以。先解码 WAV 容器,再把采样转换成当前 Spatius 会话要求的格式,不能把重复的 WAV 文件头当作 PCM。
概念验证必须检查什么?
需要验证授权、音频解码、顺序、格式转换、数字人就绪、正常结束、打断、迟到分片拒绝、重连和目标设备渲染。
保留 Hume EVI,只增加视觉层
Hume 可以继续承担表现力语音和对话,Spatius 负责视觉呈现。明确共享的音频协调器和打断边界后,两套系统都更容易测试、定位问题与独立替换。
带上你的 Hume EVI 架构、目标客户端和音频配置。我们可以协助评估 Spatius 音频交接方案,而不替换现有语音智能体。 预约演示, or ,或查看 Spatius 定价.。