source: claude · 方法论见 《AI 工具箱 evals 计划》 · 前篇 《AI 工具箱 evals 基线报告》 · 复测日期 2026-09-30,结论可能随产品与模型迭代过期
一、一句话
基线评测抓到反馈工具 4 例输出契约违例;逐例归因后发现只有 2 例是产品真缺陷,1 例是契约本身设计过严,1 例是检查器级联误报——三类问题三种修法,全部修完后复测 66 例,三工具结构检查全部 100%。
二、归因:4 例失败 ≠ 4 个产品缺陷
| 案例 | 现象 | 归因 | 处置 |
|---|---|---|---|
| fb-003 | JSON 键名丢失前引号,解析失败 | 真缺陷:LLM 无执行保证,prompt 铁律写明了仍偶发违反 | 服务端机械校验 + 带具体违例重试 |
| fb-011 | 同一条反馈计入两个主题(count 和 9≠8) | 真缺陷:同上,数量守恒被破坏 | 同上 |
| fb-015 | 6 条完全相同的反馈只聚出 1 个主题(契约要求 ≥3) | 契约过严:退化输入下 1 个主题才是诚实答案,强凑 3 个是逼模型造假 | 契约放松为 1-12 |
| fb-007 | 30 条多元反馈聚成 9 类(契约上限 8) | 契约过严 + 检查器级联:9 类本是好分析;其余三项"违例"是越界分支清空主题后,下游检查在空列表上判出的误报 | 契约放松 + 检查器去级联 |
方法论沉淀:评测红了不等于产品错了。失败样本先打开原始输入/输出人工归因,再决定修产品、修契约还是修测量器——三者的成本和正确修法完全不同。
三、修复内容(三件套)
- prompt v1.1:新增"输出前自查"清单(JSON 语法/枚举合法/逐条数 count/逐条核对引用);反双计铁律;引用禁带 F01: 编号前缀;聚类粒度指引(按任务/问题聚类)。
- 服务端契约校验 + 一次重试(
contracts.ts):完整输出缓冲后做机械验收(JSON 可解析、count 守恒、quotes 逐字、枚举合法),违例时把具体违例编号发回模型重试一次;重试仍违例则返回首次输出。演示模式(mock)不参与校验。 - 契约放松 1-12 + 检查器去级联:insights schema / prompt / evals 结构检查器三处同步;越界时下游检查改在真实主题上继续判定。
复测当晚,服务端重试机制在两轮评测中共实测触发 6 次——不是纸面防御。
四、复测数字(66 例全量,2026-09-30)
结构检查通过率(反馈工具,检查器口径已修正)
| 检查项 | 基线 | 复测 |
|---|---|---|
| json_valid | 95.5% | 100% |
| count_sum_consistent | 85.7% | 100% |
| quotes_verbatim | 90.5% | 100% |
| sentiment_valid | 90.5% | 100% |
| themes_in_range | 90.5% | 100% |
口径声明:基线数字包含级联误报与 3-8 过严契约的影响,复测在 1-12 契约与修正口径下进行——方向对比有效,绝对值不可直接当"产品提升 10 个点"解读。三工具 66 例(竞品/反馈/PRD)全部结构检查 100%,judge 四维均分两升两平(噪音范围内,judge 分数仅作回归参考)。
成本
- judge(deepseek-flash,温度 0):prompt 140,825 + completion 25,970 token ≈ 2-3 元
- 全程约 15 分钟,66/66 ok 无错误
五、残留与下一步
- 大批量 count 纪律:22 例试点中 fb-007(30 条输入)重试一次仍未救回,全量复测中同类场景已通过——保留观察,不做专项优化。
- judge 分数仍不跨工具可比:rubric 锚点工具错位与"judge 看不到输入"两项 v2 改进未动(改 judge 会破坏基线可比性,需与产品迭代同步规划)。
- 基线已重钉至 run 20260930-005223;前篇基线报告保留为 2026-09-29 历史快照(其结论有效期声明已覆盖)。