统一接口 · 自定义模块 · 独立替换 · 单独测试 · 持续优化
图按功能分组,每个方块代表一个独立模块。绿色实线表示 ASR → LLM → TTS 的内容转换;黄色箭头表示决策与状态控制的关系,虚线表示控制协作。为保持简洁,省略各模块之间的内部事件和外接调用连线。
一项功能,一个模块
| 模块 | 提供什么功能 |
|---|---|
| 传输 | 传递声音、文字、事件与播放反馈,配合会话运行时完成连接恢复 |
| ASR | 把声音转换成可持续修订的文字 |
| LLM | 组织回答,或接入自己的 Agent |
| TTS | 把可播回答转换成声音 |
| VAD | 检测讲话、停顿和继续讲话 |
| 决策 | 判断是否说完,以及附和、打断、停止和纠正意图 |
| 对话状态管理 | 根据判断与当前状态管理话轮、等待、取消和回复归属,并协调运行时执行 |
| 知识库 | 检索业务资料,为回答提供依据 |
| 记忆 | 保存和读取用户相关信息 |
| 工具 | 连接业务系统,按权限执行动作 |
| 数字人 | 提供可选的形象、动作与口型呈现 |
知识库、记忆和工具参与回答过程;数字人参与展示。它们按场景启用,普通语音对话不要求全部开启。角色、身份权限、额度、存储和诊断由公共底座支撑。
统一接口,让实现可以替换
模块通过各自明确的输入、输出与生命周期接口组合。可以独立替换 ASR、LLM、TTS 或对话管理;外接能力使用自己的检索、记忆、工具或渲染契约。自定义实现需兼容对应接口,并完成服务端装配。
决策负责判断,状态管理负责动作。 判停模块使用通用请求和结果,底层可以从 DeepSeek 等通用 LLM 换成当前选择的决策模型;上层仍消费“完整 / 未完整 / 不确定”的统一结果,不需要重写整条语音链路。具体启用的模型由部署和准入配置决定。
状态管理继续校验文本修订、回复归属和等待期限,协调取消与播放控制。模型判断不会直接操作播放器,也不会直接改写历史。
独立测试,持续优化
- 用相同输入集比较判停和打断模型的准确性、耗时、超时率与成本。
- 分别测试 ASR 识别、TTS 首声、状态流转及取消,定位具体模块的问题。
- 模块替换后验证完整语音链路,覆盖追问、改口、停止、打断与重连。
详细设计见实现架构、语音 Pipeline、话轮协调和决策接口。