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 元信息(否则等于自问自答);
- 下一步选一个语义判据的真实场景(如「下一批该推进哪几项待办」)再验一次。
① 搜索路由 —— 已执行,未过门槛
测试集修复过程(这一步本身就是主要产出)
第一版口径(用户请求 → 该轮首个检索工具)不成立,实测发现三类污染:
- 大量请求根本不是检索意图 —— 例如
'写入wiki并飞书入库'、'[System note: interrupted]'、'[Your active task list was preserved...]',却被配上了一个工具当"路由结果"; browser_navigate被误标为"动态/反爬层" —— 实际多是「打开这个 GitHub 仓库看看」,本就属公网;- 长度 <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 矩阵的加载路径,不影子。
下一步(若要继续)
- 把问题从 7 层 choice 改成二值门控:「这条请求需要公网检索吗?」——命中其 88.9% 的强项;
- 记忆召回层继续由主模型判断(Jev 在此层无优势);
- 重跑门槛同样是 ≥80%,且高危漏判必须为 0。
③ 工具调用选择 —— 不单独立项
按评估结论并入 ①:不在热路径选工具,而在路由层选能力族。 理由(架构性,无需新实验):加一跳却不省主模型调用;换 toolset 破坏 prompt 缓存不变量;误判代价不对称。
验证方案(本次沉淀,后续接入复用)
三层验证门
- 样本有效性门(本次最大的教训):先证明「这批样本确实在考我们要考的那个决策」。 不合格样本(非检索意图 / 被误标 / 过短碎片)必须剔除,否则度量的是噪音。
- 口径正确性门:ground truth 与模型输出的键必须先归一化(本次踩坑:
1-memory-recallvs1-session-memory-recall导致第 1 层永远算不一致,把 51.9% 错报成 26.9%)。 - 覆盖率门:未应答样本必须排除出准确率分母并单独报告(本次踩坑:40 条 503 未答被 当成不一致,把 71.1% 错报成 44.6%)。网关 429/503 实测存在,必须有重试 + 覆盖率披露。
四项必备检查
- 区分度:分值极差是否足够(本次 ② 极差 0.75 ✅)
- 确定性基线对照:若判据能用简单启发式重算,报告 Spearman ρ;ρ 过高说明模型没加分
- 置信度分层:低置信组一致率 vs 高置信组(本次 50% vs 75%,证明可做三分法门控)
- 高危漏判:安全关键方向上的错判必须单列并要求为 0
通用纪律
- 动作可逆性内建(② 的自检里有「原候选对象未被改动」断言)
- 降级必须返回可用结果 + 显式
degraded标记(绝不半途生效) - 分档由我们定(quantile),模型只提供排序
Evidence Card
- Command / Check:
python3 ~/.hermes/scripts/jev_prescreen_rank.py --self-testpython3 ~/.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.py、search_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-27、hindsight-version-governance-closeout-2026-07-27、hindsight-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(限定) | 仅用二值门控的「是」分支做提示;不确定带转主模型;「否」分支不得硬拦截 |
| ③ 工具调用选择 | 不单独立项 | 并入 ① |
仍未做:两者均未接入任何运行态、未改配置、未动核心仓。① 未替换矩阵加载路径。