学习指南: 应用部分 9. 模型路由与令牌预算

模块「应用部分 9. 模型路由与令牌预算」中第 3 / 5 节课
您正在未登录状态下查看课程。 请登录,以保存进度并参加测试。

主题:应用部分 9. 模型路由与令牌预算

难度级别:中级

预计学习时间:4-6小时(理论+实践),额外2小时用于完整阈值校准流程

前置知识: 熟悉SDD周期(第一卷中的信号收集、检测、诊断)

第一卷第15部分:智能体可替换性

第一卷第14部分:项目技能与Qwen Code钩子

基础Python和命令行操作

理解MTTR、SLA、事件升级等概念

学习目标: 模拟并验证廉价模型层级故障场景,确保仅关键任务进入昂贵层级,同时保持token_health_min ≥ 0.5

按事件管理阶段(分类、分级、诊断、计划、修复、事后分析)分配令牌,local-coder与frontier-reviewer之间保持90/10比例

制定并应用反古德哈特定律规则验证预算优化,将MTTR与四项守门指标关联

确定紧急模式(红色按钮)的激活条件,并论证何时手动模式比继续自动化更安全

为毕业项目创建budget-note.md工件,记录故障风险、影响、守护阈值及决策

概述:本章将每日令牌预算从静态限额转变为SDD流水线的可管理路由表。层级预算(tier-budgeting)按工作阶段在各模型层级间分配令牌:廉价模型local-coder处理常规任务(分类、分级、初步诊断),昂贵的frontier-reviewer仅在关键审查、争议决策和事后分析时启用。核心技能是故障模拟:当廉价层级宕机时,系统不应自动将全部队列重定向至昂贵层级,否则配额将在数分钟内耗尽,真正的P0/P1事件将无资源可用。本章包含可运行示例(compile.py、simulate.py、inspect.py)、15分钟和45分钟故障场景,以及与反古德哈特定律验证的集成以防止指标扭曲。

核心概念: 层级(tier):处理层次结构中的模型级别。local-coder是用于大规模常规任务的基础层级,frontier-reviewer是用于争议和高风险案例的顶层层级。角色而非模型名称:不同项目中可能有不同的实现。

令牌健康度(Token health):跟踪已消耗和剩余令牌与计划比例的预算健康度综合指标。最小值token_health_min用作阻止自动切换的守护阈值。

故障转移至前沿(Failover to frontier):层级故障时的负载切换计划。分级切换:仅高严重度和高时效性任务进入frontier-reviewer,其余进入降级队列或手动通道。

降级队列(Degraded queue):降级队列——廉价层级故障时无法在标准模式下处理、但尚未需要立即升级至昂贵层级的任务。

120秒后手动队列(Manual queue after 120s):120秒超时后开启的手动通道,用于自动处理未完成的任务。并非退回混乱:继承相同的证据协议和PostToolUse验证。

控制储备(Control reserve):仅在风险、队列或不确定性上升时激活的预算保险层。不是"剩余随便用"。

红色按钮(紧急模式):在正式条件下激活的受保护管理模式:两个令牌健康度风险窗口、队列超限、关键严重度SLA超限或local-coder宕机。限制新队列,禁止大规模自动修复,为P0/P1保留frontier-reviewer。

反古德哈特定律验证:禁止以其他指标恶化为代价认定发布成功的规则。MTTR需与escalation_share、silent_p0、unresolved_manual_ratio、postmortem_gap和token_health_min共同验证。

预算守护者(Budget-keeper):令牌预算控制服务,每分钟重新计算spent[p]、queue[p]、quota[p]、事件时效、影响范围和置信度差距,以做出路由决策。

预算演练(Budget-drill):每日训练演练:将昨日告警流通过当前budget_network.yaml回放,并人为关闭local-coder 15/30/45分钟以校准系统灵敏度。

实践练习: 标题:编译预算计划并验证比例

问题:在book2/examples/budget-keeper目录中,从specs/budget_network.yaml编译预算计划。验证daily_budget_tokens等于10,000,000,local层级配额总和为9,000,000,frontier层级为1,000,000。将结果与参考outputs/budget_plan.example.json对比。

