Files
Jyotisha/docs/research/jev_intent_2026_09_19.md
T
jesse-ux d6fc4fb8b3
Independent Staging Quality Gate / validate (push) Successful in 10m16s
Independent Staging Quality Gate / publish (push) Successful in 3m57s
research(rectification): DeepSeek Flash 抽 33% 对照现行分类器提示词
来源 B 仍为 0。Flash 套生产提示词,采集题相对门槛未过。结论仍不可接。
2026-09-19 09:45:29 +08:00

153 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TypeSafe Jev 接管校正意图分类 · 离线对照(2026-09-19)
- 任务:`docs/tasks/TASK-rectification-jev-intent-classifier-research-20260919.md`
- 基线:`origin/staging` @ `d9722d56`
- Jev 模型:`jev-1.13.0`(不用 jev-latest)
- 生成器 / 复核:`agent-template-v1` / `agent-rule-v1`
- 真值 sha256:synthetic `79d53a958b3b42ed18c79e3bbcff4b31deb22b65eedcd89b39326a7fefc9b0e8`;simulated `a8611e75bf56024fa984fb204d34a5e16405f18b3eaa5a3bee91f96e43918bf7`;disputed `b4aed8567bd6b3fdd5cc98c73d9139197d62a96120a0ee29f474b8f08c050def`
- 来源 B:0 条(本地,不提交原文)
## 结论
**不可接**。来源 C 上 Jev 的绝对门槛未过:高置信错误率 7.0% > 3%;低置信召回 34.1% / 34.2% < 60%(错了却仍高置信);点选题 answer_class 准确率 65.0%(写库字段)。来源 B 不足 30 条,代表性检验只报数、不判定。 相对 −3pp(同一样本):choice Jev 89.5% vs 现行 92.5%(门槛 89.5%,过);collect Jev 91.0% vs 现行 95.5%(门槛 92.5%,未过);none Jev 100.0% vs 现行 97.0%(门槛 94.0%,过)。
若接:不接。现行分类器继续用会话选定的贵模型。若还要观察中文口语,只允许 (b) 影子双跑只记日志,不得按 confidence 写库。曲线上 θ=0.9 时高置信错误仍未清零。
## T3 指标(Jev,来源 C)
| 层 | n | intent | answer_class | dated | 高置信错误 | 低置信覆盖 | 低置信召回 | no/unsure 互判 | 自洽率 | 中位 ms | P95 ms | 次均 input tok |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| choice | 400 | 88.0% | 65.0% | 100.0% | 4.2% | 12.5% | 34.1% | 5 | 98.5% | 923 | 1344 | 1122 |
| collect | 400 | 90.5% | 83.6% | 97.0% | 7.0% | 13.5% | 34.2% | 22 | 98.0% | 901 | 1026 | 987 |
| none | 100 | 100.0% | — | 100.0% | 0.0% | 4.0% | — | 0 | 100.0% | 923 | 1018 | 923 |
来源 A(测试夹具,n=10)intent 90.0%,answer_class 85.7%,高置信错误 0.0%。
## 现行模型对照
模型:`deepseek-flash`。DeepSeek Flash 顶现行 `classifyRectificationTurnIntent` 提示词;来源 C 分层随机 33%(seed 20260919),来源 A 全量。不是线上会话模型。
| 层 | n | intent | answer_class | dated | 自洽率 | 中位 ms |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| choice | 133 | 92.5% | 83.0% | 100.0% | 100.0% | 638 |
| collect | 133 | 95.5% | 95.8% | 97.7% | 95.5% | 611 |
| none | 33 | 97.0% | — | 100.0% | 100.0% | 705 |
同一样本上 Jev vs 现行(相对门槛用这一表):
| 层 | n | Jev intent | 现行 intent | 差(Jev−现行) | 门槛现行−3pp |
| --- | ---: | ---: | ---: | ---: | ---: |
| choice | 133 | 89.5% | 92.5% | -3.0% | 89.5% |
| collect | 133 | 91.0% | 95.5% | -4.5% | 92.5% |
| none | 33 | 100.0% | 97.0% | 3.0% | 94.0% |
## 代表性检验(来源 B vs 来源 C)
来源 B 不足 30 条,代表性检验只报数、不判定。
## 置信度–准确率曲线与 θ
推荐 θ = 0.9。点:
```json
[
{
"theta": 0.3,
"jev_share": 0.9877777777777778,
"fallback_share": 0.012222222222222223,
"jev_acc": 0.8278965129358831,
"high_conf_errors_in_used": 45
},
{
"theta": 0.4,
"jev_share": 0.9522222222222222,
"fallback_share": 0.04777777777777778,
"jev_acc": 0.8366394399066511,
"high_conf_errors_in_used": 45
},
{
"theta": 0.5,
"jev_share": 0.88,
"fallback_share": 0.12,
"jev_acc": 0.8661616161616161,
"high_conf_errors_in_used": 45
},
{
"theta": 0.6,
"jev_share": 0.8266666666666667,
"fallback_share": 0.17333333333333334,
"jev_acc": 0.8884408602150538,
"high_conf_errors_in_used": 45
},
{
"theta": 0.7,
"jev_share": 0.7677777777777778,
"fallback_share": 0.23222222222222222,
"jev_acc": 0.9015918958031838,
"high_conf_errors_in_used": 45
},
{
"theta": 0.8,
"jev_share": 0.6822222222222222,
"fallback_share": 0.31777777777777777,
"jev_acc": 0.9267100977198697,
"high_conf_errors_in_used": 45
},
{
"theta": 0.9,
"jev_share": 0.5333333333333333,
"fallback_share": 0.4666666666666667,
"jev_acc": 0.9604166666666667,
"high_conf_errors_in_used": 19
}
]
```
## 错例画像(改写后,无法对应真实会话)
### cjk_colloquial
- `C-choice-0005` / choice / 「嗯那会儿吧咋说呢就是那段」 gold={'answer_class': 'yes', 'has_new_dated_event': False, 'intent': 'answer_current_focus'} jev={'intent': 'unclear', 'answer_class': None, 'has_new_dated_event': False, 'confidence': 0.88}
- `C-choice-0008` / choice / 「额这个嘛就那样发生了」 gold={'answer_class': 'yes', 'has_new_dated_event': False, 'intent': 'answer_current_focus'} jev={'intent': 'answer_current_focus', 'answer_class': 'unsure', 'has_new_dated_event': False, 'confidence': 0.47}
- `C-choice-0016` / choice / 「emmm 感觉一般般就是那段」 gold={'answer_class': 'yes', 'has_new_dated_event': False, 'intent': 'answer_current_focus'} jev={'intent': 'unclear', 'answer_class': None, 'has_new_dated_event': False, 'confidence': 0.38}
### literal
- `A10` / collect / 「2016年3月入学」 gold={'answer_class': 'yes', 'has_new_dated_event': False, 'intent': 'answer_current_focus'} jev={'intent': 'provide_new_evidence', 'answer_class': None, 'has_new_dated_event': True, 'confidence': 0.39}
- `C-choice-0006` / choice / 「就是那段」 gold={'answer_class': 'yes', 'has_new_dated_event': False, 'intent': 'answer_current_focus'} jev={'intent': 'unclear', 'answer_class': None, 'has_new_dated_event': False, 'confidence': 0.9}
- `C-choice-0023` / choice / 「就是那段,当时身边人也没特别提,我自己也没当回事,我想想啊就是那种说」 gold={'answer_class': 'yes', 'has_new_dated_event': False, 'intent': 'answer_current_focus'} jev={'intent': 'unclear', 'answer_class': None, 'has_new_dated_event': False, 'confidence': 0.64}
### other
- `C-choice-0002` / choice / 「不是很能整明白就是那段」 gold={'answer_class': 'yes', 'has_new_dated_event': False, 'intent': 'answer_current_focus'} jev={'intent': 'answer_current_focus', 'answer_class': 'unsure', 'has_new_dated_event': False, 'confidence': 0.75}
- `C-choice-0012` / choice / 「有的,别的先不说,就这一句你先记着,…特别提,我自己也没当回事」 gold={'answer_class': 'yes', 'has_new_dated_event': False, 'intent': 'answer_current_focus'} jev={'intent': 'answer_current_focus', 'answer_class': 'weak_yes', 'has_new_dated_event': False, 'confidence': 0.34}
- `C-choice-0073` / choice / 「明显有过,现在回想起来细节对不上,只…。另外2023年9月分开」 gold={'answer_class': 'yes', 'has_new_dated_event': True, 'intent': 'answer_current_focus'} jev={'intent': 'answer_current_focus', 'answer_class': 'unsure', 'has_new_dated_event': True, 'confidence': 0.46}
## T1 判据对照
见 `scripts/research/jev_intent_questions.py` 的 `CRITERION_MAP`。丢掉的语义:生产提示里的「通常」「不要按 A/B/C/D 猜」「不要按关键词表」;结构不变量改由 `enforce_combo` 强制。
| 现行提示原句 | Jev 落点 | 丢失 |
| --- | --- | --- |
| 结合当前问题和动态选项判断用户是在回答当前问题、提供新的带时间经历、要求停止整个校正、询问结果,还是语义不清。 | intent Choice with five literal criteria, including unclear as the residual option. | — |
| 若是在回答当前问题,answer_class 必须使用某个选项提供的 answer_class;否则 answer_class 必须为 null。 | answer_class Choice is built only from the live options; code nulls it when intent != answer_current_focus. | — |
| has_new_dated_event 仅在用户同一句里除了回答当前问题之外,还提供了新的、带大概时间的经历时为 true。 | has_new_dated_event Noul true/false criteria, same split. | — |
| 单纯的否定或单纯的选项回答必须为 false。 | Noul false: 单纯否定、单纯记不清不算新经历。 | — |
| 若同一句话既回答了当前问题又补充了新的带时间经历,intent 仍为 answer_current_focus,has_new_dated_event 为 true。 | intent and Noul are separate questions; code keeps answer_current_focus when both fire. | Jev does not itself enforce this pair; code does. |
| “当前方面没有、那段时间没有变化”通常是回答当前问题,不是停止整个流程。 | stop_rectification criterion: only an explicit stop of the whole flow. 当前方面没有 is answer_current_focus. | The hedge 通常 is dropped; the stop option is written as an exclusive literal. |
| 只有用户明确要求停止整个校正时才分类为 stop_rectification。 | stop_rectification criterion, same literal. | — |
| 不要按 A/B/C/D 的位置猜语义,只按选项 label 与 answer_class 判断。 | answer_class criteria keyed by answer_class, not by A/B/C/D. | The prohibition itself is not sent; Jev is not given A/B/C/D as the choice keys. |
| 「没有、没发生过、这方面没什么」→ intent 为 answer_current_focus,answer_class 为 no。 | Collect answer_class criterion for no. | — |
| 「记不清、不记得、忘了、想不起来、以后再说」→ answer_class 为 unsure。 | Collect answer_class criterion for unsure. | — |
| 用户用带大概年月的经历直接回答当前采集题 → intent 为 answer_current_focus,answer_class 为 yes(程度较弱时为 weak_yes),has_new_dated_event 为 false。 | Collect yes/weak_yes criteria + Noul false for a dated answer that is the collect answer. | — |
| 不要把「没有」或「记不清」标成 yes。 | Separate no and unsure criteria; yes requires a dated or affirmative answer. | The 'do not' wording is dropped. |
| 若既没有否定、也没有说记不清、也没有给出带年月经历,intent 为 unclear,answer_class 必须为 null。 | unclear residual on intent Choice; code nulls answer_class. | — |
| 若用户只在补充带时间的经历、并没有回答当前采集题,intent 为 provide_new_evidence。 | provide_new_evidence criterion. | — |
| 若同一句话既明确否定当前采集题又补充了新的带时间经历,intent 仍为 answer_current_focus 且 answer_class 为 no,不要改成 provide_new_evidence。 | Code keeps no + Noul true. Jev intent/Noul are independent. | Jev may split this pair; code does not re-vote intent from the Noul. |
| 不要按关键词表或正则猜测,只根据当前问题与用户这句话的语义分类。 | Not sent. Jev has no keyword table in the question. | The meta-instruction is dropped (Jev answers the written question, not the intended one). |
## 回退
任何上线方案必须保留回退到现行会话模型的路径。官方限流会动态调整。