Voice Agent能听清每个字,却读不懂你的情绪:旁路架构实战
在语音交互场景中,一个诡异的现象正在上演:ASR模型把每个字都转写得清清楚楚,Voice Agent却依然频频“惹怒”用户。问题不在于听不清,而在于听不到。当前主流架构中,ASR将语音转换为文字后,语速的快慢、停顿的长短、音高的起伏、声音能量的变化这些承载情绪的关键信号被大量丢弃。一句同样的话在不同情绪状态下说出,可能是接受、无奈、敷衍或压抑着怒火。系统听清了每一个字,却没有跟上对话状态的变化。要让Voice Agent从“能对话”走向“会交流”,情绪感知能力已不是可选项,而是必须补齐的核心短板。
ASR转写正确不等于状态完整
ASR与Emotion处理的是同一段音频中的不同信号。ASR提取的是语义层信息——意图、实体、显式语义,这些进入Transcript后可以被后续模块使用。但pitch、energy、speech rate、pause、intonation、stress、hesitation等副语言信号在这一过程中被大幅压缩。文字转写完全正确,Call State却可能完全不完整。这意味着Emotion分析不应该被设计成ASR的一个附加字段,它需要独立处理原始音频信号,保留自己的时间窗口、置信度体系和更新节奏。简单地把情绪标签作为字段塞进ASR输出,忽略了信号本质的差异,无法真正解决状态丢失问题。
Emotion输出状态而非标签
如果Emotion Service最终只返回一个“angry”标签,它对Agent的决策价值极为有限。离散的情感标签无法回答:情绪正在上升还是回落?这次判断的置信度有多高?它持续了多久?是不是一次短暂的高能量噪声片段?真正有价值的是一组可供Runtime使用的状态数据:frustration 0.84、tension 0.71、trend rising、confidence 0.87、observed_at时间戳。这些数值不是绝对真相,而是带置信度的观测。Call State Service在此基础上还需要做平滑处理、过期控制和版本管理,避免一次尖峰触发策略切换,也避免旧状态在用户已经平静后继续生效。系统最终要判断的,是Call状态是否发生了足以改变行为的显著变化,而不是给客户贴上一个永久标签。
Voice Agent的成败,不在转写的文字里、不在生成的回复里,而在每一次情绪变化能否被及时感知的对话状态里
“行业观察”积墨 AI 智能体开发平台
快速搭建具备商业价值的 AI 智能体,支持复杂工作流编排、50+ 主流模型接入与私有化部署。
旁路架构设计:并行不阻塞
Emotion不应该直接决定转人工或停止追问,从信号到动作之间需要一层明确的policy decision。我们将Conversation State和最新Call State一起交给Jev,让它回答输出空间受约束的问题:是否进入de-escalation模式?是否停止继续提问?是否优先执行action而不是继续解释?是否关闭upsell?是否准备human handoff?Jev负责decisions,LLM负责strings。前者给出mode、flags、scores或yes/no;后者在确实需要语言表达时,根据已经选定的policy生成合适的回复。当frustration较高且用户正在打断时,系统可以直接cancel TTS、延长listening window;如果invoice request已存在且repeat count上升,系统先调用lookup工具再决定是否需要LLM解释。Emotion由此成为改变turn control、tool ordering和文本生成策略的核心变量,而不仅仅是prompt中的一个附加条件。
Jev决策门:分离决策与生成
情绪感知能力的缺失,正在成为制约Voice Agent拟人化体验的核心瓶颈。通过旁路架构设计,Emotion Service可以独立于主链路持续更新affect state,Call State Service完成多源状态合并,Jev决策门负责从状态到策略的快速判断。这条路径的价值不在于替代LLM,而在于把小而高频的策略判断变成可观测、可回放、可单独评估的接口。企业落地时,建议从audio fork开始逐步验证,同时建立完整评估链路:audio window到state version到decision到action到outcome,才能准确定位问题所在。
