2026-09-21 · DECISION TRACE

Jev 三项候选接入评估:搜索路由 / 可逆粗筛 / 工具调用选择

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

2026-09-21记录日期
评测记录记录类型
17章节数

Jev 三项候选接入评估:搜索路由 / 高影响动作前粗筛 / 工具调用选择

2026-09-21|评估人:小墨 判据沿用上一轮结论:动作可逆 + 判据可核对 + 问法是判别式(三条同时满足才接)

结论

候选 判定 一句话理由
① 搜索路由 GO(有条件) 把「主模型读 42KB 矩阵做首跳路由」换成一次 Jev choice;但升级链留给主模型
② 高影响动作前可逆粗筛 GO(优先做) 是已证模式(重要度影子 / retain 预筛)的扩展,动作可逆、批量、成本极低
③ 工具调用选择(热路径) NO-GO 加一跳却不省主模型调用;且换 toolset 会破坏 prompt 缓存不变量

③ 与 ① 本质是同一件事的不同粒度(选引擎 vs 选工具)。正确做法是合并成一层「能力路由层」,而不是在两处各接一次。


⚠️ 先更正一个事实(影响 ① 的前提)

上一份评估里我写「search_router.py 当前 137 行纯规则分发」——这是错的,来自未经核对的记忆。

实际读取 ~/.hermes/scripts/search_router.py(137 行)后确认:它里面没有任何路由规则。 它是一个 search-worker 调用器task_goal → prompt_builder → search_worker_wrapper → 归一化 packet → 中文摘要

真正的路由决策落在两处:

  1. ~/.hermes/skills/productivity/search-routing-matrix/SKILL.md41,877 字节,≈12k tokens)
  2. 调用它的 agent 自己的判断(--coverage 默认值里那句「轻量查找和已知 URL 抽取应由主 agent 直搜/直抽」就是策略文本,不是代码逻辑)

这个更正让 ① 的收益点变得更清楚也更可量化:不是「把规则换成模型」,而是 「省掉每次路由都要加载 42KB 矩阵 + 主模型推理」


① 搜索路由

现状成本

  • search-routing-matrix/SKILL.md = 41,877 字节(≈12k tokens), 且常与 search-full bundle(15 个 skill)一起加载。
  • 每次复杂检索都要「读矩阵 → 分层判断 → 选引擎」。

Jev 适配点(首跳路由)

把「给定查询 + 引擎清单 → 选哪一层/哪个引擎」做成一次 choice 判定: - 选项集是闭集且稳定(cycle: 当前会话 LCM / 跨会话 session_search / 本地 wiki / 本地文件 / 轻公网 web_search / 中文公网 baidu / 平台专项 / 动态反爬 scrapling+browser / 证据包 search_router), 完全落在 choice 原语的适用形态内。 - 动作可逆:选错了可以重搜(这正是可逆判定的要求)。 - 判据可核对:历史查询里「agent 实际选了哪条路、结果好不好」就是现成 ground truth。

明确的边界(否则会重犯剪枝那个错)

  • Jev 只做首跳,不做升级链。 「首搜没结果 → 升级到 scrapling」这类多跳/条件升级,Jev 官方自己标注多跳推理退化,必须留给主模型或规则
  • 不能让它成为「唯一门控」:路由错会浪费一次检索,但不是不可逆,所以风险可控 —— 这也正是它比剪枝适合的原因。
  • 需要离线对照(见验证计划),不能直接上线。

验证计划(先离线,零生产影响)

用历史会话里的真实检索请求当样本,让 Jev 判首跳,与 agent 实际选择 + 结果质量对照: 1. 抽 50–100 条历史检索请求(跨公网/平台/本地/wiki 各类); 2. Jev choice 判首跳 → 与「实际走了哪条 + 是否成功」对照; 3. 通过门槛:首跳一致率 ≥80%,且不存在「本该走证据包路线却被判成轻量直搜」这类高危漏判; 4. 达标才影子,再谈替换矩阵加载。


