docs(tasks): Jev intent v2 acceptance — gold dispute fix brief

Report 0b68fa97 recomputes, but its verdict rests on 133 rows where
both Jev and Flash contradict gold=unclear. Product reviews those rows
plus 20 controls; recompute offline. Context variants gave no gain.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
This commit is contained in:
Jesse_Chen
2026-09-27 13:17:19 +08:00
co-authored by Claude Fable 5.1
parent fdb7087b19
commit f364afab32
2 changed files with 93 additions and 1 deletions
+2 -1
View File
@@ -295,7 +295,8 @@
| `TASK-rectification-cluster-width-research-20260914.md` | `PROGRESS-rectification-cluster-width-research-20260914.md` | **研究单**:上一轮证明调权重改不动交付区间宽度——所有方案宽度中位数都等于整个搜索窗。先确认 sweep 的宽度口径是否含淘汰(M0),再画簇结构像(M1),最后量三个改法:放宽簇上限、按分差决定是否合并、交付区间改分位覆盖(M2)。真值覆盖率不得下降 | 已验收(结论收入定论页 `docs/research/rectification_minute_resolution_closure_2026_09_14.md`,`a643452b`) | `cf972f40` |
| `TASK-rectification-jev-intent-classifier-research-20260919.md` | `PROGRESS-rectification-jev-intent-classifier-research-20260919.md` | **研究单**:TypeSafe Jev(只做 Choice/Score/Noul 的校准判断模型,$0.042/Mtok)能否接管校正流的意图分类。产品 09-19 授权评估(推翻 09-15「分类只用贵模型」需重新拍板)。Agent 模拟校正流造 ≥900 条中文语料(标签先定、独立复核)+ 真机样本做代表性锚,量准确率 / 高置信错误率 / 低置信召回 / 延迟;只离线测,不改线上 | **关单**(产品 2026-09-19 拍板):结论 **缺数据**,Jev 不接管、不影子双跑、不再造语料;09-15「分类只用贵模型」口径维持 | 真人 157 条:Jev intent 91.1% vs 线上 Flash 89.2%,无焦点层两边都差(78.8% / 69.7%,同一错模式);挡住上线的是 Jev 置信度不可用:高置信错误全集 6.4% / 无焦点 12.1% > 3%,低置信召回 24%。fix2 507ef959 已验收通过 |
| `TASK-rectification-jev-intent-classifier-research-v2-20260927.md` | `PROGRESS-rectification-jev-intent-classifier-research-v2-20260927.md` | **研究单 v2**:Magpie 把上一轮决策塞进 Jev state 后路由效果大改;核实 TypeSafe 仍只有 `jev-1.13.0`(与 09-19 同版本),变量只在喂法。产品 09-27 授权:重抽真人来源 B(带 `case_id` 与上一轮,推翻 09-19「不再造语料」),state 三变体 V0/V1(+上一轮)/V2(+上一轮决策+承接 Noul),门槛沿用 09-19 不放宽;不接管、不影子双跑维持 | **待验收**(结论缺数据:有上一轮 0 条,V1/V2 与 Flash+V1 未跑) | 分支 `codex/jev-intent-v2-20260927`;V0 重算与 09-19 一致(真人 Jev 91.1% / Flash 89.2%,无焦点 unclear→答题 7);报告 `docs/research/jev_intent_2026_09_27.md` |
| `TASK-rectification-jev-intent-classifier-research-v2-20260927.md` | `PROGRESS-rectification-jev-intent-classifier-research-v2-20260927.md` | **验收未通过→修复单**(`0b68fa97` 报告数字可重算,但「缺数据 / 过不了门」建立在 133 条 gold=unclear 争议行上:两模型一致判 answer,敏感性下 Jev V0 intent 98.0%、高置信错误 0%;与 gold 无关的发现:V1/V2 比 V0 差、承接规则 0 次触发) | 修复单 `TASK-rectification-jev-intent-classifier-research-v2-fix-20260927.md`:产品复核 133 争议行 + 20 对照行,回写后 `--from-report` 零费用重算 |
| `TASK-rectification-jev-intent-classifier-research-v2-fix-20260927.md` | `PROGRESS-rectification-jev-intent-classifier-research-v2-20260927.md` | **修复单**:v2 报告的 gold 争议复核。执行方出本机复核表(133 争议 + 20 对照),产品按生产提示口径判定,执行方回写 `product_review` 后离线重算;对照一致 < 16/20 则判全量标注不可信 | **待执行**(2026-09-27 推 staging;验收前不推 staging) | 不再调 API;结论三选一 + 独立发现「上一轮喂法无收益」 |
| `TASK-rectification-minute-resolution-research-20260914.md` | `PROGRESS-rectification-minute-resolution-research-20260914.md` | **研究单**:候选分不开的根因是打分尺度——窗口内恒定项 11.5 分 vs 随分钟变化项 2.125 分(≈5:1)。先修封存基准(v3 每例仅 3 件事且被标 invalidated)出 v4,再离线量五个改法:分盘除数、去底座、**KP 宫头子主计分(产品 09-14 拍板,推翻 BUG-325 一条红线)**、年精度事件改边际似然、聚类签名层对齐。有收益才立实现单 | 已验收(结论收入定论页 `docs/research/rectification_minute_resolution_closure_2026_09_14.md`,`a643452b`) | `2d2467dc` |
@@ -0,0 +1,91 @@
# TASK · Jev 意图 v2 修复单:gold 争议复核(2026-09-27)
- 类型:研究单修复(离线;**不需要再调任何模型 API**,全部从已提交 JSON 重算)
- 基线:`origin/codex/jev-intent-v2-20260927` @ `0b68fa97`(其上游 `origin/staging` @ `fdb7087b`)
- 执行分支:继续在 `codex/jev-intent-v2-20260927` 上提交;**验收前不推 staging**
- 原单:`TASK-rectification-jev-intent-classifier-research-v2-20260927.md`;报告 `docs/research/jev_intent_2026_09_27.md`
## 1. 验收结论(对照原单逐条)
| 项 | 结论 | 证据 |
| --- | --- | --- |
| T1 重抽来源 B(带上一轮) | **通过** | 715 条 / 有上一轮 634;`git ls-tree` 无原文;JSON `rows` 无任何用户文本字段 |
| T2 三变体 + 测试 | **通过** | `python3 -m unittest tests.test_jev_intent_research` 16 passed(staging 基线 15,任务书起点 11);V0 state 未动 |
| T3 跑数、`--from-report` 可重算 | **通过** | 本机 `--from-report` 重算 verdict=缺数据、intent 79.44%、n=715,与报告一致;md 无 diff |
| T3 结论归因 | **未通过** | 报告把「缺数据」归因于 B/C 同层差 > 10pp、把「过不了门」归因于 Jev 置信度——两者都建立在一批有争议的 gold 上,见 §2 |
| 红线 4(不得模型代标 gold) | **存疑** | `executor_read` 565 条由 coding agent 阅读写入;09-19 同样做法,但这次与两个独立模型的分歧达 133 条,不能再当人工真值用 |
| 交付纪律 | **提醒** | 首轮 `e3bd3930` 把 `scripts/**`、`tests/**` 直接推上 staging(触发门禁并部署,staging 现跑 `e3bd3930`,其后两笔纯文档)。原单写的是执行分支实现、验收后再进 staging。本修复单**验收前不推 staging** |
## 2. 事故实证(全部可由 `docs/research/jev_intent_2026_09_27.json` 的 `rows` 重算)
1. **gold=unclear 占比反常**:点选层 269 条里 gold=unclear **104 条(39%)**;采集层 336 里 52;无焦点 110 里 46。真人对着四个选项答题、四成「语义不清」,不合常理。
2. **两个独立模型一致反对 gold**:Jev V0 判错 147 条,其中 **135 条 Flash(线上生产提示)与 Jev 判成同一个标签**,且 133 条都是 `gold=unclear → 两模型=answer_current_focus`(点选 67 / 无焦点 40 / 采集 26)。
3. **门槛数完全由这批争议行决定**:Jev V0 高置信错误 86 条,**86/86** 是 `gold=unclear→answer` 且 Flash 同判;V2 链式 41 条里 40 条同模式。
4. **敏感性(把 133 条争议行按两模型一致标签计)**:
| 变体 | 报告 intent | 敏感性 intent | 报告高置信错误 | 敏感性高置信错误 |
| --- | ---: | ---: | ---: | ---: |
| Jev V0 | 79.4% | **98.0%** | 12.9% | **0.0%** |
| Jev V2 链式 | 75.9% | 93.1% | 8.0% | 0.1% |
| Flash V0 | 75.7% | 94.3% | — | — |
两种读法下结论相反:按执行方 gold,Jev 过不了门;按两模型一致标签,Jev V0 三项门槛全过。**没有人看过原文之前,两边都不能写。**
5. **与 gold 无关、可先落的发现**:无论哪种读法,V1/V2 都比 V0 差(无焦点层 gold=provide_new_evidence 被改判 answer 13–15 条;承接分中位 0.16、最大 0.86、≥0.9 为 0,沿用规则一次未触发)。Magpie 的喂法在我们的数据上没有收益——用户几乎不发「继续」这类纯承接句。
6. 延迟:Jev 中位 1178 ms vs Flash 705 ms,比 09-19 更慢。
## 3. 根因
标注者(coding agent)对「unclear」的口径与生产提示不一致:生产提示里「没有 / 记不清 / 用带年月的经历直接答」都是 `answer_current_focus`,只有「既没否定、也没说记不清、也没给带年月经历」才是 `unclear`。133 条争议行中两个模型都给出了合法 answer_class 且高置信,更像是标注把「答得短 / 答得偏」写成了 unclear。B/C 同层差 23.7 pp、38.8 pp 是同一根因的另一面:来源 C 的 gold 经过独立复核,来源 B 没有。
## 4. 决策记录
1. **gold 复核由产品本人做**(2026-09-27 产品拍板前先按此写;产品若改派,改这一行)。原因:执行方是模型,红线 4 下它的标注不能自证;09-19 的 157 条也是同一做法,只是当时没有第二个模型来暴露分歧。
2. 复核**只看争议行 + 对照行**,不重标全量:争议行 133(选择规则 `gold.intent=unclear ∧ jev_v0_1.intent=answer_current_focus ∧ flash_v0.intent=answer_current_focus`)全部,另从「三方一致」行分层随机抽 20 条做对照,防止复核者只顺着模型改。
3. 复核后**不再调 API**:所有变体原始输出已在 `rows`,改 gold 后 `--from-report` 重算即可,费用 0。
4. 门槛、变体、模型版本一律不变。
5. 原单「不接管、不影子双跑」维持;即使复核后 V0 过门,是否接入另开产品决策。
## 5. 硬红线
1. 复核表只落本机 `.cache/jev_intent/`(gitignore),**不进仓库**;报告只提交计数与两种读法的对照表。
2. 改 gold 只允许改被复核过的行;每行记 `gold_source = product_review`,原 `executor_read` 标签保留在 `gold_prev` 字段供审计。
3. 不得用规则、关键词、模型输出批量改 gold;「敏感性」那一列只能叫敏感性,不得写成结果。
4. 不改 `frontend/src/**`;不推 staging;不升 SDK。
5. `scripts/research/jev_intent_cache.py` 里的 `G:\Ferti\...` 硬路径改为只认 `JEV_INTENT_CACHE` 环境变量与仓库 `.cache/`(P3,顺手做,不单独立单)。
## 6. 任务分解
### F0 · 出复核表(执行方,本机)
- 新脚本或 `jev_intent_source_b_v2.py` 子命令:从本机 `source_b_v2.jsonl` + 报告 JSON 选出 133 争议行 + 20 对照行,写本机 markdown:`序号 | 层 | 当前题(含选项)| 上一轮助手句 | 用户这句 | 执行方 gold | Jev V0 | Flash V0 | 产品判定(留空)`。
- **验收**:表在 `.cache/jev_intent/review_2026_09_27.md`;`git status` 干净;行数 153;对照行随机种子写进 PROGRESS。
### F1 · 产品复核(产品本人)
- 只按生产提示口径填「产品判定」列:`answer_current_focus`(含 no / unsure / yes / weak_yes)、`provide_new_evidence`、`ask_about_result`、`stop_rectification`、`unclear`。
- **验收**:153 行全部有判定;对照 20 行里产品与执行方 gold 一致数写进报告(一致 < 16 则说明标注口径整体漂移,触发让步 1)。
### F2 · 回写与重算(执行方)
- 按 F1 改 gold(`gold_source=product_review`、保留 `gold_prev`),`--from-report` 重算全部表;报告新增「gold 复核」一节:争议行数、产品改判数(按层 × 原标签 × 新标签计数)、对照行一致率。
- 结论重写为三选一(过门 / 未过门 / 缺数据),并加一句「V1/V2 相对 V0 无收益,承接规则未触发」作为与 gold 无关的独立发现。
- **验收**:`--from-report` 输出与 md 一致;`unittest` ≥16;README 状态板与 PROGRESS 同步;BLOCKED.md 若无新阻塞不动。
## 7. 让步顺序
1. 对照 20 行产品与执行方一致 < 16 → 全量 715 条标注口径不可信,结论写 `blocked: 需重标全量`,不得用 133 行的复核结果外推。
2. 产品没时间复核 133 行 → 先复核点选层 67 行(争议最集中、最易判);报告只对点选层下结论,其余层写 `blocked`。
3. F0 脚本出不来 → 产品直接读 `source_b_v2.jsonl`,执行方把 133 行的 `turn_id` 列表写到本机文件(**不进仓库**)。
## 8. 开工前置命令
```bash
git fetch origin --prune
cd .worktrees/jev-intent-v2-20260927 && git checkout codex/jev-intent-v2-20260927 && git pull --ff-only
PYTHONPATH=. python3 -m unittest tests.test_jev_intent_research # 16 passed
python3 scripts/research/jev_intent_probe_v2.py --from-report # verdict=缺数据, intent 0.7944, n=715
```
## 9. BUG 编号起点
`docs/BUG_HISTORY.md` 最大号 **BUG-1059**,本单起 **BUG-1060**(只在研究脚本自身缺陷时使用)。