面试知识库

M12.1 · 执法契约重构——从阶段禁令到预算制#

简历 Bullet Point: 一次线上「换品类被误判成复用」的 27 轮死循环事故,暴露效率闸/安全闸执法权错配;四段重构——热修逃生门→liveness 看门狗→逃生规则通用化→检索预算制替代阶段白名单禁令,阶段状态机从执法者降级为遥测+提示,死锁场景评测 76.7→100


开场钩子#

用户上轮搜冲锋衣,这轮说「换个方向,要衬衫式上衣」。planner 把换品类误判成 retrieval=reuse(在旧候选上收紧条件),阶段机直跳 COMPARING、把 item_search 锁死。旧候选全是冲锋衣被 exclude 全排除,两条回退腿都以「精挑过」为前置而模型拒绝精挑空池——27 轮、76 秒,每个组件都在按自己的规则正确运行,组合起来是死锁。


一、模块运作流程#

1.1 闸的两种执法权#

复盘时最关键的一步是给闸分类——两类闸的判定依据和误判后果完全不同:

判定依据判错后果应有执法方式
安全闸(fork 深度/检索总量/token 预算/终结硬停)精确事实(计数器、标志位)不会判错——耗尽就是耗尽永远硬拒
效率闸(阶段表/postfork 直搜/websearch 动机)上游推定(planner 意图)把模型唯一正确的路堵死必须 fail open

阶段状态机守的是效率,依据的是 planner 的意图判定——而上游判定是假设不是承诺。它却拿着「无限次硬拒」的安全闸执法权。

1.2 四段弧线#

第一段·热修:给错墙开门。 按 (阶段, 工具) 计拒绝次数,同一堵墙连拒 2 次后第 3 次放行。检索类放行时同步做配套回退(退 SEARCHING、reuse→augment、解锁 postfork 闸)。核心洞察:模型对同一堵墙的反复坚持,本身就是「墙立错了」的强信号

第二段·看门狗:兜住一切停滞。 liveness 看门狗以「工具真实执行成功」为唯一进展口径(被拦、回放都不算),停滞 45s 注入收敛指令、再宽限 30s 硬停交部分结果。从此任何死锁都有天花板。

第三段·逃生通用化:效率闸统一带门。 逃生门上提到 Hook Pipeline 统一实现:效率闸声明 escape_key 即接入。闩锁语义——赢过一次后同 key 直接放行,不再每次攒 2 轮拒绝烧延迟。

第四段·预算制:把墙拆了。 逃生门本质还是「给错墙打补丁」——模型要白挨 2 次拒绝才走上正路。正确形态是不设禁令、设小预算:复用轮检索预算收紧到 1(max(1, ...) 钉死永不为 0),预算内第一次补搜当场放行执行。阶段白名单禁令整个删除。

1.3 阶段机降级后的三个角色#

阶段状态机不再执法,保留三个角色:

  1. 遥测:trace 里看走到哪一步
  2. 提示的依据:「检索收线」等指路文案
  3. 少数安全底线的判据:候选池空或本轮没规划/精挑过不许交卷——这是事实判定,不是白名单

二、踩坑与设计决策#

放行一道闸 ≠ 放行一条路#

热修最早只让阶段闸放行,同一次调用又撞死在下一道 postfork 闸。链路上的闸是串联的,逃生必须连带做配套回退——开门要开一整条走廊。

通告文案要跟机制同步改#

拆墙后「会被机制拒绝」的旧话术变成假话。对模型撒谎会反噬(它会拿真实行为校准你说的话),所有哨兵/通告按新语义重写。

回退腿不能以「模型配合」为前置#

refine_backfill 曾要求 picker_attempted 才点火,而模型拒绝精挑空池。机制的逃生路径必须是确定性的,不依赖模型愿不愿意先走一步冤枉路。

为什么是预算而不是更聪明的门#

三个候选都考虑过:① 让 planner 判得更准——准确率到不了 100%,禁令制下 1% 误判 = 100% 死锁;② 逃生门——能解死锁但白挨 2 轮拒绝,是急救包不是终态;③ 小预算——判对时备而不用,判错时第一次补搜直接执行零轮浪费。预算制让误判代价从「死锁」降到「多花一次检索」


三、面试问答#

Q1: 为什么不直接删掉状态机?#

遥测和提示仍需要「走到哪一步」的概念。删掉的是执法权,不是观测价值。收尾资格底线也还要用它判「本轮规划过没有」。

Q2: 小预算被恶意烧完怎么办?#

复用轮硬挡后模型只剩精挑/收尾两条路。若精挑证明池子真不够,refine_backfill 主动授权补搜——「要更多预算」的裁量权在确定性代码手里,不在模型手里。

Q3: 这套分类怎么推广到新闸?#

立一道新闸先问:判定依据是事实还是推定?推定→要么带逃生门、要么改成预算;事实→可以硬,但必须有看门狗这类全局兜底,因为组合死锁不挑单个组件的对错。

Q4: 四段为什么不直接跳到预算制?#

事故 on-call 时先用最小风险的方案止血(热修),再加全局兜底(看门狗),再推广逃生能力(通用化),最后才有足够信心把墙彻底拆掉。每一段都是下一段的信心基础。


四、诚实边界#

维度做了没做
效率闸/安全闸分类全量闸重新归类 + 效率闸统一带门形式化的闸分类 DSL
预算制复用轮小预算 + 永不为 0 不变量动态预算(按 query 复杂度调)
看门狗停滞检测 + 强制收敛 + 硬停交部分结果基于 token 速率的进展检测
验收死锁回归 q19 76.7→100大规模 A/B 测试