2026-09-21 · DECISION TRACE

Jev 三项候选执行结果与验证报告

保留方案、指标、验证、复盘和治理判断,让结论能够追溯。

2026-09-21记录日期
验证记录类型
26章节数

Jev 三项候选执行结果与验证报告

  • HTML: https://decision.ht1072.top/2026-09-21-jev-execution-and-verification-2026-09-21.html
  • Local HTML: [已移除本地路径]
  • Generated: 2026-09-21T16:58:47+08:00

Jev 三项候选:执行结果与验证报告

2026-09-21|执行人:小墨 范围:② 可逆粗筛(已执行)|① 搜索路由离线对照(已执行)|③ 工具调用选择(按评估并入 ①,不单独立项) 判据:动作可逆 + 判据可核对 + 问法是判别式

结论速览

判定 关键数字
② 可逆粗筛 GO(语义判据场景已验证) 语义版 vs 确定性基线 ρ=−0.268(数字版 ρ=0.867,两版 top9 重叠 0/9)
① 搜索路由 改二值门控后 GO(仅"是"分支) 自信子集 86.8% ✅;不确定带 25% 转主模型
③ 工具调用选择 不单独立项(并入 ①)

② 高影响动作前可逆粗筛 —— 已执行

交付物

~/.hermes/scripts/jev_prescreen_rank.py - 输入候选池 → Jev(records 绑定形态,符合本轮实测纪律)打分 → 按分位分档(P0/P1/P2) - 只排序,绝不修改候选(可逆性内建,自检里有专项断言) - 降级:Jev 不可用 → 返回原序 + unranked 标记,调用方照常 - 自检 13/13 通过(排序/分档/降级/缺答保守/可逆性)

真实池试点:wiki 治理积压 36 条

数据源:~/llm-wikis/_meta/wiki-governance-check-report.md(32 个高入链陈旧页 + 4 个孤立页)

指标 实测
调用 1 请求(36 条一次打包)
成本 / 耗时 $0.000494 / 1545ms
分档 P0=9 / P1=9 / P2=18
分值极差 0.75(有真实区分度,未退化)

⚠️ 验证发现的一个真问题:信息泄漏 / 判据可被确定性重算

我用 deterministically 可算的 (inbound 降序 → age 降序) 做基线对照:

  • Spearman ρ = 0.877 —— 高度重合
  • Jev top9 与基线 top9 重叠 6/9

原因:我在候选文本里塞了「入链 7、更新日期、已 139 天」这些数字元信息, 于是 Jev 很大程度上只是在复述我已经喂给它的启发式

结论修正:② 的价值有条件 ——

只有当「优先级判据是语义的、不能写成简单启发式」时,Jev 才真正加分 (例:「这批候选里哪些和我们正在做的事最相关」); 如果判据就是「按入链数/按时间排序」,不该用 Jev,直接排序更快更稳

试点里确实也出现了语义性偏离(例:hermes-official-docs-mirror 入链 5 但较新,Jev 把它压到第 28 位; mixture-of-agents 同理),说明它不只在复述数字 —— 但增益幅度有限。

建议

  • ② 保持 GO,但限定在语义判据场景使用;
  • 候选文本里不要塞 numeric 元信息(否则等于自问自答);
  • 下一步选一个语义判据的真实场景(如「下一批该推进哪几项待办」)再验一次。

① 搜索路由 —— 已执行,未过门槛

测试集修复过程(这一步本身就是主要产出)

第一版口径(用户请求 → 该轮首个检索工具)不成立,实测发现三类污染:

  1. 大量请求根本不是检索意图 —— 例如 '写入wiki并飞书入库''[System note: interrupted]''[Your active task list was preserved...]',却被配上了一个工具当"路由结果";
  2. browser_navigate 被误标为"动态/反爬层" —— 实际多是「打开这个 GitHub 仓库看看」,本就属公网;
  3. 长度 <20 字符的碎片样本 19/160,不构成可判定的检索意图。

