四种模式,让Gemini 3.8 Live语音代理不再尴尬停顿
如果你曾经构建过语音代理,你就会知道那种尴尬的停顿。你问一个问题,代理执行查询,然后在你等待时,线路安静下来。
在这个演示中,使用 Gemini 3.8 Live 和 Google Agent Development Kit(ADK)构建的保险理赔代理让对话继续下去。在下面两分钟的通话中,来电者报告公寓墙壁有裂缝。代理在查找保单时继续说话。通话中途,来电者切换成印地语,代理也跟着切换,尽管代码中没有设置语言。然后来电者打开摄像头,指着一处淡淡的痕迹,称之为裂缝。代理说出它实际看到的东西,保存照片,并将来电者的索赔标记为未确认。
Gemini 3.8 Live 为你处理语音中最困难的部分。它能听到来电者、大声回答、注意到他们何时停止说话,并在他们插话时中断自己的话。如果你是实时语音代理的新手,可以从这个 Google Cloud Tech 演练开始,它涵盖了连接、音频循环和中断。本文从它结束的地方继续,介绍四种模式,让语音代理在真实通话中工作:
- 在代码工作时继续说话
- 在摄像头前仔细核实来电者展示的内容
- 让一个模型说话,同时让一组代理处理文书工作
- 让模型阅读,让 Python 决定
完整代码在 GitHub 上。这个应用由这四种模式组成:
1. 在代码工作时继续说话
当工具较慢时,代理会安静下来。当你的代码检查保单号时,来电者什么都听不到,开始怀疑电话是否断了。在理赔电话中,答案往往改变代理接下来应该说的话。如果保单已失效,来电者需要听到这个消息。
Gemini Live 有相关设置。把工具标记为 NON_BLOCKING,你的代码运行时代理就能继续说话。结果返回后,你告诉代理如何传递结果:
- 等待停顿(WHEN_IDLE)用于常规消息,比如有效保单。
- 插话(INTERRUPT)用于不能等待的消息,比如失效或未知保单,或安全风险。
在这个应用中,每个工具都是非阻塞的,只有保单问题或安全风险会插话。
2. 在摄像头前仔细核实来电者展示的内容
演示中,来电者指着墙上一个淡淡的痕迹称其为大裂缝。代理同时听到索赔并看到痕迹。风险在于它倾向于相信语音,并把“裂缝”写入索赔。
解决办法从照片工具开始。当代理保存照片时,pin_evidence_photo 让它保留三个独立的答案:
- 代理看到什么:只包含照片中的内容。
- 来电者说它是什么:用来电者自己的话。
- 照片是否支持这个说法:仅当照片清楚显示来电者描述的内容时才为是。
然后服务器再次检查。它将保存的照片和来电者的话发送给第二个模型 Gemini 3.8 Flash,并使用该模型的答案作为说明文字和确认标签。代理在通话中仍然可以保持礼貌,但保存的说明和标签来自第二次检查。
3. 让一个模型说话,同时让一组代理处理文书工作
理赔需要很多结构:谁在打电话、保单号、发生时间和地点、有哪些证据、理赔下一步该去哪里。如果接听电话的代理必须在回答前全部填好,来电者会听到死一般的寂静。
这就是来自 ADK 的 SequentialAgent,它按顺序运行七个步骤。这些步骤从对话中提取事实、标记缺失信息、应用规则并为人工理赔员撰写索赔。与此同时,接听电话的代理继续说话。
每次来电者说完话或保存照片时,后台都会在后台运行,屏幕上的笔记本会随进度更新。当代理想要了解进度时,它会调用一个工具并取回简短的摘要,包括仍然缺失的内容和建议的下一步问题。和模式 1 中的结果一样,除非摘要标记了安全风险,否则它等待停顿后再传递。
4. 让模型阅读,让 Python 决定
模型可能会告诉来电者,一笔 24,800 美元的维修超过了 25,000 美元的限额。在实时通话中,来电者在任何人检查之前就会听到。
后台的七个步骤中只有两个使用模型 Gemini 3.8 Flash。第一步把对话转换成干净的字段,比如损失金额和日期。第二步按类型和严重程度对索赔分类。其他五个步骤是普通的 Python 函数,它们应用关于金钱、日期和安全性的规则:
- 损失达到或超过 25,000 美元会标记给人工理赔员审核。
- 损失发生后超过 90 天才报告的索赔会标记为需要调查。
- “谢天谢地,没人受伤”不应触发伤害警报。模型将每个安全事实标记为存在、不存在或不确定,Python 对存在或不确定的情况进行升级。
在仓库中,Python 步骤使用一个名为 FunctionNode 的小类。它运行普通函数并将结果保存给下一步,因此规则保持易读且易于修改。仓库还包括这些规则的测试,无需 API 密钥即可运行。
试试看
在全部四种模式中,Gemini 3.8 Live 运行对话,而你的代码决定代理何时开口以及索赔中记录什么。
演示只在你自己机器上运行,使用模拟保单列表,并将每项理赔保存在内存中,因此重启服务器会清空它。要运行它,克隆仓库,添加 Gemini API 密钥,然后按照 README 操作。然后输入保单号 AUTO-11111 试一下失效保单的插话,或输入 H0-44721 试一下有效保单。
获取代码:GitHub 上的 Insurance Claim Live Agent Team。