Jev 调用形态升级:批量请求替代逐条串行的对比验证方案
- 承接:
https://decision.ht1072.top/2026-09-20-jev-community-usage-review-2026-09-20(社区用法评审 P0-1) - 本轮性质:阶段 0 pilot 已完成(真实调用 + 真实数据 + 重复性对照),阶段 1 正式对比验证待确认后执行
- 证据目录:
~/llm-wikis/knowledge-ops/evidence/jev-batch-form-2026-09-21/
Jev 调用形态升级:批量请求替代逐条串行的对比验证方案
结论
痛点选定为 Jev 的逐条串行调用形态,它是当前唯一同时压住速度、成本、稳定性和可用半径的一项。本轮真实 pilot 已把它量化:同一次任务,批量单请求比逐条串行快 11 到 83 倍,成本低 28% 到 47%,且不再触发网关限流。但 pilot 同时推翻了原规划里一个隐含假设——批量不是免费的,它会系统性地移动判定概率位置,只是这个副作用按原语分层:boolean 原语几乎免疫,score 原语有约一成条目出现稳定分歧。因此本方案不建议整包切换,而是按原语分场景准入,并把正式对比验证的预注册门禁写在前面。
推荐方案
先落 boolean 场景(去重、噪音复核、分诊、retain 预筛):零判定翻转、速度 11 倍、成本降 28%,风险可控。 score 场景(重要度、翻译验收、搜索排序)只准入排序与只读用途,阈值门控类动作在阶段 1 审计通过前维持串行。 正式对比验证按阶段 1 的门禁执行,不通过就不切。
痛点:逐条串行是四重约束的交汇点
上一轮评审把「批量请求替代逐条串行」列为 P0-1 并标注影响面最大,但当时只有一次两问的可行性探针,没有量级。本轮用真实晨报数据做了完整三方对照(串行 / 批量 / 批量乱序),三个维度同时成立:
| 维度 | 实测证据 |
|---|---|
| 速度 | 20 条重要度扫描:串行 20.3–79.1 秒,批量 0.55–0.96 秒 |
| 成本 | 同任务:串行 $0.000346,批量 $0.000182(固定开销随调用点数重复支付) |
| 延迟确定性 | 串行同输入三轮 20.3 / 43.4 / 79.1 秒(4 倍波动);批量 0.55–0.96 秒 |
| 限流 | 串行 60 次调用触发 HTTP 429,需退避重试;批量全程零限流 |
| 可用半径 | 串行把 Jev 锁在小 N 场景,候选清单里的大 N 场景(搜索排序、证据筛选、502 条评论级材料)实际不可用 |
成本这一项的机制值得单独说明:批量单次请求成本约等于 10.5 条单条调用,说明每次调用的固定开销占了绝大部分,边际内容成本极低。所以「减少调用点数」不是省网络往返,是省固定开销本身。按当前用量,省钱金额可忽略(月成本不到 5 美分),但同样的机制决定了 Jev 能不能用在 N=200 以上的场景——那里串行的成本会随 N 线性放大。
关键发现:批量不是噪声源,但会移动概率位置
这是本轮最重要的结果,也是原规划没预料到的。
第一层结论(好消息):批量形态不引入额外随机波动。同输入重复三轮,串行组内极差与批量组内极差几乎相同。
| 场景 | 原语 | 串行组内极差 | 批量组内极差 |
|---|---|---|---|
| 重要度评分(N=20) | score | 均值 0.061 / 最大 0.160 | 均值 0.063 / 最大 0.180 |
| 跨源去重(N=7) | boolean | 均值 0.017 / 最大 0.030 | 均值 0.016 / 最大 0.030 |
第二层结论(风险):批量与串行之间存在稳定、可复现的系统性偏移,且按原语分层。
| 场景 | 系统偏移均值 | 最大单条偏移 | 超阈值条目 | 判定翻转 |
|---|---|---|---|---|
| 重要度评分(score) | +0.042 | 0.807 | 2/20 条偏移超过 0.5 | — |
| 跨源去重(boolean) | +0.001 | 0.267 | — | 0/7 翻转 |
score 场景的两条分歧条目各自组内都极稳(串行 0.05 / 批量 0.04),说明这不是抖动,是两种形态给出的两个稳定答案:
- 新浪财经「9月21日周末要闻:原油期货大幅走高…」:串行稳定 0.21,批量稳定 0.96。人工判断串行更合理(与 AI 无关的财经时政),批量把它抬进了边缘相关区间。
- 量子位「华为首发企业AI白皮书」:串行稳定 3.00,批量稳定 2.19。人工判断串行更合理,批量把它压到「一般」。
两条都是跨域条目(非纯 AI 内容),合理推测是同 state 内其它 AI 条目形成了语境锚点。乱序组结果落在两者之间或贴近批量,与语境效应一致。
第三层结论(真正会改变动作的地方):boolean 场景在 0.5 判定线上零翻转,但在生产的 0.85 阈值上有 2/7 条行为不同。
| 对 | 内容 | 串行均值 | 批量均值 | 生产动作变化 |
|---|---|---|---|---|
| p0 | HN / Lobsters 同文 | 0.60 | 0.87 | 仅标记 → 自动删除 |
| p2 | MIT 通讯 vs 其单篇 | 0.89 | 0.76 | 自动删除 → 仅标记 |
p0 恰好是上一轮记录里「真重复但落 flag_review」的持续观察项。也就是说,批量形态会把一批贴着阈值的条目推向另一侧。概率方向没变,但动作变了——对不可逆动作来说,这才是需要门禁的地方。
阶段 1:正式对比验证计划
阶段 0 用的是单日单场景数据,样本小、无人工 ground truth 全覆盖。阶段 1 把验证补齐到可以支撑切换决策的强度。
验证维度
| # | 维度 | 设计 | 通过判据 |
|---|---|---|---|
| 1 | N 梯度 | 20 / 50 / 100 / 200 条,同一批真实数据 | 批量 wall time 不随 N 线性恶化;N=200 时单请求仍在超时预算内 |
| 2 | 原语覆盖 | boolean 4 场景(去重、噪音复核、wiki 分诊、retain 预筛);score 3 场景(重要度、翻译验收、搜索排序) | 每个场景都有独立的组内极差与系统偏移数据,不跨场景外推 |
| 3 | 稳定性对照 | 每臂 3 轮重复,同输入 | 批量组内极差 ≤ 串行组内极差 × 1.2 |
| 4 | 系统偏移 | A 均值 vs B 均值,逐条 | 平均偏移绝对值 ≤ 0.15,且无单条偏移 > 0.5 |
| 5 | 阈值邻域审计 | 概率落在 [阈值−0.15, 阈值+0.15] 的条目逐条人工裁定 | 动作不一致条目全部有明确裁定,不接受「方向一致就算过」 |
| 6 | 污染陷阱 | 向 state 注入 1 条极端记录(明确导购广告)与 1 条高相似干扰记录,观察邻条是否被拉动 | 陷阱记录不得改变非目标条目的判定 |
| 7 | ground truth 精度 | 每场景人工标注全部条目(去重场景已有 7 对) | 批量准确率 ≥ 串行准确率,允许持平不允许下降 |
| 8 | 降级与容错 | 批量请求失败 / 部分问题缺答 / 单条超时 | 缺答条目可定位、可按 ID 单独重试,不整批作废 |
预注册门禁(运行前冻结,不事后调)
GO 条件(全部满足):
- 批量组内极差 ≤ 串行组内极差 × 1.2(场景级)
- 系统偏移平均绝对值 ≤ 0.15,单条最大偏移 ≤ 0.5
- 阈值邻域动作不一致条目全部经人工裁定且无不可接受项
- 速度提升 ≥ 10 倍,总成本 ≤ 串行
- ground truth 准确率不低于串行
- 污染陷阱未改变非目标条目判定
NO-GO 处理:任一条件不满足即停在当前形态,不切批量;已通过的部分场景可单独放行,不做整体打包。
执行方式
复用阶段 0 脚本骨架,参数化 N 与场景:
python3 ~/llm-wikis/knowledge-ops/evidence/jev-batch-form-2026-09-21/jev_batch_repeat.py # score 稳定性对照
python3 ~/llm-wikis/knowledge-ops/evidence/jev-batch-form-2026-09-21/jev_batch_boolean.py # boolean 阈值邻域
阶段 1 需新增:jev_batch_scenarios.py(多场景矩阵 + 陷阱注入 + 缺答重试),落盘到同一证据目录,每个场景一份 result_<scenario>.json。
阶段 2:落地路径
按风险从低到高推进,每一步单独可回滚。
- 底座:
jev_client.py新增decide_batch(state_records, questions_spec)原语,返回按 ID 索引的结果 + 缺答清单 + usage/cost。现有单问题原语保持不动。 - 先接 boolean 只读/标记类:噪音复核、wiki 分诊、retain 预筛(保留原串行路径作对照,env 开关切换)。
- 再接 boolean 不可逆类:跨源去重。切换前必须完成阈值邻域审计(阶段 1 第 5 项),因为 p0 已证明批量会把 0.60 抬到 0.87 跨过删除门槛。
- score 场景只准入排序:重要度排序、搜索排序、证据排序。阈值过滤(
JEVI_IMPORTANCE_ENFORCE=1)在阶段 1 审计通过前不动。 - 审计口径:run log 每条记录带
form字段(serial / batch)与 pair/record ID,便于切换后回溯行为差异。
风险与边界
风险 1:把批量当成纯优化,忽略阈值邻域的行为漂移
p0 与 p2 已证明:判定方向不变但动作改变。对不可逆动作,这不是精度问题,是行为改变。 缓解:阈值邻域审计作为不可逆场景的强制前置,不接受抽样。
风险 2:score 原语的跨域条目受语境锚点影响
两条分歧条目都是跨域内容,同 state 内其它条目可能形成锚点。N 越大,语境越复杂。 缓解:阶段 1 加陷阱注入(维度 6);score 场景若审计不通过,改用「只排序不判决」,或对跨域条目走单独串行。
风险 3:阶段 0 样本小,结论可能不稳
单日 20 条 / 7 对,系统偏移的两条分歧是否复现需要更多数据。 缓解:阶段 1 的 N 梯度与 3 轮重复就是为这个设计的;在阶段 1 完成前,只放行 boolean 只读场景。
风险 4:单请求承载大量问题时的超时与部分失败
N=200 时单请求体积显著变大,可能触发超时或部分问题缺答。 缓解:设置分组上限(参考社区实践的 40 条保护),超限拆批;缺答条目按 ID 单独重试,不整批作废。
证据与验证
- 脚本与产物:
jev_batch_pilot.py(三方对照)、jev_batch_repeat.py(score 稳定性)、jev_batch_boolean.py(boolean 阈值邻域);产物result_batch_pilot.json、result_repeat_control.json、result_boolean_batch.json - 数据来源:真实晨报条目
~/.cache/hermes/morning-brief/importance_latest.json(20 条,2026-09-21);真实去重 ground truth 复用 2026-09-20 的 7 对(含人工裁定) - 调用口径:真实
AI_GATEWAY_API_KEY调用https://ai-gateway.vercel.sh/v1/evaluate,typesafe-ai/jev,生产同款 prompt 与 criteria,key 只读不打印 - 未覆盖:N > 20 的梯度、陷阱注入、score 场景的完整 ground truth、跨日复现
- 成本:本轮 pilot 全部真实调用合计约 $0.004
行动清单
- 待确认:是否执行阶段 1 正式对比验证(预计 4 个场景 × 3 轮 + N 梯度,真实调用成本 < $0.05)
- 待确认:boolean 只读场景(噪音复核、wiki 分诊、retain 预筛)是否先切批量
- 待确认:
jev_client.py新增decide_batch原语的接口形状 - 待确认:是否把本方案挂进既有 Jev rollout list,替换原 P0-1 条目