改用严格口径(请求须命中检索意图词 + 只保留真正的检索工具)后得 121 条有效样本 (63 公网 / 58 记忆召回)—— 这才是可判的路由决策。

结果

指标 实测 门槛
整体首跳一致率 86/121 = 71.1% ≥80% ❌
公网层(3) 56/63 = 88.9% — ✅
记忆召回层(1) 30/58 = 51.7% — ❌
高危漏判(公网需求被判成本地/兜底) 1 条 要求 0 ❌
低置信占比 20/121 = 16.5%
低置信组一致率 / 高置信组 50% / 75% 置信度有信号 ✅
成本 / 耗时 $0.00214 / 17.8s(含一次 503 重试)

Jev 选择分布:公网 74、记忆召回 36、本地 10、平台 1 → 明显过度倾向公网

判定与可用边界

① 不整体放行。但分层结论是可用的:

  • 可以做「这是不是一个公网检索需求」的高召回门控(召回 88.9%,且低置信 16.5% 可走三分法转主模型);
  • 不能做「记忆召回 vs 公网」的互斥路由(51.7%,会把记忆类需求误判成公网);
  • ❌ 未达标前不替换 42KB 矩阵的加载路径,不影子。

下一步(若要继续)

  1. 把问题从 7 层 choice 改成二值门控:「这条请求需要公网检索吗?」——命中其 88.9% 的强项;
  2. 记忆召回层继续由主模型判断(Jev 在此层无优势);
  3. 重跑门槛同样是 ≥80%,且高危漏判必须为 0。

③ 工具调用选择 —— 不单独立项

按评估结论并入 ①:不在热路径选工具,而在路由层选能力族。 理由(架构性,无需新实验):加一跳却不省主模型调用;换 toolset 破坏 prompt 缓存不变量;误判代价不对称。


验证方案(本次沉淀,后续接入复用)

三层验证门

  1. 样本有效性门(本次最大的教训):先证明「这批样本确实在考我们要考的那个决策」。 不合格样本(非检索意图 / 被误标 / 过短碎片)必须剔除,否则度量的是噪音。
  2. 口径正确性门:ground truth 与模型输出的键必须先归一化(本次踩坑:1-memory-recall vs 1-session-memory-recall 导致第 1 层永远算不一致,把 51.9% 错报成 26.9%)。
  3. 覆盖率门未应答样本必须排除出准确率分母并单独报告(本次踩坑:40 条 503 未答被 当成不一致,把 71.1% 错报成 44.6%)。网关 429/503 实测存在,必须有重试 + 覆盖率披露。

四项必备检查

  • 区分度:分值极差是否足够(本次 ② 极差 0.75 ✅)
  • 确定性基线对照:若判据能用简单启发式重算,报告 Spearman ρ;ρ 过高说明模型没加分
  • 置信度分层:低置信组一致率 vs 高置信组(本次 50% vs 75%,证明可做三分法门控)
  • 高危漏判:安全关键方向上的错判必须单列并要求为 0

通用纪律

  • 动作可逆性内建(② 的自检里有「原候选对象未被改动」断言)
  • 降级必须返回可用结果 + 显式 degraded 标记(绝不半途生效)
  • 分档由我们定(quantile),模型只提供排序

Evidence Card

  • Command / Checkpython3 ~/.hermes/scripts/jev_prescreen_rank.py --self-test python3 ~/.hermes/scripts/jev_prescreen_rank.py --in /tmp/wiki_governance_pool.json --real 离线路由对照:121 条严格样本 → decide_batch_records
  • Exit Status:0(自检 13/13)
  • Covered:② 工具建成 + 真实池跑通 + 确定性基线对照;① 两轮测试集修复 + 121 条有效样本对照 + 置信度分层 + 高危漏判检查
  • Not Covered:② 未在语义判据场景验证;① 未重设计为二值门控;两者均未接入任何运行态;未做长期校准曲线
  • Residual Risk:② 存在判据可被确定性重算的泄漏风险;① 记忆召回层结论仅来自 58 条样本;网关 429/503 会污染批量结果(需覆盖率披露纪律)
  • Confidence:② 中高(机制与区分度已验证,价值边界已划清);① 高(未过门槛这一结论稳健;分层结论方向明确)

