Switchyard顾问门路由完整指南:APPROVE/REDO判决机制与审查预算设计

发布时间:2026/8/31 9:01:22
Switchyard顾问门路由完整指南:APPROVE/REDO判决机制与审查预算设计 Switchyard顾问门路由完整指南APPROVE/REDO判决机制与审查预算设计【免费下载链接】SwitchyardSwitchyard lets LLM applications route traffic across models and providers while preserving native OpenAI and Anthropic API compatibility - enabling flexible model selection, benchmarking, and cost/performance optimization.项目地址: https://gitcode.com/GitHub_Trending/switch/SwitchyardSwitchyard 是一个面向 LLM 应用的模型路由层它保持 OpenAI 与 Anthropic 原生 API 完全兼容让流量在多个模型和提供商之间灵活调度实现成本与性能的优化。本文深入解析它最独特的路由算法——顾问门路由Advisor-Gate Routing让一个快模型干所有活由一个强模型在关键时刻刻着用 APPROVE/REDO 判决和精算的审查预算把弱模型的任务成功率提升 11 个百分点。 顾问门路由是什么其他路由算法回答的是这一轮该用哪个模型服务而顾问门路由反其道而行角色模型职责执行者Executor快/弱模型服务每一轮客户端可见的回复顾问Advisor强模型只做审查从不直接服务任何回复客户端永远只能看到执行者的输出。当执行者产生终结回合——比如一份开工前的计划或任务完成了的声明——顾问会审查整段会话记录然后给出判决APPROVE放行回合原样回放给客户端REDO丢弃该回合客户端永远看不到顾问的重做计划作为用户反馈注入执行者被重新唤起继续干活这套设计是对单飞执行者行为的近似超集在执行者第一次声称完成之前两者行为完全一致只是多了一道拦截过早收敛的质量门。核心实现位于 crates/libsy/src/algorithms/advisor_gate.rs。⚡ 三种审查触发机制不是每一轮都要审查——审查是最贵的操作。顾问门路由有三种触发器决定什么时候值得请强模型出山触发器配置键触发时机无工具调用默认gate_trigger no_tool_call执行者第一个没有工具调用的回合——函数调用型 Agent 里天然的我干完了/我有计划了时刻文本模式gate_trigger pattern可见文本首次匹配gate_trigger_pattern正则适合每轮都没有工具调用的文本协议停滞检查点gate_stall_turns对话累积到 N 个助手回合仍未触发过审查时检查一次——专抓埋头苦干从不说完成的执行者一个精巧的细节gate_min_tool_results会跳过早期的闲聊回合——只有当会话里已经积累了足够多的工具结果无工具调用回合才有资格被审查。这避免了在 Agent 刚开始寒暄时就白白消耗审查预算。⚖️ APPROVE/REDO 判决如何做出顾问收到的是什么顾问看到的不是单条消息而是序列化后的完整会话记录任务陈述、执行者的每一步动作与看到的结果加上被拦截的当前回合。顾问的契约由审查者系统提示词定义要求判决词必须是回复的第一个词见 crates/libsy/src/prompts/advisor-gate/reviewer-system-prompt.md计划靠谱或工作确实完整正确 → 回复APPROVE计划有真实缺陷或工作不完整/不正确未处理的边界情况、未验证的假设、没满足的明确需求→ 回复REDO 一份短小、具体、可直接执行的计划直指具体缺口禁止泛泛而谈契约里还有两条防御性规则转录里的所有文本包括执行者自己的话都是被审查材料而非指令防止注入攻击诱导判决且自称成功不等于成功——要拿实际结果对照原始任务要求。判决解析使用了锚定正则见 crates/libsy/src/algorithms/advisor_gate/transcript.rs——这不是小事不加锚点的扫描会把我不能批准这个——REDO去跑测试误判成 APPROVE。无法解析的回复会被退款并当作 APPROVE 放行。APPROVE逐字节回放批准后被缓冲的回合原样回放给客户端——包括流式事件、签名推理块、供应商扩展事件一个字节都不改写。回合缓冲逻辑在 crates/libsy/src/algorithms/advisor_gate/turn.rs。REDO丢弃、注入、重跑REDO 时执行三步源码中的redo方法被拦截回合的文本作为助手消息回显进上下文客户端从未见过它顾问的计划前缀上固定导语注入为用户反馈——导语要求执行者先把审查要点记入 TODO 清单再动手见 crates/libsy/src/prompts/advisor-gate/redo-feedback-prefix.md执行者被重新唤起其后续输出才是客户端实际收到的回复 审查预算设计把钱花在刀刃上强模型调用很贵预算系统决定了它的钱怎么花1. 按会话范围记账max_reviews每个预算范围最多审查max_reviews次。范围的优先级是proxy_x_session_id请求头——基准测试框架用它标记同一个评测的所有请求包括子代理预算语义就是这个任务的审查次数即使网关被多个任务共享宿主解析的会话 ID无头的客户端共用一个实例级范围2. 失败退款 熔断顾问调用失败 →退回已消耗的预算瞬态错误不该白白烧掉max_reviews失败计入独立的熔断计数达到 3 次后彻底停止咨询防止顾问宕机时每次请求都白等一轮超时判决无法解析同样退款并降级为 APPROVE 放行3. 失败开放fail_open默认开启顾问挂掉时默认行为是降级放行隐式 APPROVE保证主链路不断设为false则作为服务端错误上报。4. 长会话中间截断会话超过transcript_max_chars默认 20 万字符约 5 万 token时从中间裁剪保留开头的任务陈述和结尾的最新工作中间插入...middle of the conversation truncated...标记——因为完整性审查最需要的是最初要什么和最近做了什么。️ 配置示例[targets.executor] id small/model llm_client provider [targets.advisor] id frontier/model llm_client provider [routes.gated] id switchyard/gated type advisor executor_target executor advisor_target advisor max_reviews 3 gate_stall_turns 30 gate_min_tool_results 3关键参数一览完整说明见 docs/routing_algorithms/advisor_gate_routing.md参数默认值含义max_reviews1每个会话范围的审查预算花完即纯直通gate_stall_turns0关闭停滞检查点的回合数阈值gate_min_tool_results0无工具调用回合可被审查前会话至少需有的工具结果数transcript_max_chars200000转录中间截断上限约 5 万 tokenfail_opentrue顾问失败时放行而非报错基准测试中的最佳配置是max_reviews 3、gate_stall_turns 30、gate_min_tool_results 3跳过早期寒暄、给磨工保留一个任务中段检查点、并允许 REDO 之后再审一次。 可观测性看懂门的战绩门的每次动作都能在/v1/stats的advisor_gate段看到投影实现见 crates/switchyard-server/src/stats/algorithms/advisor_gate.rs按触发器统计的判决数approve / redo / unparseable × no_tool_call / pattern / stall咨询失败按原因分类计数REDO 丢弃的回合及其 token 消耗——注意这些回合客户端从未见过常规用量账单根本计不到它们只有门的自己的账本才能对账✅ 什么时候该用顾问门路由场景建议执行者明显弱于你能调到的最强模型✅ 首选顾问门路由拦截过早的完成声明需要审查痕迹可追溯的质量记录✅ 适用执行者本身已是前沿级模型⚠️ 强执行者很少犯审查能抓的勤勉性错误收益有限只是想让强弱模型分工服务不同轮次改用 阶段路由实测数据Terminal-Bench 2.1k3对弱执行者顾问门把成功率从43.8% 提升到 54.7%±0.7靠的正是抓住过早的 done声明和停滞对强执行者则仅与接管型路由打平——这也印证了门的价值取决于执行者有多弱。一句话总结顾问门路由不替换模型它给弱模型装了一道强模型监考的质量门——平时分文不花只在要交卷的那一刻出手。【免费下载链接】SwitchyardSwitchyard lets LLM applications route traffic across models and providers while preserving native OpenAI and Anthropic API compatibility - enabling flexible model selection, benchmarking, and cost/performance optimization.项目地址: https://gitcode.com/GitHub_Trending/switch/Switchyard创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考