资讯动态

Pydantic AI 实时语音的 push-to-talk 会话模型不响应怎么排查

发布时间:2026/9/14 3:40:56 来源:尧图企业网站定制
Pydantic AI 实时语音的 push-to-talk 会话模型不响应怎么排查【免费下载链接】pydantic-aiHow Python does AI. Agents, realtime voice, image generation, embeddings. Every model, every interface, typed end to end.项目地址: https://gitcode.com/GitHub_Trending/py/pydantic-ai在 Pydantic AI 的 realtime 会话里把模型配置成 push-to-talk手动回合控制模式后一个常见故障现象是用户说完话、音频也已经发出去了模型却始终沉默不出声、不出字幕。这类问题在官方 realtime 排障文档 docs/realtime/troubleshooting.md 中被归为 “The model never responds” 一类根因通常集中在回合动词是否发全其次是音频线上契约是否满足。本文按“确认模式 → 检查回合动词 → 核对音频契约 → 验证响应”的顺序给出排查路径适用于 OpenAI、Azure OpenAI、xAI 这些声明了手动回合支持的 provider注意Gemini 不支持见文末。先确认会话真的处于 push-to-talk 模式Pydantic AI 的 realtime 会话默认启用自动回合检测VAD由 provider 判断用户何时说完并自动触发回复。要进入 push-to-talk必须在模型设置里显式关闭它from pydantic_ai import Agent from pydantic_ai.realtime.openai import OpenAIRealtimeModel, OpenAIRealtimeModelSettings agent Agent() model OpenAIRealtimeModel( gpt-realtime, settingsOpenAIRealtimeModelSettings(turn_detectionFalse) )只有 profile 声明了supports_manual_turn_control的模型才接受这套手动回合控制。排查时可以先读 profile 标志而不是按 provider 名字猜async with agent.realtime(model).session() as session: print(session.profile.get(supports_manual_turn_control, False))commit_audio()、clear_audio()和create_response()三个方法都受这个标志约束在声明不支持的模型上调用它们会在控制消息发出之前直接抛出UserError。也就是说如果排查中先撞到了连接阶段的UserError问题不是“没响应”而是当前模型根本走不了 push-to-talk 路径。主因commit_audio()与create_response()是否漏发这是官方文档给出的头号原因。[docs/realtime/troubleshooting.md](https://link.gitcode.com/i/eda90a613ac00c2976426f1faf7930b7)对该症状的结论是In push-to-talk mode, callcommit_audio()and thencreate_response()after sending audio.回合机制页面的 Edge cases 也重复了同一条判断push-to-talk 下的沉默通常意味着commit_audio()或create_response()被遗漏了。理解为什么两个都不能少turn detection 关闭后commit_audio()只是结束用户回合、把缓冲的音频定稿为输入不会触发模型回复——必须再显式调用create_response()才会要求响应。所以完整的一轮交互是三步from pydantic_ai import Agent from pydantic_ai.realtime.openai import OpenAIRealtimeModel, OpenAIRealtimeModelSettings agent Agent() model OpenAIRealtimeModel( gpt-realtime, settingsOpenAIRealtimeModelSettings(turn_detectionFalse) ) async def main(): async with agent.realtime(model).session() as session: # b... 替换为你的麦克风采集块有符号 16 位小端单声道 PCM 字节 await session.send_audio(b...) await session.commit_audio() await session.create_response()对照你的实现检查两点是否只有send_audio(...)之后就等待了——缺commit_audio()用户的音频根本没被定稿成回合。是否有commit_audio()但没有create_response()——回合定稿了但没有东西要求模型说话会话就停在倾听状态。另外如果怀疑某段输入本身无效比如误采的噪音可以用clear_audio()丢弃尚未提交uncommitted的音频输入再重新采集一轮注意它只对未提交的内容有效已commit_audio()的输入收不回来。核对音频线上契约回合动词发全了仍然没反应时下一步检查送进send_audio()的字节是否符合线上契约。按 Audio, images, and transcripts 的说明send_audio()接受的是原始、有符号 16 位小端单声道 PCMPCM16 mono没有容器格式也没有编解码器。送进 WAV 容器字节、立体声或浮点采样都会导致模型“听到”的是无效音频。采集和回放速率以会话报告的值为准按session.audio_input_sample_rate采集输入按session.audio_output_sample_rate回放输出输入和输出速率可能不同不要假设一致。官方排障页对 “No audio, or no useful speech” 症状给出的就是这一条检查。OpenAI realtime 的契约是 mono PCM16、输入输出均为 24 kHz见 OpenAI provider 页的功能支持表。文档建议从 100 ms 的输入块开始再根据自己的传输层调整。怎么验证模型其实有响应修好配置后用会话自己的事件流和媒体视图来确认响应链路是通的而不是凭感觉听声音stream_audio()返回的 PCM16 迭代器就是模型回复音频有块流出说明模型在说话。媒体视图要和主迭代器并行消费文档建议各起一个 task。看字幕stream_transcripts()逐个产出SpeechPartpart.speaker区分user/assistant收到speaker assistant的 part 说明模型已产出回复文本。用回合边界判断一轮结束迭代session本身拿到事件流RealtimeTurnCompleteEvent的语义是“模型完成回复且没有工具仍在活动”见 Events。它到达说明整条链路音频 → 定稿 → 响应 → 播放完毕走通了。查可恢复错误事件流里的RealtimeSessionErrorEvent表示发生了可恢复的 provider 错误会话仍然可用——第一轮响应没声音时值得在事件流里找一次它RealtimeInputTranscriptionErrorEvent则只影响某一句话的转写不影响会话本身。注意失败何时抛出如果你只消费了音频/字幕视图、从未迭代事件流会话故障不会即时抛出而是在async with块退出时从close()抛出来见 Connection lifecycle 的 Errors 一节。排障时建议始终保留对async for event in session的迭代。需要更完整的观测时可以用 Logfire 插桩logfire.instrument_pydantic_ai()或在 agent 上设instrumentTrue每个 provider 响应对应一个chat {model}spanmodel turn completespan 标记回合边界见 Usage and observability。边界与下一步Gemini 不支持 push-to-talkPydantic AI 没有暴露 Gemini 的手动回合动词对它设置turn_detectionFalse会在连接前抛出UserError。需要 push-to-talk 的模型选择 OpenAI如gpt-realtime、Azure OpenAI 或 xAI——provider 文档的功能支持表里这几家的 Manual turns 一行都标为turn_detectionFalseplus commit/create verbs。本文覆盖的是“模型完全不响应”。如果你的现象是模型把同一句话说了两遍那是另一类问题send(...)文本回合本身已经要求回复后面不能再跟create_response()详见 Turns and interruptions 的 Text turns 一节。以上都没定位到的问题回到通用排障入口 docs/troubleshooting.md或通过项目的帮助渠道docs/help.md提问。【免费下载链接】pydantic-aiHow Python does AI. Agents, realtime voice, image generation, embeddings. Every model, every interface, typed end to end.项目地址: https://gitcode.com/GitHub_Trending/py/pydantic-ai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价