docs(wiki): add three-round analysis findings and Spec-1/2/3 designs

This commit is contained in:
2026-07-11 07:45:51 -04:00
parent 658e62054e
commit a79c2ec753
11 changed files with 528 additions and 2 deletions
@@ -0,0 +1,78 @@
# Benchmark 错题失败机理分类(第三轮:242 题全量)
- **日期**: 2026-07-11
- **目的**: 出题的目标不是与 benchmark 难度一致,而是产生能迁移的训练信号。本分析对 `infer_adhoc` 全部 242 道错题做机理级归因(统一 8 类分类法),确定出题应针对的技能缺陷、应回流建树/工具的硬缺陷、以及 benchmark 自身的噪声上限。
- **方法**: 5 组并行深度分析(4 组 Claude + 1 组 Codex/GPT-5.4),每组对 T1/T2 判定强制树内核实(合计 130+ 题做了 tree.json 核实);对 Codex 组做了抽查校准。
- **前序**: [2026-07-11-question-gen-calibration-analysis.md](生成题缺陷两轮分析)
## 一、全量分布(242 题)
| 类别 | 数量 | 占比 | 处置 |
|------|------|------|------|
| T2 检索未命中(证据在树中但没搜到) | 74 | 31% | **出题训练**(全部可学) |
| T5 推理/整合错误(证据在手判错) | 67 | 28% | **出题训练**(约 2/3 可学) |
| T7 题目/标注问题 | 39* | 16% | benchmark 噪声,出题时反向规避 |
| T1 树证据缺失 | 24 | 10% | **回流建树管线**,不出题 |
| T3 视觉验证缺失/误读 | 17 | 7% | 部分可学(多帧验证技能) |
| T4 跨段聚合失败 | 12 | 5% | 出题训练 |
| T8 基础设施 | 5 | 2% | **修 AgentLoop**(见 §四) |
| T6 时间定位失败 | 4 | 2% | 出题训练 |
*T7 注意事项:其中 27 题来自 Codex 组(Counting/Temporal),抽查发现 1 例误判(604-2 "Selic" 实在树中,应为 T2)且其"树时间戳与标注冲突"类判定存在解释陷阱——树不是 ground truth,冲突也可能是树的时序表征错误。已证实的硬 T7 如 624-2(选项 B/D 一字不差重复)。T7 真实范围估计 20-39,时序类需视频级裁决。
**可训练份额:T2+T4+T5+T6 ≈ 157 题(65%+ T3 部分 ≈ 7%。** 出题的"可作用空间"约占错题的 2/3——远大于树缺陷(10%),这决定了改进优先级在 Agent 技能而非树重建。
## 二、五大跨题型失败机理(多组独立收敛)
### M1 负证据幻觉(T2 的公共机理,最大单一杠杆,4 组独立发现)
语义搜索 2-3 次未命中 → Agent 断言"视频中不存在 X" → 以假阴性驱动排除法,或落入 "None of the above / not mentioned" 吸引子。证据实际以三种低召回形态存在:**实体列表/visible_entities 标签**"Bluetooth headset (both ears)"、"Zwicky")、**画面文字 visible_text**(姓名条、白板比分、标题卡)、**长字幕块中的单句**"well I'm a magician")。恶化因素:view_node 的按题摘要会吞掉 entities 字段信号(Agent 站在证据节点上仍漏读);L1 摘要的沉默被当成全树的沉默。缺失技能:检索升级协议(语义→关键词→变体扩展→分支遍历→entities 直读)+ 负证据高门槛。
### M2 字面匹配压倒语义/语用还原(T5 主干)
裁决准则偏向 n-gram 重合而非语义变换:蕴含判断失败(128K 上限→当然能输入 32K)、虚拟语气/反问句误读("I would be a fan")、触发事件当动机、序数映射错(倒计时视频"第 16 个描述"=排名 15)、出题语病零容错、外部世界知识凌驾视频内证据(用 2026 年知识否决 "all goals 200")、NOTA 双向失灵(该容错时跳 NOTA、该保守时过度推断)。
### M3 多实例锚定错误 + 首个匹配即停(T4/T6/部分 T5)
题目锚是"第 N 个/最后一个/紧接 X 之后/首次"而视频有多个相似候选,Agent 绑定第一个表面匹配后不再枚举后续推翻证据("FINAL MODE" 之后还有 "we got a whole van");序数题用时长线性外推替代逐项数数;全局占比题不做按时长/节点数的覆盖率统计,用单场景概括全片或用少数反例一票否决主导主题。
### M4 视觉验证时点/粒度失配(T3)
用单帧回答状态演化题(上色前的花盆判最终颜色)、observe_frame 过度解读(膝上交握双手读成"十指交叉"魔术环节)、验证帧与题目锚定时刻不对齐(Penny 不在场的帧回答"Penny 进门时")。
### M5 实体 grounding / ASR 变体断链(横跨 T2/T5
题目实体与树内 ASR 噪声变体不对齐(Harry→"Harley"、martabak→"marcher back"、PRZYBYLKO→"pris Bilco"),缺"变体扩展+属性核对(国籍/拼写/归属)"步骤;字幕无说话人标注导致归属靠共现猜测。
## 三、树侧硬缺陷(T1,24 题,回流建树管线)
集中在四类:**亚秒级瞬时动作**(缆绳绊翻卡车被编码成"车轮被橙光吞没")、**密集重复背景动作**(球童每回合捡球)、**记分牌瞬时数值与赛程的时序绑定**(比分帧被标"训练场景")、**无对白叙事因果**(舞台剧对白 ASR 缺失、动画剧情结局)。
**⚠️ 树污染(已审计并整改,2026-07-11)**:源头确认为历史建树增强环节曾把题目+答案作为信息输入 LLM 提取。全量普查(900 题 × 300 树,词面 S1/S2 检测):真污染 74 处(52 题、50 视频,87% 在 L2 entities[]);污染题正确率 69.2% 低于基线 73.3%,**未推高评估分数**。整改:71 处经 LLM 按树原生上下文改写(不见题目、出厂门校验与题目零词面命中),3 处经核实为合法屏幕文字/讲座主题引用予以保留;改写后残余命中均为合法重合(画面 OCR、字幕原话、描述性短语碰撞)。整改前全树备份:`data/backups/trees-pre-decontam-20260711.tar.gz`
## 四、工程缺陷(T85 题,修 `core/agent/loop.py`
1. deepseek 稳定输出变体(`args` 平铺 + ```json 围栏)解析三连拒 → 0 步阵亡(637-3、615-3);json_repair 修不了结构错位,需 parser 增加变体适配
2. LLM 调用异常(SSL BAD_RECORD_MAC、瞬时 API 错)无步级重试,一次网络抖动废掉 13 步上下文(796-3)。位置:`loop.py:118-159`
## 五、针对性出题规格(替代"难度一致性"目标)
| # | 题目形态 | 治什么 | 构造要点 |
|---|---------|--------|---------|
| 1 | **证据埋深/反"不存在"题** | M1(最大杠杆) | 正确判据只在 entities/visible_text/长字幕单句;干扰项含 "not mentioned";配镜像题(真不存在);判分要求证据节点 id + 宣称不存在须附遍历轨迹 |
| 2 | **转述还原题** | M2 | 正确项需一步语义变换(蕴含/虚拟语气/序数映射/轻微语病),干扰项与原句 n-gram 高重合但语义错 |
| 3 | **NOTA 校准对** | M2 | 成对生成:一半 NOTA 为正解、一半为陷阱,训练"最佳可用答案 vs 证据不足"判界 |
| 4 | **多实例锚定题** | M3 | 同类事件出现 ≥2 次的视频,问"第 N 次/紧接 X 后/首次",保证首个表面匹配是错的 |
| 5 | **序数枚举题** | M3 | 无显式编号视频问"第 N 个",N 取中段迫使完整数数;答案附计数单元节点 id 清单(可程序化验证) |
| 6 | **覆盖率权重题** | M3 | 主旨题四选项=全局框架(对)/前半段强子主题/品牌水印词/少数派场景 |
| 7 | **实例消歧数字题** | M4/M5 | 计数器/记分板多时刻读数做干扰项,训练"枚举全部实例→按时刻与主体归属筛选" |
| 8 | **状态演化多帧题** | M4 | 正确答案只在特定时点帧可见(上色后),需多帧对比 |
| 9 | **ASR 实体对齐题** | M5 | 题目用规范拼写/属性指称,树内是 ASR 变体;可程序化挖掘拼写不一致对 |
| 10 | **属性辨析题** | M1/M4 | 两两组合选项(左耳/右耳/双耳),证据只在 entities/spatial_layout 字段 |
| 11 | **参照系空间题** | T5 空间 | 摄像机视角 vs 被摄者视角两种参照系的方位换算 |
**出题禁区**:T1 类(瞬时动作/记分牌时序/无对白因果)出了也是噪声标签,先修树;T7 类启示逐题验证门必须含"标注答案能被树内证据唯一支持"检查(同时规避复刻 benchmark 噪声)。
**与前两轮的关系**:第二轮确定的三件套质量门(确定性后处理 + 信息不对称化 + 三验证器)仍然必要——它们保证题目"合法";本轮的 11 种题型规格决定题目"有用"(瞄准真实失败机理)。两者正交,共同替代事后的分数一致性校准(calibrate 降级为观测性报表)。
## 相关文件
- Agent 循环(T8 修复点):`core/agent/loop.py:118-159`
- view_node 按题摘要吞 entities 的问题:`app/tree/environment.py`(待定位具体行)
- 树污染审计对象:建树/增强管线历史(`app/tree/`、TRM4 迁移物)
- 数据:`workspaces/default/harness.db`predictionsrun_id='infer_adhoc'
@@ -0,0 +1,114 @@
# 生成题 vs Video-MME 校准差异根因分析(五题型,两轮验证)
- **日期**: 2026-07-11
- **数据**: `workspaces/default/harness.db`run `infer_adhoc`benchmark 902 题,73.2%vs `infer_gen240`(生成 240 题,77.5%
- **第一轮**: 5 个并行分析 agent 按题型逐题核对题面、Agent 推理轨迹与树源节点
- **第二轮(独立验证)**: 盲复现(无先验中性重分析)+ 全量定量证伪(240 题全量指标)+ 跨模型错题复核(Codex/GPT-5.4 复核 IS+CP,独立 Claude 复核 SR)+ 设计层归因(代码+设计文档通读)+ 混杂因素检验
- **状态**: 第一轮结论经第二轮修正,见 §六;修正后的根因模型见 §七(以 §七 为准)
## 一、总览
| 题型 | bench | gen | Δ | 表面结论 | 实际根因 |
|------|-------|-----|---|---------|---------|
| Action Reasoning | 73.3% | 100.0% | +26.7% | 偏简单 | 答案泄漏 + 干扰项异质,"搜到即抄" |
| Action Recognition | 65.1% | 85.0% | +19.9% | 偏简单 | 同上;9/20 题干扰项一眼假 |
| Counting Problem | 50.0% | 65.0% | +15.0% | 偏简单 | 20/20 单节点出题,数字直读非计数 |
| Information Synopsis | 81.6% | 60.0% | 21.6% | 偏难 | **假难**:8/8 错题为题目缺陷(作用域不可解析) |
| Spatial Reasoning | 100.0% | 60.0% | 40.0% | 偏难 | **假难**:8/8 错题为良定性缺陷;且与 bench 构念不匹配 |
**核心洞察:偏简单与偏难是同一组出题缺陷的两面。** 出题范式为"单节点生成 + 干扰项取自其他节点":当题干锚定明确时,Agent 语义搜索一跳命中、异质干扰项整排排除(偏简单);当题干用相对指代(this segment/this frame/this clip)时,出题时的作用域上下文对答题 Agent 不可见,其他节点来的干扰项在全视频读法下同样为真,多个选项皆真甚至标注答案为假(假偏难)。
## 二、跨题型系统性缺陷
| # | 缺陷 | 机制 | 波及 |
|---|------|------|------|
| 1 | **闭环泄漏**:题从树节点文本生成,Agent 又在同一批文本上语义搜索 | 题干实词与节点原文重合度平均 45%,正确选项重合度 51%(最高 100%,逐字照抄);生成题平均 8.3-8.8 步 vs benchmark 13.3 步 | AR、ARec、CP 全部;"开卷考自己的教材" |
| 2 | **干扰项策略错误**prompt 明文规定"干扰选项应来自其他节点"synthesizer.py:532 | 锚定型题干 → 异质干扰秒排;指代型题干 → 干扰项皆为视频真实事实,无法排除 | 全部五题型,双向破坏难度 |
| 3 | **相对指代不可解析**this segment / this frame / this clip / the first shot | 出题时指源节点,推理管线(inference.py `_run_single_question`)不传作用域,Agent 只能按全视频理解 | IS 8/8 错题、SR 8/8 错题、CP 3/7 错题 |
| 4 | **选项无 shuffle**`parse_vlm_response`synthesizer.py:626)原样透传 VLM 输出 | 全 240 题答案分布 A=137(57%)/B=68/C=30/D=5(2%)benchmark 均匀。实测 Agent 位置偏好弱(bench 上 A 73.5% vs D 70.5%),影响约 1-2pp,但污染一切位置敏感评估 | 全部 |
| 5 | **元问题与内部术语泄漏**:题面出现 "the frame summary" / "the scene summary" / "event description 里描述了几个事件" | 考的是树构建产物措辞而非视频内容 | CP、SR、IS 各 1-2 题 |
| 6 | **题型漂移**prompt 对题型约束只有裸 `f"题型: {task_type}"` | AR 中约 3 题实为事实回忆,ARec 中 4 题不考动作 | AR、ARec |
| 7 | **标注幻觉/答案不唯一**:卡片无数字时出题 LLM 编造;比分类量随时间变化 | CPdXBREPP1hfo-004 标注 7、帧中实为 6rVPDIRSyS34-010 平局分数 7 和 8 都成立 | CP、ARec 个别 |
## 三、各题型要点
### Action Reasoning100% 全对)
题干直接引用 visible_text/字幕原句甚至时间戳(如 "Red side stole the Voidgrubs!"),正确答案是节点原文摘录;Agent reasoning 自曝排除逻辑——"这个选项属于别的片段"。真题用时间窗/序数定位、答案不在任何一句字幕中显式出现。一句话:**真题考"看懂后想",生成题考"搜到后抄"**。TaskTypeSpec 定义为单 L2 节点,结构上不可能产生跨片段因果推理。
### Action Recognition85%
干扰项质量三档:一眼假 9/20、跨场景 5/20、接近 benchmark 水准 6/20。3 道错题全部落在质量最高一档,且错因是题目缺陷(多解、标注争议、指代不清)——即对 Agent 构成真实挑战的题几乎为零。benchmark 难点(哪只耳朵戴耳机、两两组合选项)恰是树摘要不编码的细节。
### Counting Problem65%
20/20 单 source_nodebenchmark 错题 83% 要求跨全片枚举实例。生成题 10/20 数字直接写在字幕/屏幕文字里("we got 10 infrared cameras"),Agent 是"定位后读数"不是"数"。7 道错题中 6 道是题目缺陷(指代错位 3、元问题 1、标注幻觉 1、答案不唯一 1),剔除后有效正确率 ≈ 93%——**实际比 65% 显示的更简单**。
### Information Synopsis60%,假难)
8/8 错题为题目缺陷:单 L1 段落出题,题干"this segment"不可解析 + 干扰项为其他段落真实事实 → 全视频读法下多选项皆真(tslKtm6Le1s-007 四个选项全部属实),甚至标注答案为假(lw3_W5X1t54-017 的"NOT included"项实际出现在 L1_000)。含 segment/scene 指代的 11 题错 7 道(64%),无指代的 9 题只错 1 道(11%)。benchmark 163 题仅 1 题提 segment。Agent 检索与证据链本身高质量,**修复作用域后差距预计大部分消失**。
### Spatial Reasoning60%,假难 + 构念不匹配)
意外正面发现:树的 L3 节点有专门 `spatial_layout` 字段,8 道错题标注答案全部能在源节点逐字找到依据,"文本树丢失空间信息"的预设风险未发生。真正缺陷是帧级问题抛到视频级作答:"this frame" 无时间锚,长视频多个帧满足题干,干扰项又是其他帧的真实布局 → 每个选项都在某帧为真。另外 benchmark 的 11 道"Spatial Reasoning"实为视频级粗粒度题(哪个大洲/哪国),与生成题的帧级布局题考的不是同一能力,**p=0.028 的对比在构念上不成立**。
## 四、修复建议(按优先级)
| 级 | 措施 | 位置 |
|----|------|------|
| P0 | 解析后代码级 shuffle 选项并重映射 answer(勿指望 prompt | synthesizer.py:626 |
| P0 | 干扰项策略反转:删除"来自其他节点",改为"与正确答案同场景最小扭曲(换实体/数量/方向),且须在全视频范围内可证伪" | synthesizer.py:532 |
| P0 | 题干指代黑名单:禁 this segment/frame/clip、the frame summary 等;必须携带全片可定位锚(时间段用 L1 time_range 现成字段) | prompt |
| P1 | **verifier 回环**(拦截力最强):出题后让不带 source_nodes 提示的 Agent 在全树作答,非唯一收敛即拒题;本次五题型的缺陷题几乎全部会被拦截 | 新增验证步 |
| P1 | 反泄漏 gate:题干/正确选项 vs 源节点文本 n-gram 或 embedding 重合度门控 | 新增验证步 |
| P1 | Counting 强制 source_nodes≥3 跨 L1 段,标注答案数字出现在任一源节点文本中即判"直读题"退回 | synthesizer.py TaskTypeSpec |
| P1 | Information Synopsis 强制全视频作用域(source_nodes=全部 L1 | 同上 |
| P2 | 题型定义注入 prompt(1-2 句判据),替代裸 `f"题型: {task_type}"` | synthesizer.py:529 |
| P2 | 感知计数双重验证(VLM 对原帧重数);答案唯一性检查(时变量全树扫描) | 新增验证步 |
## 五、对当前 240 题的处置判断
当前题集**不宜直接用作进化训练信号**:偏简单题型的"正确"不代表能力,偏难题型的"错误"是标注/良定性噪声——diagnose 阶段会把 Agent 的正确行为归因为缺陷。建议按 P0-P1 修复出题管线后重新生成并重跑校准。
## 六、第二轮独立验证:对第一轮的修正
| 第一轮结论 | 第二轮判定 | 依据 |
|-----------|-----------|------|
| AR/IS/SR 差异显著 | **成立**AR p=0.004、IS p=0.020、SR p<0.001,二项检验) | 统计复核 |
| ARec (+19.9%)、CP (+15%) 偏简单 | **降级为统计噪声**p=0.064 / p=0.263n=20 置信区间过宽);逐题缺陷仍真实存在,但差异幅度不作为证据 | 盲复现 + 统计复核 |
| 答案泄漏是偏简单主因 | **修正**:泄漏现象成立(题干+正确项 containment gen 显著高于 benchp=1.7e-20;过半生成题正确项实词可在单一节点 100% 找到),但**泄漏程度不预测逐题表现**(答对/答错组正确项泄漏度 p=0.97)。有预测力的是**题干检索可定位性**(p=0.006,三分位准确率 67.8%→81.5%→85.2%)。纯文本捷径仅得 44% vs Agent 77.5%,泄漏解释力有限 | 全量定量证伪 |
| 干扰项异质可"不看视频排除" | **修正**:异质性成立(embedding gap p=5.6e-07bench 无此偏差),但"直接排除"不成立(题干相似度启发式仅 41.7%) | 全量定量证伪 |
| IS 8/8、CP 6/7 错题是"题目缺陷" | **归因口径修正**:跨模型复核(Codex)判 11/15 为"Agent 作用域漂移"——但机制一致:题目绑定的源段落作用域**不随题传递**,Agent 无从锁定。是"出题作用域与答题作用域不对齐"的管线缺陷,双方各执一端。另确认 2 题标注无出处(E 类幻觉)、1 题多解、1 题真难 | Codex 复核 |
| SR 8/8 错题是良定性缺陷 | **修正为 5B + 3C**:5 题确为多解(干扰项在其他帧逐字成立),但 **3 题是 Agent 真实检索失败**——其中 2 题 Agent 断言"无证据"的内容逐字存在于源帧 spatial_layout。Agent 有真实的检索漏检失败模式,这是自进化的有效信号 | 独立 SR 复核 |
| 视频子集/管线/位置偏好等混杂 | **全部排除**157 视频上 bench 73.8% vs 其余 72.5%;每题型分布在 19-20 个视频无集中;Agent 无位置先验(bench 上 A 73.5% vs D 70.5%)。注意事项:两 run git_sha 不同(超时 120s→300s、Redis 修复),adhoc 有 5 道空预测(0.55%),影响可忽略但应记录 | 混杂检验 |
| 修 prompt 可解决 | **强否定**:设计层归因确认 7 类症状中仅"无 shuffle"是实现事故;"复用节点原文"与"干扰项取自其他节点"是设计文档(synth-design §3.5)明文规定方案的结构必然。纯 prompt 补丁下 5 类缺陷换形复发 | 设计层归因 |
## 七、修正后的根因模型(最终版)
四层因果链,上游到下游:
| 层 | 根因 | 证据强度 | 修复对象 |
|----|------|---------|---------|
| **L0 结构** | 出题与答题共享同一封闭信息源(树 card 文本),且单遍生成零逐题验证——可答性/唯一性/难度/防泄漏是全树+答题环境的全局函数,出题 LLM 对其观测为零比特 | 强(设计文档+代码+信息论论证) | 出题架构 |
| **L1 设计规定** | (i) 单节点采样规格:240/240 单 source_node,无一道跨节点整合题——偏简单最结构性的来源;(ii) 干扰项取自其他节点(§3.5 原文):锚定题秒排、全局题多真 | 强(全量统计+代码+盲复现独立收敛) | TaskTypeSpec + 干扰项策略 |
| **L2 传递缺口** | 出题作用域不随题传递:"this segment/frame" 悬空指代 → 多解。含悬空指代题错误率 35% vs 干净题 18%IS 8 错题 7 道、SR 5/8 道属此 | 强(三路独立收敛:Claude 判"题目缺陷"、Codex 判"Agent 漂移",机制同一) | 题干自包含化(嵌 L1 time_range |
| **L3 表面工件** | 无 shuffle(答案 57% 在 A、2% 在 D);正确项最长(53% vs bench 39%);标注幻觉(≥2 题数字无出处);题型漂移 | 强(全量统计) | 后处理+验证器 |
附带发现(Agent 侧):SR 复核确认 3 道错题是 Agent 真实检索失败(含 2 道"断言无证据但证据逐字存在"),这类漏检模式是 diagnose/evolve 的有效训练信号,与题目缺陷应严格区分。
## 八、一次性修复架构(第二轮设计结论,替代 §四优先级表)
纯 prompt 补丁被明确否决(5/7 缺陷类换形复发)。推荐组合三件套,每题约 4 次轻量 LLM 调用(240 题约 1000 次,离线预处理,Runner 零改动):
| # | 组件 | 杀死的缺陷类 | 成本 |
|---|------|-------------|------|
| 1 | **确定性后处理层**:代码 shuffle+answer 重映射、悬空指代正则黑名单、题干/选项 vs 全树 card 的 n-gram verbatim 检测拒题 | L3 全部 + 显式指代 | ~100 行纯函数,0 LLM 调用 |
| 2 | **信息不对称化 + 采样规格改造**:L3 题从帧的未入摘要视觉细节出题;Counting/IS 采样规格改跨 ≥2 个 L2(IS 全部 L1);题干强制嵌入 L1 time_range 时间锚;泄漏 gate=文本-only 试答(给 LLM 全部相关 card 文本,能答对即拒) | L0/L1 结构病根(唯一触及信息重合的方案);迫使 Agent 走 observe_frame 下探与多跳聚合——正是训练目标 | 改 TASK_TYPE_LEVEL_MAP + prompt + 1 调用/题 |
| 3 | **轻量三验证器**:键验证(VLM 拿锚点证据判 key 成立否→杀标注幻觉)、盲答测试(无视频信息裸答,答对即拒→杀常识/秒排)、多真测试(拿全部干扰素材判 >1 选项可真否→杀歧义多解) | L2 残留 + 标注幻觉;保护 diagnose 信号纯度(错键题=有毒梯度) | 3 调用/题 |
| 锦上添花 | 全量盲 Agent 试答作准入抽检 + 难度标签(喂 mini-batch 构建);对抗式加难留到自进化跑通后(须固定出题对手版本保分布平稳) | 难度校准 | 一次完整 infer |
**注意**:作用域修复方式选"题干嵌时间锚"而非"推理时传 source_nodes"Codex 曾建议后者)——传 source_nodes 等于泄漏答案位置,搜索训练失效;Video-MME 真题的做法正是把时间锚写进题面("At the 06:00 mark...")。
## 相关文件
- 出题逻辑:`app/question_gen/synthesizer.py`TaskTypeSpec:67-83、干扰项采样:201-208/289-295/372-373/443、prompt:507-600、parse:626
- 唯一质量门(现状):`tools/generate_questions.py:758-765`(仅 JSON 格式+embedding 去重)
- 答题侧作用域缺失:`app/search/prompt.py:79-107`(只传 question/options/L1 根列表)
- 设计文档规定处:`research-wiki/designs/2026-07-09-question-gen-synth-design.md` §3.5(干扰项来自其他节点)、§6(校准为聚合级非逐题门)
- 定量分析脚本与逐题指标:scratchpad `leakage_analysis.py``metrics.json`(会话级临时目录)
- 数据:`store/questions/generated/``store/videos/<video_id>/tree.json``workspaces/default/harness.db`