benchmark_v1.md 12.9 KB

裁剪决策规则集质量评分基准 v1 — workgraph-planning-methodology-trial

生成者:innovator-digest(Phase 2 Digest) 输入:../hunt/knowhow_v1.md(336行)+ ../hunt/sources.json + complexity_signals_v1.md 日期:2026-08-23 首次训练(v1)


〇、这套 benchmark 评的是什么,与 prd/sdd 两次训练的关键差异

评分对象不是一份具体产出物(PRD/SDD/规划记录),而是"一套裁剪决策规则集"本身—— 下一阶段 Evolver 要产出的是一份决策表/决策树:给定一个 task-goal,能确定性地判断 planner.json 五个节点(brd/prd/sdd/benchmark/validator)里哪个该裁、哪个该留、 裁了之后下游 needs 怎么改。本文档定义怎么给"这份决策表/决策树"打分,不是给某一次 具体的规划记录打分。

这个差异带来一个关键约束,prd/sdd 两次训练不需要面对:评分对象在真实世界里 0 正样本(knowhow_v1.md 块C总体发现 #1:"全公司当前可查到的5份work graph规划记录 ……裁剪发生次数为0")。所以本 benchmark 不能像 sdd-planning/benchmark_v1.md 那样拿 "真实规则被下游打回"的案例做核心锚点——没有这样的案例。改为:benchmark 本身的判据 必须能脱离"是否命中过真实裁剪案例"这件事而独立成立,靠仓库硬约束(五项校验+数据契约 级联)+ 外部方法论(Cynefin/T-shirt/INVEST-SPIDR/YAGNI)+ Hunt 发现的隐藏规则自行推导, calibration_cases.md 用假想候选规则集来验证这套判据是否真的有区分度,替代"真实反面 案例自检"这一步。


一、维度设计(5 维度 + 权重,满分 100)

维度 名称 判据来源 权重
D1 信号可读性 complexity_signals_v1.md〇 门槛 + Hunt 汇总"根因" 15
D2 确定性/可复现性(核心锚点) 任务书要求 + knowhow B1"图的规划质量没有硬校验"原文 30
D3 约束合规性 complexity_signals_v1.md 二 + knowhow B2 needs 级联推导 20
D4 覆盖完整性 任务书要求,对照 C4"只讲BRD就交差"的失效模式 20
D5 矫枉过正平衡 knowhow §A4 YAGNI 张力 + 块B 五项校验"不因任务简单而放松" 15

D2 单项权重 30,全场最高,且带否决/封顶双重机制——理由:agent.md Step4 现状(见 industry_avg_score.md 真实基线)恰恰是"裁剪授权写得清楚,但完全没有机械可复现的输出 映射",如果 D2 只是普通加权项,一份文字漂亮、逐节点都有话说、但换个 LLM 跑一遍就换一张图 的规则集,会被 A 组高分稀释成体面总分,重演 prd-methodology-trial(76.4分教训)与 sdd-planning(68分教训)训练时踩过的同一个坑。


二、逐维度评分标准

D1 信号可读性(权重15)

判据锚点:complexity_signals_v1.md〇"每个信号必须满足的硬性门槛"——规则集里每条触发 条件必须能直接从 task-goal 原文机械核对,不能是"任务简单/复杂"这类同义反复。

分数 判据
5 每条规则的触发条件都指向具体可从文本判定的信号(如复用 S1-S5 或同等清晰度的自定义信号,且给出判定方法),无任何"简单/复杂"类形容词单独作为判据
4 基本满足,但存在 1 处触发条件依赖上下文推断、未显式给出判定方法的模糊表述
3 存在触发条件用"任务复杂/简单"类词,但该规则同时搭配了至少 1 个可读信号,不是唯一依据
2 多条规则以"任务是否简单"作为唯一或主要判据,缺乏可操作的文本判定方法
1 规则集通篇只有"任务简单就裁、复杂就不裁"这类同义反复,或干脆没有给出任何判定方法(只给权限和例句、不给判据),没有任何可从文本机械核对的触发条件

否决规则:若规则集全部触发条件都落在 1 分档描述的范畴(无一条可机械核对)→ D1 判 1 分,且触发总分强制封顶 15(见三、3.2)。这条规则不是额外惩罚,是任务书明确要求 的校验点:"只会说'任务简单就裁剪'这种同义反复规则的候选应该在'信号可读性'维度被打到 很低分/触发否决"。

D2 确定性/可复现性(权重30,核心锚点)

判据锚点:同一个 task-goal,两次独立跑这套规则集,应该给出同一张图(相同节点集合+相同 的 needs/produces 调整)。这是当前 agent.md"综合 Step1/2/3 三份输入"纯 LLM 直觉判断 的已知缺陷(knowhow B1 引用原文:"图的规划质量没有硬校验,五项只保证图结构合法,保证不了 它适合这个任务……完全依赖 LLM 单次判断")。

判定方法:检查规则集是否把每个信号取值组合映射到唯一确定的输出(节点集合+needs调整 方案),而不是留"视情况而定/建议/可以考虑/综合判断"这类空间给临场发挥。

分数 判据
5 关键信号组合都有唯一确定的输出(节点集合+needs调整方案),不存在"具体看情况"的留白;对同一 task-goal 重复应用规则会得到逐字相同的图
4 ≥90% 的常见信号组合有确定输出,剩余组合虽有留白但对最终图形状影响很小(仅影响节点内部描述用词,不影响节点是否保留)
3 存在明确的信号组合缺输出映射(规则集自己承认"这种情况需要人工判断"),但已列出的映射部分是确定的
2 多数信号组合的输出依赖"综合判断/酌情处理"这类模糊指令,重复应用同一任务大概率给出不同的图
1 规则集本质上只是把"靠LLM直觉判断"换了个说法(如"根据任务感觉决定裁不裁"),或干脆没有给出任何信号到输出的映射,只有权限声明和单一例句

判据来源:C4 是这条维度要重点防范的失效模式的真实证据——规划记录给出的理由是 "brd/prd/sdd 描述 why/how/what,完全对应骨架语义"(complexity_signals_v1.md S4 校准 段引用),也就是说真实世界里唯一一次可比样本给出的"判断依据"是骨架字面结构匹配,不是 任何可复现的信号评估。一套好的规则集必须能明确说出"如果换成 S4=是 的任务会怎样",而不是 只会重复骨架自带的字面语义。

D3 约束合规性(权重20)

判据锚点:complexity_signals_v1.md 二·硬约束——裁剪任何一个有 produces 的节点前, 必须检查图内是否有其他节点的 needs 依赖它的产出 kind,否则触发 rule=data-contract 被引擎拒绝(knowhow B2 逐条核实"砍掉 brd 会发生什么",全文摘录)。

分数 判据
5 每条裁剪结论都显式给出"若裁掉此节点,下游哪些边的 needs 需要如何调整"的具体方案(改成 required:false 或从 needs 列表移除该 kind),且不会破坏五项校验中任一项
4 多数裁剪结论给出了 needs 调整方案,1 处遗漏但影响范围小(该 kind 本身没有其他消费方)
3 至少 1 条裁剪结论完全没有考虑下游 needs 依赖,留给执行者自己发现(等同制造一次真实的 data-contract 拒绝)
2 规则集系统性忽视 needs 级联检查,多条裁剪结论会直接触发引擎拒绝
1 规则集甚至没有意识到需要检查五项校验/数据契约,纯粹讨论"要不要这个节点"而不管图结构合法性

判据来源:这是 Hunt 调研本身推导出的隐藏规则(不是仓库文档里现成写好的检查表)—— README.md 数据契约规则写了"needs 的每个 kind 在图里都有产出方,否则整张图被拒", 但 agent.md Step4 的裁剪授权段没有提及这条检查,knowhow_v1.md 文末把它列为 "建议补进 agent.md" 的第一条改进项,是本次训练判据体系里唯一一处"仓库现状本身也有 缺口"的维度,正因如此才把它设计成独立可评分的维度,而不是假设规则集自然会覆盖它。

D4 覆盖完整性(权重20)

判据锚点:任务书原文点名的失效模式——"不能只讲 BRD 一个节点就交差",planner.json 五节点(brd/prd/sdd/benchmark/validator)必须每个都有明确规则。

分数 判据
5 五个节点均有清晰规则(哪怕结论是"validator/prd 地基级不可裁,理由是XX"),无遗漏
4 四个节点有明确规则,1 个节点未提及但从上下文可合理外推(如通篇讨论其余四个,隐含 validator 照旧保留)
3 只覆盖 2-3 个节点,其余未提及
2 只覆盖 1 个节点(通常是 BRD,重犯 agent.md Step4 例句"只讲BRD"的问题)
1 完全没有区分节点,笼统一句"按需裁剪"了事

判据来源:agent.md Step4 唯一给出的裁剪例句就是"不需要 BRD,直接从 PRD 起步" (knowhow B1 引用),如果规则集原样照搬这条例句、不主动扩展到其余四个节点,就是重犯了 现状本身的局限,这条维度存在的目的就是防止训练出来的规则集只是把 agent.md 现有例句 换个措辞重复一遍。

D5 矫枉过正平衡(权重15)

判据锚点:knowhow §A4(YAGNI 与架构规划的张力:"你不能靠以后加楼层来盖摩天大楼")+ 块B 关键约束("五项校验从不因任务简单而放松,裁剪只发生在节点数量/骨架选型上")。

分数 判据
5 规则集同时存在明确的"保留"分支和"裁剪"分支(不是只会说"都可以裁"),且显式声明哪些约束不受任务复杂度影响(如"PRD 永不裁剪,理由是它是 benchmark→validator 边 needs 的直接依赖"、"五项校验与信号无关")
4 有保留分支,但未显式声明地基级约束"不受信号影响"这一条,需要读者自行推断
3 规则集能保留部分节点,但保留的理由含糊(如"看着还是需要"而非信号驱动)
2 规则集事实上只会输出"裁"这一种结论方向,不管信号如何组合
1 规则集鼓励无差别裁剪,甚至建议在任务简单时放松五项校验/数据契约这类地基级约束

判据来源:这条维度直接对应任务书要求——"规则不能只会裁不会保留,要能通过 YAGNI 张力检验:地基级约束不因任务简单而放松"。knowhow §A4 明确指出 YAGNI 的矫枉过正风险是 "适用于功能与抽象层,不适用于地基级的架构决策",planner.json 的 prd 节点(是 benchmark→validator 边 needs 链的直接依赖)与五项校验属于这一类地基级对象。


三、总分计算方法

3.1 加权和

加权和 = Σ(维度得分/5 × 维度权重)   (满分 100)

3.2 否决与封顶规则

若 D1 = 1 且触发"全部条件都是同义反复/无判定方法"的否决条件 → 总分强制封顶 15
若 D3 ≤ 2 → 总分上限 40(规则集会被引擎直接拒绝,比"每次跑出不同图"更致命——
                          不可复现好歹图能落地,不合规是直接被 rule=data-contract 拒收)
若 D2 ≤ 2 → 总分上限 45
若 D2 = 3 → 总分上限 65
若 D2 ≥ 4 → D2 不封顶(除非其他维度触发了各自的封顶)

最终得分 = min(加权和, 各已触发的上限)

为什么 D3 的封顶线比 D2 更严格:D2 低分意味着"规则不稳定,重复跑会给出不同的图"—— 这是质量问题,但图仍然是合法的、能落地跑的;D3 低分意味着"规则给出的裁剪结论本身违反 数据契约,引擎会直接拒收"——这是可用性问题,图根本跑不起来。二者都不该被 A 组高分稀释, 但 D3 的失败后果更硬性,封顶线设得更低(40

3.3 判定等级

分数区间 等级 处置建议
≥80 优秀 可作为 Evolver 训练的正样本模板
65-79 合格 可进入 Evolver 训练,标记薄弱维度供关注
50-64 待改进 不建议进入 Evolver 训练,需重写薄弱维度后重新评分
不合格 判定为"未构成可执行判据",需要重写核心维度

及格线(passing_score)= 65(合格档下限),见 industry_avg_score.md。


四、对任务书五条要求的逐条落点确认

任务书要求 落地维度
①信号可读性(能否直接从task-goal文本判定,不能是同义反复) D1,含否决规则
②确定性/可复现性(同一task-goal两次跑规则应给出同一张图) D2,核心锚点+封顶
③约束合规性(裁剪后的图是否仍能通过五项校验+数据契约级联检查) D3,封顶
④覆盖完整性(planner.json五个节点是否每个都有明确的裁剪/保留规则) D4
⑤矫枉过正平衡(规则不能只会裁不会保留,通过YAGNI张力检验) D5

五条要求全部有独立维度落点,没有合并、没有遗漏。