Skip to content
预计 1 分钟右侧目录可快速定位

如何定位质量退化:Planner、Context 与 Regression Evaluation ​

前置:如何评估模型决策轨迹:Model-as-Judge、Trajectory 与 Tool Selection
核心问题:版本回归出现后,怎样区分是 Planner 结构退化、Context 选择退化还是模型随机波动?

三种 Eval 分别回答不同问题 ​

text
Planner Eval   → 模型提出的计划是否合理、可执行?
Context Eval   → 给模型的输入是否足够且值得占 token?
Regression Eval→ 某次版本变化是否让整体/特定 failure bucket 退化?

如果三者混成一个“最终成功率”,即使发现质量下降,也很难知道应该改 Planner、Context policy 还是最近的一次版本变更。

Planner Evaluation:检查结构性质,不检查逐字相同 ​

Planner Eval 可以检查:必要步骤是否覆盖、依赖是否正确、危险动作是否经过 approval、是否过度拆解、replan 是否由新事实触发。

例如正确依赖应为:

text
patch → test → deploy

模型却生成:

text
patch → test
patch → deploy

Graph validator 可以直接把它判为 plan failure,而不必真的执行 deploy。Scheduler 如果忠实执行了错误依赖,问题属于 Planning,不属于 Runtime。

Planner regression 也不应要求每次生成同一句计划。search → patch → test 变成 read_config || search → patch → test 可能是合理改进;应该比较 dependency、capability、completion criteria 等结构约束。

Context Evaluation:通过 Ablation 判断某类输入有没有贡献 ​

单纯看到 Context 从 40K 降到 20K 不代表优化成功。可以固定 Eval Set,分别移除或压缩:

text
retrieval evidence
history summary
tool descriptions
memory

再比较 task success、constraint loss、tool error、token 和 latency。若删掉旧 Tool logs 后成功率不变但 token 下降 30%,它们可能是可安全移除的信息;若删除某条 policy 后高风险 Tool 误调用增加,则该信息属于 protected context。

Regression Evaluation:锁定版本,观察整体和切片 ​

Regression Eval 使用固定 dataset + RunManifest 比较变更前后,例如:

text
prompt v12 → v13
model A → B
tool schema 4 → 5
context policy 7 → 8
runtime commit X → Y

除了总成功率,还应看 failure bucket,例如长 Context、需要审批、复杂 dependency、某类 Tool。总体均值不变也可能掩盖某个关键场景明显退化。

Ablation 用来证明某组件是否贡献价值;Regression 用来发现版本升级有没有破坏已有能力,两者不要混用。

Failure Mode:Planner 绕过 Compiler / Executor Contract ​

如果计划里出现什么就直接调用,没有 graph validation、Tool policy 或 execution record,那么 Planner Eval 和 Runtime Test 的边界会一起消失。

处理: Plan → GraphCompiler → Scheduler,Tool intent → ToolExecutor;Eval 检查计划,确定性测试检查程序是否执行 contract。

如何验证 ​

选择一个固定任务集,同时保存 plan、context snapshot 和 manifest。故意做三次独立变更:删一段关键 Context、破坏一条 dependency、升级模型。理想情况下三类报告分别把问题定位到 Context、Planner 和 Regression bucket,而不是都只显示“最终成功率下降”。

自测 ​

  1. 升级后 task success 下降。怎样用 planner-only、context-only 的 regression slice 区分到底是哪层退化?
  2. 如果同时更换 Prompt、Retriever、Model,再看一个总分,为什么几乎无法做归因?

Sources ​

AI Engineering · Agent · Harness · Backend Systems