本文档提供了在使用 Gemini Live API 时可能会遇到的问题的问题排查步骤。
连接意外断开
如果会话连接意外断开,可能是由于令牌限制、会话连接超时或网络问题所致。
行为
会话已断开连接,并显示错误代码 1000 或 1006。
可能的原因
- 未启用上下文窗口压缩功能,且上下文令牌数量超过了会话的上下文令牌数量上限(最多 12.8 万个)。
- 未实现会话恢复逻辑,或者恢复逻辑未正确实现。
- 互联网连接不稳定。
原因和解决方案
上下文令牌数量超过了会话的上下文令牌限制:为防止超出该限制,请启用上下文压缩。这可能会影响对话质量,因为模型会间歇性地舍弃之前的对话历史记录。
会话连接在 10 分钟后过期:管理会话恢复,以实现更长时间的互动。如需了解更多详情,请参阅有关会话恢复的最佳实践。
互联网连接不稳定: 请验证互联网连接状况,因为稳定性波动可能会导致连接问题。
模型未能理解用户
如果模型似乎无法理解您的输入,请确保音频格式正确,并考虑麦克风质量和背景噪声。
行为
模型回答了不相关的信息、回答了错误的信息,或者要求用户重复。
可能的原因
- 输入音频格式不正确。
- 麦克风质量不佳。
- 背景噪声过大。
原因和解决方案
输入音频格式不正确:验证输入音频是否采用小端字节序、16 位 PCM 格式,且采样率为 16 kHz,并使用单个单声道。
麦克风质量不佳:录制一段简短的音频并播放,以测试麦克风质量。 如果麦克风质量不佳,请尝试使用质量更好的麦克风。
背景噪声过大: 录制一段简短的音频并播放,测试背景噪声水平。如果背景噪声过大,请尝试将麦克风移近用户,或使用降噪效果更好的麦克风。
模型不响应
如果您未收到模型的回答,请检查语音活动检测选项和 WebSocket 连接。
行为
模型未回答。
可能的原因
- VAD 设置不正确。
- WebSocket 连接中断。
原因和解决方案
VAD 设置不正确: 用户已停用 VAD。在这种情况下,模型会一直等待用户的语音,而不会响应用户。如果 VAD 已停用,请务必向模型发送
ActivityStart和ActivityEnd事件。WebSocket 连接中断:如果 WebSocket 连接中断,客户端与服务器之间将无法通信。检查 WebSocket 连接状态,确保连接已正确建立。
无法中断模型
如果您无法在模型说话时中断它,请确保您正确处理了播放缓冲区和流式音频。
行为
模型继续说话,用户没有打断。
可能的原因
- 未能清空播放缓冲区。
- 无法将音频流式传输到 Gemini Live API。
- 自定义 VAD 未正确实现。
原因和解决方案
未能清空播放缓冲区:当客户端从模型接收到中断信号时,应立即清空播放缓冲区。否则,模型会一直说话。
未能将音频流式传输到 Gemini Live API:客户端应以 20 毫秒到 40 毫秒之间的块大小将音频流式传输到 Gemini Live API,以最大限度地减少延迟。如果客户端无法将音频流式传输到 Gemini Live API,模型将不会向客户端发送中断信号。
自定义 VAD 未正确实现:如果自定义 VAD 无法识别语音开始,或者客户端无法向模型发送
ActivityStart信号,则模型不会向客户端发送中断信号。
已知限制
Gemini Live API 存在以下限制。每项内容都包含缓解措施(如有)。
不支持优先级随用随付
Gemini Live API 不支持将优先随用随付作为消费选项。
语音可以在单个回合中发生变化
在极少数情况下,模型会使用您在 voice_name 字段中设置的声音以外的声音进行回答。此更改仅限于单个回合,后续回合会再次使用配置的语音。无需进行任何配置更改。
在长时间的对话中,语速可能会加快
当模型生成较长的连续语音回答时,其说话节奏可能会逐渐加快。在时长超过 60 秒的单轮对话中,这种行为最为明显。如需保持投放节奏稳定,请使用以下方法:
将长输出内容分段: 避免提示模型一次性读取大段文本。 将长篇回答拆分为不超过 100 字或不超过 50 秒的语音音频。
使用对话轮流模式:采用互动式对话模式,在各个片段之间将控制权返回给用户。
模型可能会意外切换语言
如果模型确定用户所说的语言不是配置的语言,则可以采用该语言进行回答。为了减少意外切换的几率,请通过设置 language_code 字段并在系统指令中说明预期语言来提供语言提示。如需了解详情,请参阅设置语言和声音。
数字序列的重复回放不一致
当用户说出一连串的数字(例如手机号码、卡号或账号)时,模型可能会重复该序列,但数字不正确或缺失。为了减少这些错误,您可以添加一条系统指令,指示模型一次读取序列中的一位数字,并在数字不清晰时要求用户缓慢重复该序列。