明确未做(不得夸大)

  • 未替换 search-routing-matrix 的加载路径
  • 未接入任何 cron / 生产链路
  • 未改动 search_router.pysearch_worker、LCM 或任何核心仓文件

第三轮验证(补充执行)

① 改为二值门控后 —— GO(限定用法)

把问题从 7 层 choice 改成二值:「这个请求必须走公网吗?」(本地/记忆能拿到就判否)。 121 条有效样本,全部应答,$0.00099,4.4s。

阈值扫描(正类=需公网;高危方向=漏判/假阴性)

阈值 准确率 召回 假阴性 精确率
0.3 76.9% 96.8% 2 70.1%
0.4 80.2% 95.2% 3 74.1%
0.5 80.2% 88.9% 7 76.7%
0.6 76.0% 74.6% 16 78.3%
0.7 76.0% 61.9% 24 88.6%

没有任何阈值能做到「假阴性=0」。但按三分法切置信带后:

置信带 条数 准确率
高自信「需公网」(p≥0.65) 54 81.5%
不确定带 (0.35–0.65) 30(24.8%) 转主模型
高自信「不需公网」(p<0.35) 37 94.6%
自信子集合计 91(75%) 86.8% ✅ 过 80% 门槛

自信子集里漏判仅 2 条(prob 0.27/0.28,样本本身模糊)。

安全的用法(关键设计结论)

只允许用「是」分支做提前提示;绝不用「否」分支做硬拦截。

理由:这个方向的错判(该公网却判否)会造成信息漏检。若只把「是」当提示、把「否」仍交主模型决定, 漏判的后果退化为「少给一个提示」,不产生信息损失。 此时它是一个低风险的加速/提示层,而不是门控替换 —— 与「不用它做唯一门控」的纪律一致。

② 语义判据场景 —— GO 已验证(并证明"泄漏版"确实在复述)

同一批 36 条池,把候选文本从「数字元信息(入链/天数)」换成「页面内容摘要」, 目标也换成纯语义判据:「哪些页面的陈旧内容会实际误导当前决策——与已验证结论矛盾、 或方案已被后续实测推翻(单纯久未更新不算)」。

决定性对照

版本 与确定性基线 (inbound, age) 的 ρ
数字元信息版 0.867(高度重合 —— 在复述喂进去的启发式)
语义内容版 −0.268(几乎无关 —— 完全不同的判断轴)

top9 重叠:数字版 ∩ 确定性 = 6/9;语义版 ∩ 确定性 = 2/9;数字版 ∩ 语义版 = 0/9

判据合理性(人工抽查)

  • P0 命中 hindsight-085-clone-upgrade-verify-2026-07-27hindsight-version-governance-closeout-2026-07-27hindsight-upstream-0.8.5-eval-and-target-reset-2026-07-27 —— 都是 7 月版本文档, 而本机 Hindsight 已升到 0.9.x,内容确实已被后续版本取代,会误导检索。判定合理。
  • P2 尾部是 task-progress-tracking / design-task-intake-template 这类流程文档 —— 久未更新但不会"误导决策",正确降级

附带确认

  • 分值尺度:数字版 1.19–1.94,语义版 0.18–0.97 —— 同一模型、不同问法,量表完全不同, 再次印证「量表是任意的,不能跨 prompt 比较,必须用分位而非绝对阈值」。

更新后的判定

判定 放行条件
② 可逆粗筛 GO 仅用于语义判据场景;候选文本不得含可确定性重算的数字
① 搜索路由 GO(限定) 仅用二值门控的「是」分支做提示;不确定带转主模型;「否」分支不得硬拦截
③ 工具调用选择 不单独立项 并入 ①

仍未做:两者均未接入任何运行态、未改配置、未动核心仓。① 未替换矩阵加载路径。