尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Pydantic AI 实时会话遇到 Gemini 会话上限断开怎么配置重连恢复

Pydantic AI 实时会话遇到 Gemini 会话上限断开怎么配置重连恢复 Pydantic AI 实时会话遇到 Gemini 会话上限断开怎么配置重连恢复【免费下载链接】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 会话接入 Gemini Live 时长通话一定会遇到一个断开点提供方对单条连接时长有上限provider session limitGemini 达到这个上限后连接就会断开。没有恢复机制时这种意外关闭是致命的——RealtimeSession会直接从迭代中抛出RealtimeError整个会话结束。文档给出的做法是把共享设置reconnect设为一个ReconnectPolicyPydantic AI 会带指数退避地重新拨号、重放配置并自动启用 Gemini 会话恢复session resumption把此前的对话轮次带到新连接上不需要改动应用的事件循环。这篇讲怎么配置它、状态如何恢复、以及怎么验证重连真的生效。依据是 Connection lifecycle、Google Gemini Live 与 Troubleshooting 三篇文档。断开前会发生什么先确认你遇到的是这种断开提供方限制单条连接的存活时长长时间通话到达上限即被断开具体时长值以提供方页面为准文档不写死数值。Gemini 会在到达上限前不久发出GoAway。但 Pydantic AI 目前只在连接真正断开后重连不会在GoAway时主动切换所以长通话可能短暂中断在对话轮中间。文档把这一点标记为已知限制项目在 issue 跟踪器上有对应记录。没有reconnect策略时provider 的意外关闭会触发不可恢复的会话错误会话迭代器抛出RealtimeError。所以恢复要覆盖两件事扛住断开本身以及保住会话状态。前者由reconnect策略完成后者由该策略自动开启的 Gemini session resumption 完成配置上是同一个动作。安装与认证准备先安装 Gemini realtime 可选组它打包了google-genaiSDK 和 realtime 传输依赖文档中的pip/uv-add表示用 pip 或 uv 任一方式安装pip/uv-add pydantic-ai-slim[google-realtime]认证沿用GoogleModel的方式Gemini Developer API 用providergoogleVertex AI/ADC 用providergoogle-cloudAPI key 与凭据按 Google model 文档 配置自定义凭据、项目、region 或客户端时传GoogleProvider/GoogleCloudProvider。配置 reconnect 策略把reconnect设为ReconnectPolicy。它可以是模型级默认settings也可以按单次会话通过model_settings传入lifecycle 文档 的示例形式from pydantic_ai import Agent agent Agent() realtime agent.realtime( google:gemini-2.5-flash-native-audio-latest, model_settings{reconnect: {max_attempts: 5}}, )策略里两个字段max_attempts单次断开后允许的重拨次数耗尽后抛出RealtimeError。默认3。max_reconnects整个会话生命周期内允许的总重连次数。max_attempts在重拨成功后会重置单独用它拦不住一个反复断开又反复重连的端点max_reconnects覆盖的正是这种场景。默认50按提供方在时长上限处结束会话、长会话会在该边界合法地续期这一用途给的宽松值。注意不需要手动开google_enable_session_resumption只要存在reconnect策略Gemini 会话恢复就自动启用。反过来如果显式写google_enable_session_resumptionFalse又同时给了策略connect 时直接抛UserError——因为不带恢复的重拨会静默丢掉整个对话框架宁可拒绝也不静默丢上下文。Gemini 侧状态恢复的机制与边界重连时 Pydantic AI 用内存中最新的 server-side handle 重拨并重新应用 instructions、tools、voice 等配置。三条边界要清楚handle 只存在于内存无法持久化到另一个进程进程重启后恢复能力一并消失。如果断开发生在 server 签发 resumption handle 之前签发发生在 connect 后不久state_restored会报False且运行中的工具调用被取消。断开时正在生成中的回复不会被续上Gemini 把它关闭为一个 interrupted response已产出的部分转录保留在 history 里随后才发出RealtimeSessionReconnectEvent并安静等待下一次输入。Troubleshooting 文档对应的排查建议state_restored为False时开始一段新对话为True但某句当前话术消失了说明那段进行中的媒体不在被恢复的已完成轮次历史里属于预期行为。验证重连是否生效验证方式是消费事件流时观察RealtimeSessionReconnectEvent检查其state_restored字段from pydantic_ai.realtime import RealtimeSessionReconnectEvent async with realtime.session() as session: async for event in session: if isinstance(event, RealtimeSessionReconnectEvent): print(reconnected, state_restored , event.state_restored)判断标准来自文档本身事件出现说明一次断开后的重拨成功会话回到监听状态继续工作。state_restoredTrue表示对话被完整带过、没有切断对话轮Gemini 在 server 签发 resumption handle 后即报True。重试次数耗尽仍失败RealtimeError从迭代中抛出——这也是没有恢复的明确信号。限制与错误判断长通话短暂中断 mid-turn 是当前已知行为GoAway不触发主动切换不是配置错误调大max_attempts也改变不了这个时间窗。RealtimeError还覆盖连接失败、握手超时、意外关闭、无效帧这几类情况它继承自ModelAPIError所以except ModelAPIError可以同时兜住 HTTP 与非 HTTP 的 provider 失败。RealtimeSessionErrorEventprovider 操作失败和RealtimeInputTranscriptionErrorEvent单次用户转录失败属于可恢复失败以事件形式到达会话在之后仍然可用不应据此结束通话。更多症状对照可以查 realtime troubleshooting 页provider 无会话上限类问题的通用排查在 troubleshooting 总页。【免费下载链接】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),仅供参考
返回列表