解答:1. cd book2/examples/budget-keeper

  1. python3 scripts/compile.py --budget-spec specs/budget_network.yaml --out out/budget_plan.json
  2. 验证字段daily_budget_tokens: 10000000
  3. 计算local-coder总和:3000000 + 2000000 + 1500000 + 800000 + 700000 + 300000 + 700000 = 9000000
  4. 计算frontier-reviewer总和:120000 + 140000 + 180000 + 120000 + 200000 + 240000 + 0 = 1000000
  5. diff out/budget_plan.json outputs/budget_plan.example.json — 应无差异(或仅注释不同)

难度:初级

标题:45分钟故障模拟与综合检查

问题:模拟local-coder故障45分钟,队列中有20个事件,手动超时120秒。同时验证四个条件:failover_to_frontier == 5、degraded_queue == 15、manual_queue_after_120s == 15、token_health_min >= 0.5。解释为何不能单独检查各指标。

解答:1. python3 scripts/simulate.py --plan out/budget_plan.json --scenario scenarios/fail_local_45m.json --out out/fail_result.json

  1. python3 scripts/inspect.py --result out/fail_result.json --query "failover_to_frontier==5 && degraded_queue==15 && manual_queue_after_120s==15 && token_health_min>=0.5"
  2. 预期返回码:0(所有条件满足)
  3. 为何不能单独检查:仅验证failover_to_frontier==5无法保证其余15个任务未通过其他机制进入frontier;仅验证token_health不显示队列分布;&&复合条件保证整体图景——任一指标失败即中断演练并需排查

难度:中级

标题:15分钟与45分钟故障对比分析

问题:模拟local-coder短故障15分钟。验证token_health_min >= 0.7。解释为何短故障对frontier层级的消耗较缓和,以及这如何影响生产环境守护阈值的选择。

解答:1. python3 scripts/simulate.py --plan out/budget_plan.json --scenario scenarios/fail_local_15m.json --out out/fail_15m_result.json

  1. python3 scripts/inspect.py --result out/fail_15m_result.json --query "token_health_min>=0.7"
  2. 返回码:0
  3. 解释:15分钟故障时队列积累较少,需升级至frontier-reviewer的任务较少,备用预算消耗较少。45分钟故障时队列增长,frontier层级压力增大,token_health下降更明显。
  4. 生产结论:守护阈值0.60(低于45分钟故障观测到的谷底0.5,但留有裕量)在可预测故障时阻止自动切换;45分钟故障击穿守卫,需人工决策

难度:中级

标题:毕业项目风险表述

问题:基于模拟结果,在capstone/budget-note.md中为你的主案例(如high_memory_usage)创建记录。记录风险、影响、simulated_floor、alert_threshold和decision。解释simulated_floor与alert_threshold的区别。

解答:最小片段:

risk: "local-coder不可用45分钟"
effect: "5个任务进入frontier-reviewer,15个保持降级/手动"
simulated_floor: "token_health_min == 0.5(45分钟时的下探值)"
alert_threshold: "token_health_min < 0.60(反古德哈特定律表的守卫值)"
decision: "不将全部队列转入昂贵层级"

区别:simulated_floor(0.5)是模拟中观测到的谷底,测试场景的实际最小值。alert_threshold(0.60)是守卫阻止生产环境自动切换的警戒线。0.5至0.60之间是预警区——系统仍在运行,但需操作员关注。

难度:中级

标题:压缩预算校准(5M)

问题:使用specs/budget_network_5m.yaml校准500万令牌的变体。验证90/10比例保持。模拟相同45分钟故障,分析总预算减半如何影响系统行为和守护阈值的适用性。

解答:1. python3 scripts/compile.py --budget-spec specs/budget_network_5m.yaml --out out/budget_plan_5m.json

  1. 验证:daily_budget_tokens == 5000000,local总和 == 4500000,frontier总和 == 500000
  2. python3 scripts/simulate.py --plan out/budget_plan_5m.json --scenario scenarios/fail_local_45m.json --out out/fail_result_5m.json
  3. python3 scripts/inspect.py --result out/fail_result_5m.json --query "token_health_min>=0.5"
  4. 分析:预算减半时绝对配额减少,但系统相对压力增大——相同20个事件流消耗更大比例的储备。token_health_min可能跌破0.5或守护阈值0.60变得不可达。结论:按流量比例扩展预算时保持control_reserve裕量;流量不匹配时重新审视守护阈值或将frontier层级比例增至15-20%

