跳到正文
Agent 教程 V216 · LLM Gateway:模型切换时,哪些事必须接得住?
返回课程/Agent 教程 V2
第 20 / 21 章 约 6 分钟

16 · LLM Gateway:模型切换时,哪些事必须接得住?

模型网关让接入、重试和切换遵守同一份执行契约,尤其要接住半段输出、在途工具和用户取消。

模型网关让接入、重试和切换遵守同一份执行契约,尤其要接住半段输出、在途工具和用户取消。

本课的位置:LLM Gateway位于模型接入位置,管理协议适配、限流、预算、取消与切换,下一步操作仍由模型提出。

文档插图

研究Agent已经能查版本说明、生成带出处的报告。现在接入第二家模型服务:主服务偶尔限流,备用的工具协议不同;还有一个候选只有文本能力。怎样切换,才不会把需要资料核对的报告降成没有证据的一段回答?

Gateway位于Harness与模型服务之间,负责请求翻译、事件归一、错误分类、用量与选路。单应用先在内部封装适配层通常就够了;多个应用需要共享凭据、配额和审计时,再考虑独立服务,承担额外部署、网络与故障恢复成本。工具权限和业务动作仍由运行时管理,网关不能因为模型提出请求就直接执行。

下面用教学情境走过一次接入:工具参数交错到达,主服务返回限流,随后用户取消一个没有继续输出的请求,最后判断备用是否获准。过程说明的是应有的处理关系,不是某家服务的接口或性能记录。

文档插图

收到半个工具请求时,先别动业务系统

模型通过流逐步传回内容,不保证每次都是完整句子,更不保证工具参数一次给全。一家服务可能按内容块发送,另一家可能按调用发送;适配层需要区分文字、工具参数片段、工具项完成、整次响应结束和错误。

例如两个读取请求交错到达:

到达内容适配层应当怎样处理
调用一的参数开头暂存到调用一,不能执行
调用二的参数开头单独暂存到调用二,不能混在一起
调用一补齐记录编号0003继续保留,等待其完整标记
调用二补齐记录编号0002同样等待,不以“看起来完整”代替协议完成
两个工具项完成,响应正常结束解析并校验完整提议,再交给运行时

网络传输还有自己的边界:一个网络块可能只包含半个事件,也可能包含多个事件。应先恢复完整事件,再理解其语义。文字编码、事件边界和工具参数边界不能混成同一件事。

随后还要检查工具名、参数结构、记录权限、当前Run资格与预算。能解析不等于能执行;参数结构符合要求,也不等于用户授权读取那份记录。

如果已经收到某个工具项的完成标记,后面却又来了它的参数片段,应按协议异常处理。不能一边继续追加新内容,一边把此前保存的旧参数交给执行,否则实际动作与最终记录可能对不上。

本情境选择等整次响应正常结束后才交付工具,牺牲一点启动时机,换取较清楚的失败边界。需要更低延迟时,也可以在单个工具项完整后提前启动;代价是后续失败、取消和切换必须知道哪些动作已经在途,不能再自动重放整段请求。

限流之后,是等待、换模型,还是直接失败?

主服务返回429,只能先知道请求受到了限制,还要判断具体原因。暂时速率限制可以等待,账户额度不足通常不能靠连续重试解决;参数错误、鉴权失败、能力不支持,也不应自动循环。

假设服务要求至少等待2秒,再发起下一次尝试。网关同时检查任务是否已取消、还剩多少总时间、预算和尝试额度是否足够。如果剩余时限不足,就结束这次调用,而不是为了重试超过用户截止时间。

指数退避逐次增加等待,随机偏移让一批请求不要同时再次冲击服务。服务明确给出等待要求时要按契约处理。所有尝试共享总时限和预算,切换备用也不重新获得一份完整额度。

文档插图

重试责任也要确定。若业务调用方、网关、SDK每层都允许总计3次尝试,最坏会变成27次下游尝试。可以由网关统一管理,也可以交给SDK,但不要让各层独立叠加;次数是否含首次、哪些错误可试、总时限怎样共享,都应明确。