② 高影响动作前的可逆粗筛(建议优先做)

为什么优先

这一条不是新能力,而是已证模式的扩展: - 晨报重要度影子评分、retain 预筛、wiki 告警分诊 —— 三处都是「对候选池排序/分档,只标记不拦截」,已稳定运行。 - 动作可逆(过滤输入 / 排序,不裁剪产物)、批量(成本极低)、判据可事后核对。 - 三条判据全满足,且不引入新架构。

具体候选落点

落点 用法 动作性质
深度调研启动前 一批候选主题先排优先级,决定哪几个进全量调研 过滤输入,可逆
大批量处理前 全量 wiki 治理 / 全会话扫描 的条目先分档 排序,可逆
记忆治理前 L0 治理候选先分档,减少人工过目量 排序,可逆
升级/迁移前 变更清单先判「哪些是必须保留的能力」 标记,可逆
delegate 前 子任务先判「值不值得委派 / 该不该拆」 过滤,可逆

边界

  • 分档由我们定(quantile),Jev 只提供排序 —— 这是本轮实测的核心纪律:模型量表是任意的,绝对阈值必然退化。
  • 绝不用它决定「删不删」,只决定「先看哪个 / 要不要进下一步」。
  • 每个落点上线前都要有 ground truth 对照(否则就是换个地方拍脑袋)。

③ 工具调用选择(热路径)—— NO-GO

先把被混为一谈的四件事拆开:

决策 Jev 适配 理由
(a) 要不要用工具 主模型本来就要跑,加一跳不省调用
(b) 选哪个工具 ⚠️ 仅限非热路径 与 ① 同构;放热路径纯亏
(c) 选哪个 toolset ❌ 默认不做 换 toolset 会破坏 prompt 缓存
(d) 这次调用该不该放行 热路径门控 + 误判代价高

三条硬理由

  1. 加一跳,却不省调用。 就算 Jev 选对了工具,主模型仍必须运行来产出参数与回答。 Jev 只增加 0.4–0.8s(跨洋实测)与一次请求,净亏
  2. 换 toolset 违反缓存不变量。 Hermes 明确把「对话内 prompt 缓存」当作不可变约束 (压缩是唯一豁免)。而 Hermes 的工具 schema 每次调用都全量发送, 所以在轮次之间动态换 toolset 会让缓存失效、成本上升——省下的 schema token 抵不上缓存丢失。
  3. 误判代价不对称。 工具选错的纠正成本是一整次模型调用;若当门控用,一次误拦会直接打断正常流程。

唯一有意义的形态(归并到 ①)

不在热路径选工具,而在路由层选「能力族」: 把「这类请求该动哪一层能力」提前判一次(choice),主模型只在这层能力里选具体工具。 这既省掉「读矩阵」的成本,又不碰缓存不变量,也不用 Jev 承担门控责任。

换句话说:用户问的第三个问题,答案是把 ③(b) 并进 ① 去做,而不是在工具调用点上接 Jev。


汇总:建议执行顺序

  1. 先做 ②(可逆粗筛的某个具体落点,如深度调研前置排序)—— 已证模式、风险最低、当天可出对照数据。
  2. 再做 ①(搜索路由离线对照)—— 需要 50–100 条历史样本,1–2 天出结论。
  3. ③ 不单独做,其有效部分并入 ①。

三条必须沿用的工程纪律(本轮实测得来)

  1. 问法必须判别式(绝对式「还需要吗」会退化)
  2. records 绑定 ≫ 整段 state 多问
  3. 量表任意 → 分位排序,不用绝对阈值;且降级链必须内建(429/503 实测存在)

诚实边界

  • ①②均为评估结论 + 验证计划尚未执行任何接入,无生产改动。
  • ①的首跳一致率门槛(≥80%)是预注册判据,不是实测数字。
  • ③的结论基于架构约束(缓存不变量 + 调用次数),不依赖新实验;若将来 Hermes 允许会话始冻结 toolset,可重新评估。