难度:高级

标题:反古德哈特定律网关验证

问题:为预算网关编写validation.md的YAML片段。条件:若MTTR P95 < 5分钟且升级比例 < 8%,则在silent_p0 > 2%、unresolved_manual_ratio > 5%、postmortem_gap > 10%或token_health_min < 0.60时验证失败。解释为何采用这种成对检查。

解答:validation.md片段:

checks:
  - id: anti_goodhart_budget
    if:
      all:
        - mttr_p95 < "5m"
        - escalation_ratio < 0.08
    then:
      fail_if:
        - silent_p0 > 0.02
        - unresolved_manual_ratio > 0.05
        - postmortem_gap > 0.10
        - token_health_min < 0.60

为何成对检查:若无此机制,系统可能通过压低升级(静默P0)、将复杂任务推入手动通道而不做事后分析、或耗尽frontier层级预算来优化MTTR。以其他指标恶化为代价改善单一指标——这是典型的古德哈特定律扭曲。网关阻止这种"节约"。

难度:高级

案例研究: 标题:生产环境local-coder故障:autoscale_200pct事件

场景:生产系统appointments-api,早间负载高峰。11:00时廉价模型local-coder的本地端点因集群网络故障不可用45分钟。20个与自动扩容至200%负载相关的事件进入队列。手动超时设置为120秒。每日预算:1000万令牌,local-coder与frontier-reviewer分配比例为900万/100万。

挑战:经典陷阱:廉价层级故障时自动将全部流量重定向至昂贵层级。这将导致100万frontier-reviewer配额在数分钟内耗尽,之后真正的P0/P1事件将无资源可用。替代陷阱:将所有任务留在降级队列,增加MTTR并可能违反关键案例的SLA。第三陷阱:不跟踪令牌健康度,未注意到危险级别的下探。

解决方案:应用分级故障转移策略:仅5个影响范围最大且时效超过90秒的任务进入frontier-reviewer。15个任务留在降级队列。120秒后,未自动处理的任务开启手动通道manual_queue_after_120s。预算守护者每分钟重新计算token_health、spent[p]、queue[p]、quota[p]。当token_health_min < 0.60(守护阈值)时,自动切换被阻止,需人工决策。本场景中token_health_min达到0.5——击穿守卫,激活红色按钮审查。

结果:四项检查条件同时满足:failover_to_frontier == 5、degraded_queue == 15、manual_queue_after_120s == 15、token_health_min >= 0.5。昂贵层级为真正的P0/P1保留。关键任务MTTR未受影响。手动通道继承证据协议,使local-coder恢复后能够审计所有决策。阶梯式回退:先30% local-coder配额用于分类/分级,三个稳定窗口后恢复诊断/计划,完整恢复仅在PostToolUse审计后。

经验教训: 不能单独检查故障指标——仅&&复合条件保证完整性

simulated_floor(0.5)与alert_threshold(0.60)之间需要预警裕量,而非仅应急响应

手动模式不是退回混乱,而是保留证据链的可控降级

稳定后的阶梯式回退防止过早恢复引发二次级联错误

相关概念: failover_to_frontier

token_health_min

degraded_queue

manual_queue_after_120s

red_button

反古德哈特定律验证

预算演练

标题:支付网关团队的每日预算演练

场景:支付网关事件处理团队实施了层级路由,每日预算5000万令牌(因任务复杂度高采用85/15比例)。每日9:00启动预算演练:将昨日约800条告警流通过budget_network.yaml回放,并人为关闭local-coder 15、30和45分钟。

挑战:流量从200增至800事件时,继承自教学示例的90/10比例不足:即使15分钟故障也使frontier层级超载。团队无法区分"正常压力"与"需要政策审查"。Silent_p0开始上升——复杂事件因frontier资源不足未升级即关闭。