只有尚无输出、没有不明在途动作且错误允许重试时,自动再试才比较清楚。模型已输出半段文字后,不能直接接上另一模型的下半段;工具已经发出发布动作后,更不能因后续响应失败就重新生成整份计划并再发一次。

模型调用标识用于关联生成,业务动作的幂等身份与账本仍归执行层。动作结果未知时先查询,换模型不能绕过这一步。原服务若还可能运行,其请求身份与资源预留也不能随路由切换一起被忘掉。

没有新内容到达,总时限还会生效吗?

有一种容易遗漏的情况:系统只在读到新片段时检查时间,但连接已经安静很久,没有下一条内容,于是检查机会也消失了。

总时限必须主动触发。它与用户停止共同产生本次调用的取消信号,传到真实请求、读流和等待环节;不能只关闭页面上的输出。

文档插图

假设任务的总时限为30秒。第30秒到达时,即使没有新片段,也要禁止下一轮调用并通知当前适配器中止;接着等连接、等待与相关资源的退出确认,才说明已停止。

若服务只确认收到取消要求,界面应显示“正在停止”;若无法确认,则保留未知与请求标识,继续核对。调用方不再等待,不能当作远端已经停止计算,更不能立即释放全部预算后持续发新请求。

同样,某个并行请求失败,不代表其他请求也退出了。各自取消、各自确认;不能让一个超时出口掩盖仍在消耗资源的工作。对于不合作的本地执行,需要可回收的执行单元;取消信号本身不能终止任意计算。

备用可用,还要看它是否满足原任务

现在主服务被限流,候选列表里有同区域备用、只有文本的模型、跨区域模型和更昂贵的模型。不能只挑连得上或报价最低的一个。

本教学情境要求资料只在区域甲处理,需要工具与结构化结果,成本权重不超过2。权重用于说明路由策略,不是实际报价:

候选工具与结构化结果处理区域成本权重决定
主模型支持甲1获准,但当前限流
同区域备用支持甲1可以接手
文本模型只有文本甲1能力不足
跨区域模型支持乙1不符合资料范围
高成本模型支持甲3超出当前预算策略

文档插图

不同任务可以采用不同路由:只读摘要和需要工具核对的报告,能力与质量门槛不一样。若所有候选都不满足条件,就失败、等待或明确请求调整任务,不能暗中丢掉出处、结构约束或资料范围。

Schema是参数与结果结构的契约,不同接口支持的约束可能不同。某个服务不支持必填或额外字段限制时,不能静默删除约束再宣称等价。应拒绝不兼容路由,或明确由应用补充校验,并按原任务标准评估结果。

切换时还要重新整理可移植输入。任务事实、已确认工具结果和获准来源可以转换;另一家的专有会话标识、未完成内容块,不能原样传过去。能力表要绑定具体接口、模型与版本,升级后重新确认关键行为。

统一接入,也不能抹平权限与用量

模型凭据留在受控服务端,与业务工具凭据分开。允许名单、资料区域和预算来自服务端任务策略,不能采用模型自报的更高权限。日志保留必要的配置引用,授权头与密钥不能混进提示或观测原文。

并发、最大输出、总尝试与总预算应在调用前约束。多个执行者共享额度时,还要共同核对在途请求;单个网关进程把计数减掉,不代表整个系统的资源已释放。

最终用量事件缺失,就保留“用量未知、费用待核对”,不能记成0。计价估算需说明模型、版本、币种和包含范围;缓存用量若是输入总量的子项,就不能再重复相加。模型费用与工具、执行环境的消耗也应分别说明。

最后仍要回到第15课的判定标准:协议能接通,不代表回答质量相同。更换模型时,比较相同任务下的事实、引用、停止与恢复,再看完整报告的时延和总成本。网关把差异整理成系统能处理的边界,是否适合接手这项任务,仍需要证据。