解决方案:演练数据显示:15分钟故障时token_health_min降至0.55(低于守护阈值0.60),30分钟时降至0.35。团队将比例调整为80/20,将control_reserve从70万增至200万,引入中间层级mid-coder用于诊断/计划(中等成本模型)。token_health_min守护阈值根据新灵敏度调整为0.65。反古德哈特定律网关补充mid_tier_saturation指标。

结果:校准后15分钟故障保持token_health_min >= 0.70,30分钟故障 >= 0.50。Silent_p0从4.2%降至1.1%。MTTR P95稳定在3.2分钟,unresolved_manual_ratio未上升。团队确立规则:流量变化超25%或连续两次演练token_health_min < 0.60时审查比例。

经验教训: 教学比例90/10是起点,非教条;规模扩展需重新审视

预算演练在投产前发现问题,但仅当团队(而非仅CI)阅读结果时有效

中间层级可能比简单增加frontier比例更有效

演练指标应影响运营政策,而非仅YAML配置

相关概念: 预算演练

层级预算

控制储备

反古德哈特定律验证

token_health_trend_5m

学习建议: 按顺序学习:先compile(理解结构),再simulate 45m(故障),然后simulate 15m(对比),最后inspect复合条件。跳过步骤会破坏对灵敏度的理解

使用双栏工作笔记:左侧记录命令和脚本输出,右侧记录解读("这对我的项目意味着什么")。这将可运行示例转化为项目决策

将out/budget_plan.json与outputs/budget_plan.example.json的diff用作诊断工具,而非仅正确性检查。任何偏差都是深入compile.py逻辑的契机

视觉型学习者:绘制6阶段流程图,含两个层级和三个出口(frontier、降级、手动)。标注SLA阈值应用位置和token_health_min守护点

听觉型学习者:大声朗读inspect的四指标复合条件,逐条解释每个&&。若无法解释为何恰好5个任务进入frontier——返回"分级切换"章节

动觉型学习者:修改fail_local_45m.json场景——将队列从20改为40,时长增至60分钟,manual_timeout_sec减至60。预测结果,然后用simulate + inspect验证。错误预测是深化理解的宝贵信号

每次成功演练后立即记录capstone/budget-note.md,趁上下文新鲜。延迟记录会导致simulated_floor与alert_threshold间的细微差别丢失

与同事进行"成对检查":一人解释为何不能将全部队列放入frontier,另一人构思看似合理的反例。争论澄清政策的适用边界

额外资源: Examples/budget-keeper/readme.md:本地可运行示例,含完整脚本compile.py、simulate.py、inspect.py及故障场景

Book/part-04-environment.md:教学AgentClinic中的单一模型选择——与生产层级路由的对比

Book/part-14-build-your-own-workflow.md:项目技能与钩子——路由的便捷接入点

Book/part-15-agent-replaceability.md:智能体可替换性——层级间切换的前提

Appendix-d-threshold-calibration.md#d3-层级预算-第9章:完整校准流程:预算、比例和manual_timeout_sec的"低/默认/高"对照表

Examples/goodhart-validator/scripts/run validation.py:第10章反古德哈特定律检查的可运行对应物

Book2/examples/budget-keeper/specs/budget network 5m.yaml:压缩预算练习的校准变体

总结:模型路由与令牌预算将静态限额转变为可控回路:SDD阶段 → 模型层级化 → SLA阈值 → 故障分级切换 → 反古德哈特定律验证。廉价local-coder处理常规任务,昂贵frontier-reviewer保护争议和关键案例。廉价层级故障时的核心规则:不自动将全部队列放入昂贵层级。可运行示例(compile、simulate、inspect)允许在15和45分钟场景中验证此规则,将结果记录于budget-note.md并关联毕业项目。成功标准:四项inspect条件同时满足,token_health_min高于阈值,守护警卫准备投产,反古德哈特定律网关阻止指标扭曲。

我的笔记
0 / 10000

笔记保存在当前浏览器中。在其他设备上将不会显示。

课程菜单

课程

Production SDD for Qwen Code CLI. Part 2
进度 0 / 100