Files
Video-Tree-TRM5/research-wiki/designs/2026-07-15-question-gen-v3-construction-paradigm-design.md
T
iomgaa 0fe1c96393 docs: add question-gen v3 construction-paradigm design and phase1 plan
Complete v3 planning: construction-first paradigm (frame-perception grounded fact extraction + 4-family independent judges + 6-layer verification + QuestionUnit contract), adversarial audit, paradigm-shift finding, real-data spike validation, logging schema, and phase1 contract implementation plan.
2026-07-15 05:41:10 -04:00

298 lines
34 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.
---
id: question-gen-v3-construction-paradigm
title: question-gen v3 — 构造优先范式重构(全孪生 + 四家族真独立 + 坍缩度量)
type: design
created: 2026-07-15
status: draft
supersedes: 2026-07-15-question-gen-v2-grounded-contrastive-design.md
---
# question-gen v3:构造优先范式重构
## 1. 目标与范围
**完全重构**出题管线,**只做 Action Recognition 分支**。范式从 v2 的"自由生成候选池→打分过滤"(被 [2026-07-15-question-gen-paradigm-shift-construction-over-filtering.md] 判为 AFLite 死路)转向**"从视频树的结构化事实受控构造对比对,grounding/难度/唯一性由构造保证;难度/歧义用两个正交且真独立的信号验证;验收用配对坍缩度量而非原始准确率"**。
**范围铁律**v3 只产 AR 题(全部 pair 格式);11 个非 AR 题型仍走旧 `generate-v2`singlebyte-identical,零改动)。题库混格(AR pair + 非 AR single),评测/训练侧用 `QuestionUnit(single|pair)` 兼容。
**决策锁定**(本次 brainstorming):① 全设计一次到位(6 子模式 + 完整契约);② 全孪生格式(含 fine_grained 改造成对比对);③ 全栈验证每题跑,不为成本砍;④ 四家族真独立裁判。
## 2. 范式与文献依据
依据 6 篇原文深读(`reference/papers-distractor-gen/`,证据页码见各深读报告):
| 论文 | 移植的核心机制(本质,非表面) |
|------|------------------------------|
| Vinoground | 负项=正项**最小结构编辑**bag-of-words 完全相同、只换单轴);grounding 靠真实时序事实;**双向 AND** 消语言先验;0 帧盲答对照 |
| TempCompass | **冲突孪生对**(A 的干扰项=B 孪生体正解);**去捷径坍缩度量**(配对准确率掉回随机=有效性证明);多格式交叉一致性 |
| VITATECS | **aspect 正交分解 + 单轴等信息量非蕴含最小编辑**precision-over-recall**警告:纯词汇/名词替换→74.5-90.3% 可解**(禁止) |
| GroundAttack | 只换负项保 V/Q/Agrounding=独立度量真实视觉对齐;**软肋:wrongness 无独立验证**(必须外挂独立核验) |
| AFLite | **过滤救不了质量**(单信号混淆难/歧义)→ 后置过滤只作兜底 |
| AdVQA | **对抗前移生成端**(活求解器试答骗不过就重构)+ **独立于求解器的多裁判答案一致性**;自动对抗无核验→答案漂移 |
**核心不变量**:① 干扰项=视频里真实存在、但绑到错误查询点的事实(grounded 且 wrong 由构造保证);② 答案核验器必须独立于被攻求解器;③ 度量用配对坍缩,非原始准确率。
## 3. 架构与数据流
```mermaid
flowchart TD
T[视频树: 有序L1/L2/L3 + 结构化列表 + subtitle + frame_path] --> FS[fact_sampler 采可翻转结构化事实]
FS --> AX{子模式→孪生轴路由}
AX --> TB[twin_builder 构造孪生对 P/Q<br/>单轴最小编辑, bag-of-words 硬匹配, 禁蕴含]
AX --> AB[attribute_binder 静态属性绑定<br/>需薄抽取层: 树自由文本→对象,属性,位置]
TB --> L1[层1 结构构造保证: 相反事实锚定树节点]
AB --> L1
L1 --> L2[层2 坍缩度量: text-only盲答 + 单帧基线 掉回随机]
L2 -->|未坍缩| RJ[拒/重构]
L2 --> L3[层3 看帧核实: qwen+MiniMax 交叉查构造事实真伪]
L3 -->|安慰剂: 错配帧分不坍塌| RJ
L3 --> L4[层4 活求解器难度探针: deepseek AgentLoop 双向答对=太易]
L4 -->|太易| RJ
L4 --> L5[层5 独立多裁判歧义: kimi+qwen+MiniMax 三异家族判唯一性]
L5 -->|歧义/双正解| RJ
L5 --> L6[层6 多格式交叉: MC vs Y-N 求解器一致]
L6 -->|不一致=格式捷径| RJ
L6 --> ACC[on_accept 逐 unit 原子成对落盘]
RJ --> QN[失败内容指纹入 quarantine 去重] --> BF[补构造迭代<br/>收敛上界+产量降级路径]
BF --> FS
```
## 4. 六子模式构造算法
统一原理:**对锚定真实树事实的"正题"做单轴最小编辑得孪生"反题",干扰项=视频里真实存在但绑到错误查询点的事实**。
**选项基数(契约锁定,§7 阈值全对齐)**:每个孪生子题 = **4 选 MCQ**(1 正解 + 3 干扰项),孪生 P/Q **共享同一 bag-of-words 选项集**(同词不同绑定),答案跨孪生翻转。
所有孪生对硬约束:
- **bag-of-words 硬匹配**(非"尽量")、单轴、等信息量、动词/事件结构编辑(**严禁名词/属性词汇替换**,VITATECS 实测改 1 名词即 82% 可解);
- **禁蕴含**:正解与各干扰项互不蕴含,由 **kimi 真 LLM 裁判判定**text-embedding 仅作 bag-of-words 词形辅助,**不得作蕴含唯一信号**——审核 C7:embedding 近似蕴含是假绿灯);
- **平衡/因子布局根治逐维众数(C1 根治,非仅事后指标)**:4 个选项在每个语义维度上每个取值出现次数均衡(→逐维众数无定义),构造后跑 `majority_vote_baseline(options)==answer → fail` **纯算法硬校验**,作阶段 2 CI hard-fail
- **槽位强制反置**(防 C6 槽位偏置)+ **干扰项多样性**3 个干扰项两两 embedding 距离须过下界门,防 GroundAttack distractor-similarity 扎堆一起被排除);
- **题干模板对称(C8,防翻转轴泄露)**before/after、first/last 题干本身会暴露翻转轴 → 题干须模板对称(不靠词面差异指示答案);**pair 关系可解率(P+Q 盲答+规则解法)作构造期 hard-fail**,不只事后验收指标。
| 子模式 | 孪生轴 | 锚定树的什么 | 正/反题构造 | 干扰项来源 |
|--------|--------|-------------|------------|-----------|
| **temporal** | 时序换序 | L1 下有序 L2 序列或 L2 下有序 L3(`time_range`/`timestamp``children` 顺序=时序) | 正"X 之后是什么"→答真实后继;反 before↔after 翻转→答真实前驱 | 同视频真实存在但时序位置错的事件 |
| **cross_segment** | 主宾互换/first-last | `action_subjects`+`actions` 跨 L2 段 | 正"谁**先**做 X"、反"谁**后**做 X",选项同集 | 别的段真实做该动作的主体 |
| **premature** | 早/晚段锚点 | 段位**随机**early/mid/late/final 各占,不固定 final) | 正问最终态、反问指定中间态 | 过早锚定的早段真实读数 |
| **evidence_gap** | 诚实↔虚构因果 | 事件链 + `state_changes`(注意常 null,不可依赖) | 正支证据在场答=事实;反支证据缺席答="不可确定" | 树中未展示的合理因果延续(虚构但貌真) |
| **semantic_rigidity** | 同义↔字幕陷阱 | 树的 `subtitle` 字段 + 视觉 `event_description` | 正题字幕与视觉真相一致;反题字幕是陷阱(匹配干扰项) | 字幕字面项(与视觉真相冲突) |
| **fine_grained** | 同动作不同方式 | `ongoing_actions`+`visual_attributes`+看帧(需薄抽取) | 同一动作两个真实时刻的不同执行方式做对比 | 另一时刻该动作的真实不同方式 |
> **事实来源澄清(对齐 §9)**:上表"锚定树的什么"列对 temporal 是**树结构直取**;对其余 5 子模式**仅为索引/候选提示**——真正的 grounded 事实由 **§9 帧感知抽取层从真实帧感知 + 双 VLM 交叉核实**得出(树的 `state_changes` 常 null、`actions/action_subjects` 无绑定等有损,均由帧感知绕过)。
> **VITATECS 硬警告落地**:编辑必须落在**动词/事件结构**(时序/主宾/次数/方式),**严禁名词/属性词汇替换**(原文实测改 1 名词即 82% 可解)。每题构造后跑纯算法门校验单轴性 + bag-of-words 相等 + 逐维众数无定义。
> **非 temporal 子模式的范式合法性论证 + 必达归属**(回应 finding §5 与 VITATECS 静态退化警告;构造机制见 §9 帧核实抽取层):
> - **cross_segment / premature / semantic_rigidity = 必达**(§15 阶段2)。合法性——编辑轴均落在**事件结构**(主体-动作绑定 / 段位状态 / 视觉真相 vs 字幕字面),**非静态名词替换**,不落入 VITATECS 退化区;grounding 由 §9 帧核实抽取保证。semantic_rigidity 作为必达静态类,编辑轴=视觉真相 vs 字幕字面。
> - **fine_grained = 实现+目标必达 + 运行时门兜底**:编辑轴是**动作执行方式(manner,属动词/事件结构轴:快↔慢、左手↔右手、单次↔重复)非静态名词**;grounding 由"两个真实时刻的方式对比"锚定。风险=未必总能找到两个真实对比时刻(产量)+ 方式差异是否够单轴等信息量。运行时合法性门不过则退 finding B 路线。
> - **evidence_gap = 实现+目标必达 + 运行时门兜底**:"不可确定"选项**必须在正/反题对称出现**(防审核 C3"恒定文本靶");编辑轴=证据在场↔缺席(事件结构);幻觉风险最高,运行时门不过退保守构造。
## 5. 四家族模型分工
| 角色 | 模型 | .env 变量 | 家族 |
|------|------|----------|------|
| 活求解器难度探针(复用 `core/agent` AgentLoop | deepseek-v4-pro | SEARCH_LLM | A |
| 构造表面实现 + 看帧核实 | qwen3.6-plus | VL_LLM | B |
| 独立看帧核实(异家族交叉) | MiniMax-M3 | M3_VL_LLM | C |
| 独立歧义/唯一性 + **禁蕴含真裁判** | **kimi-for-coding** | **新增 JUDGE_PANEL_LLM** | D |
| **仅 bag-of-words 词形辅助**(非蕴含判定) | text-embedding-v4 | TEXT_EMBEDDING | 纯算法 |
> **禁蕴含/语义等价判定用 kimi 真 LLM 裁判**text-embedding 只做"选项词袋是否相等"的词形辅助——**embedding 余弦不得作蕴含唯一信号**(审核 C7:测不出语义泛化蕴含,是假绿灯)。
> 图像嵌入 `qwen3-vl-embedding` 暂不可用(几何跨模态 grounding 推迟);全孪生构造范式不依赖它。`kimi-for-coding` 需新增 .env 配置并**先测网关 newapi 是否服务**(实现第一步验证)。所有调用经 `GovernedLLMClient``adapters/llm.py`)治理,禁裸调。
## 6. 六层验证栈(每题全跑,机制种类各异,不共享失效模式)
| 层 | 机制种类 | 判据 | 失败处置 |
|----|---------|------|---------|
| **1 结构构造保证** | 符号 | 孪生答案=锚定树节点的相反事实,构造时即成立 | 构造非法→重构 |
| **2 坍缩度量** | **模型探针→统计判据**(非纯算法,见 §7 分类) | text-only 盲答(deepseek**输入含 subtitle** 以捕字幕泄答案)+ 单帧基线(VLM)正确率**必须掉回随机**(4 选≈0.25;pair 双向≈0.0625);超容差=可纯文本/单帧/字幕解→拒 | 拒+指纹去重 |
| **3 看帧核实 + 帧错配安慰剂** | 视觉感知 | qwen+MiniMax 交叉查"构造相反事实真成立、干扰项在查询点真不成立";**安慰剂:喂错配帧分数须坍塌**(不坍塌=没真看帧)→拒 | 拒+重构 |
| **4 活求解器难度探针** | 行为/对抗 | deepseek AgentLoop 对 pair 双向作答;双向都对=太易→拒(对抗前移,AdVQA) | 拒+补构造 |
| **5 独立多裁判歧义核验** | 语义 | **多裁判 = kimiD 文本)+ qwenB 看帧)+ MiniMaxC 看帧)三异家族**,均独立于求解器(deepseek A);判是否有干扰项也成立/双正解,AdVQA 式一致性(无共识/多数判双真→拒)。text-embedding **不算裁判** | 拒+指纹去重 |
| **6 多格式交叉一致性** | 跨格式 | 同一构造事实生成 **MC + Y/N 两格式**,求解器跨格式作答须一致;不一致=格式捷径而非真理解→拒(TempCompass 多格式交叉) | 拒+重构 |
> **ABSTAIN 处置明确 + 终态闭环(防旧非对称谬误 + Codex I5**:任一 VLM 探针"无法给有效帧引用"→记 `ABSTAIN` 入**分层人工抽检队列**,既不自动放行(防"引不出=放过")也不自动过杀。**必须有终态**:人工结论回写 `unit_verdict`accept/reject);**超 SLA 阈值未标注按 fail 处理**(防无限 pending 吞产量)。
> **难度/歧义两口径正交不复用**:难度=求解器答错(层4);歧义=独立裁判判唯一性(层5)。永不用同一次评分兼两职。
## 7. 坍缩度量与反自证验收指标
**主验收=配对坍缩**TempCompass 度量革命):有效性证明不是原始准确率高,而是去捷径后掉回随机的幅度。
> **指标三分类(I3,防 R4 自证误分类)**:**纯结构指标**(逐维众数命中率、答案槽位卡方、pair 关系规则解法、distractor 距离)——不依赖任何模型,是真正的算法地锚;**模型探针指标**(text-only 盲答、单帧基线、帧错配安慰剂、双正解率+κ、多格式一致率)——依赖模型输出的统计判据,**不得当"纯算法"背书**;**人工/抽检指标**(难/烂混淆矩阵)——分层小样本人工双标签。三类须分别标注,验收结论以纯结构 + 人工为硬地锚,模型探针为辅助信号。
| 指标 | 靶向 | 手段(外部/纯算法/独立) |
|------|------|------------------------|
| 逐维众数命中率 | ②结构捷径 | 纯算法机械投票,阈值≈随机 |
| 答案槽位卡方 + pair 槽位反置率 | ②C6 | 纯统计 |
| text-only 盲答 / 单帧基线 掉回随机幅度 | 语言先验/单帧 | **模型探针**deepseek 盲答 + VLM 单帧,非纯算法地锚,见上分类)|
| 帧错配安慰剂坍塌幅度 | ①虚假 grounding | 错配帧分数须显著坍塌 |
| pair 关系可解率 | ②C2 | P+Q 盲答+时序排序规则,须≈1/16 |
| **subtitle_answerability_rate** | ②字幕泄答案 | 仅喂 subtitle+选项盲答,须≈随机 |
| **distractor_similarity(多样性)** | GroundAttack 扎堆 | 3 干扰项两两 embedding 距离须过下界 |
| **多格式交叉一致率** | 格式捷径 | MC vs Y/N 求解器答案一致率(低=格式捷径) |
| 双正解率 + 裁判 κ | ③歧义 | kimi vs qwen/MiniMax(异家族),基线 33%→阈值≤5% |
| 难/烂混淆矩阵 | ④/R4 | 分层人工抽检小样本双标签(可选锚点) |
| quarantine_rate / backfill_yield_by_round / judge_disagreement_by_subpattern | R5/系统 | 观测落 run_store |
阈值全部进科研 YAML + harness run 快照(可复现、可扫动);kimi/qwen endpoint 属工程 `.env`
## 8. QuestionUnit 契约(贯穿采样/分批/聚合,混格题库)
`core/types.py` 新增 `QuestionUnit(single|pair)`pair 载 `pair_id`/`twin_a`/`twin_b`/`flip_axis`/`unit_hash`/`collapse_metric``GeneratedQuestion``unit_id`/`pair_id`/`question_role`/`flip_axis`(默认值保非 AR single 不变)。
> **选项基数契约(锁定,与 §4/§7 对齐)**:每个 `GeneratedQuestion`(含 twin 的 P/Q 子题)**仍是 4 选 MCQ + 字母答案**AgentLoop/harness 的 MCQ 作答契约**不变**pair 语义只是"P、Q 共享 bag-of-words 选项集、答案翻转、双向 AND 聚合"。多格式的 Y/N 子题作为**验证探针**(层6)——**独立类型、独立存储表、硬校验其不进 benchmark/pools/predictions、不复用 `GeneratedQuestion`**M1),仅在构造期核验一致性后即抛弃,不改 MCQ 契约。
**≥13 处改造入口**(复用审计 + 契约审核全表,v2 只覆盖 7 处,遗漏必崩):
| 入口 | 文件 | 改造 |
|------|------|------|
| Global 三池切分 | `pools.py::build_pools`/`_sample_excluding` | 互斥单元 qid→pair_idpair 同池 |
| per-category 切分 | `pools.py::_split_one_category` | 输入改 unitpair 不跨 train/val |
| 分层采样 | `loader.py::stratified_sample` | 按 unit 计数,flatten 前 pair 不拆 |
| batching 对错桶 | `batching.py::_select_mixed_by_task_type` | 按 **unit correctness(双向 AND** 分桶 |
| batching 整锁 | `batching.py::build_batches` | pair 像小类整组装箱,**同 batch 不拆**(否则坍缩算不出) |
| 聚合 | `inference.py::run_inference` | pair 按 pair_id 收齐→pair-level record 双向 ANDunit 粒度 total/correct |
| 序列化冻结/解冻 | `pools.py::_q_to_dict`/`_dict_to_q` + `save_pools.categories` | 显式写读 4 pair 字段 + 以 unit 记 train/val |
| gate 阶梯 | `gate_ladder.py::build_cold_entries`/`ladder_for`/`update_probs` | entry 迁 unit_id + **schema_version + 迁移脚本**(存量 gate_pools.json 失效防硬崩) + 冷启动 2:1/gamma-EMA/Beta 先验按 unit 重定义 |
| e-process | `core/evolution/validate.py::pair_block` | McNemar 臂配对按 unitP AND Q 折叠后比对) |
| correctness 消费(C3 | `runner.py`rollout 回写 163-190 / accept 合并 1125-1142 / val 回写 1442-1454 / quadrant 分桶 / probation / momentum 1719-1760+ `core/evolution/validate.py``pair_block` 12-37 / `compute_accuracy` 72-85 | 见下"correctness API 规格"——**逐一列出并改写这 8+ 调用点**,非仅"新增视图" |
| **checkpoint/resumeC2,新增)** | `runner.py::epoch_batches`/`_batch_from_ids`199-210/711-725 | 保存 **unit_id 序列**(非逐题 qid),恢复时展开完整 unit,防断点续跑后拆 pair |
| **gate BaselineCacheC2,新增)** | `gate_ladder.py::BaselineCache`277-335 | 键从 qid 改 unit_id,基线缓存按 unit 记忆,防 P/Q 分开缓存污染双向 AND |
| 作弊门 | `adversarial_filter`→v3 难度探针 | pair 粒度判太易,禁半剔 |
| 读回 benchmark | `loader.py::load_benchmark` | 补读 4 pair 字段(`.get` 兼容旧 JSON |
| 非 AR rng 隔离(I4 | `loader.py`86-98/123-131/154-172 的 `rng.sample`+ `pools.py`604-612/811-815 的 split/shuffle | **实现前先枚举所有 `rng.sample/shuffle` 调用点**;非 AR 抽样输入与 RNG 流固定,AR pair 折叠用**独立 seed namespace**,二者 draw 互不干扰 |
**correctness API 规格(C3,三对象转换边界,非口号)**:显式定义三个对象及转换——
- **逐题 predictions**`question_id → prediction`):唯一溯源真相,rollout 逐题写。
- **unit correctness**`unit_id → bool`):AR pair = P.pred==P.ans **AND** Q.pred==Q.ans;非 AR = 单题。由 predictions 折叠得出,供进化/gate/quadrant/momentum/probation **统一消费**
- **pair collapse metric**`pair_id → 坍缩指标`):验收用,不进 correctness。
上表 8+ 调用点**逐一改写为消费 unit correctness**(含 `validate.py::compute_accuracy` 分母改 unit 数、`pair_block` McNemar 臂按 unit 折叠、quadrant 分桶按 unit_id);e-process 的 delta 信号在 unit 粒度计算,防 P/Q 单题计分污染进化。**先写此 API 规格 + 调用点替换清单,再动实现。**
## 9. 帧感知 grounded 事实抽取层(一等公民,支撑全部 6 子模式)
**这是让 6 子模式全部进入必达、又不滑回 v2 生成-过滤陷阱的关键机制。核心原则:树只是有损索引,真正的 ground truth 是帧本身——抽取直接喂真实帧,不依赖树的有损自由文本。**
盘上每视频有真实关键帧(5 帧/L2 段,`store/videos/<id>/frames/`L3 `frame_path` 定位);需更密帧时按 video id 重下原视频补采(有界局限,见 §16)。`grounded_fact_extractor`(新建一等公民组件):
1. **帧感知抽取(VLM 对真实帧做感知,非对文本做解读)**:把目标段/时刻的真实帧喂 VLM,直接感知结构化事实——cross_segment 感知 `(主体,动作,段)` 绑定;premature 感知"各段状态读数"semantic_rigidity 感知"视觉真相"再与 `subtitle` 比;fine_grained 感知"动作执行方式"(左右手/快慢/次数);evidence_gap 感知"哪些证据视觉在场"。树的 `event_description`/`entities` 仅作**索引与候选提示**,不作事实来源。
2. **双 VLM 交叉核实 + Fact schemaCodex C6**:每条感知事实由 **qwen + MiniMax 两异家族 VLM 对同帧交叉核实**,落 **Fact schema**`fact_id, subject, action, object, segment_id, frame_ids, polarity(真/假), verifier_refs, cross_agree, fact_type, difficulty_tier, negative_at_target`。**只有两 VLM 一致 + 多帧核实通过 + 绑定唯一的 fact 才进构造**;不一致/不唯一→丢弃。
### 9.1 构造合法性硬约束(Codex 三审 C3/C5/C1/C4,缺一即滑回歧义/伪难题)
- **判别性 + `negative_at_target` 排他(C5,最关键)**:干扰项**不是"任何真实事实绑错点"**——错绑定 ≠ 逻辑否定。必须:(a) 只选**判别性事实**(跨查询点/翻转轴会变的,非"表演者在台上"这类跨段持续/复现的事实);(b) 每个干扰项显式 `negative_at_target`——**帧核实它在目标查询点确为假**(闭世界证据或翻转轴互斥证明),不过则**判双正解 hard-fail**。重复场景视频(同一主体贯穿)大量事实非判别,须按此剔除(产量由 §10 降级兜底)。
- **按 fact_type 的最小采样密度(C3)**:凡涉及**顺序/变化/次数/速度**的 factcross_segment 先后、premature 状态变化、evidence_gap 在场缺席、fine_grained 方式)——5 帧/段不足以稳定感知 → **触发密帧重采(按 video id 重下补帧)或降级**;不止 fine_grained。§9 为每个 fact_type 定最小密度。
- **fact_type 难度分层(C1)**:粗粒度物体/姿态感知可靠,但**主体-动作绑定/快慢/计数/证据缺席是高阶判断**——这些 fact_type 打高 `difficulty_tier`,走**更严核实**(更多帧 + 人工小样本校准),禁止当普通感知放行。
- **唯一绑定粒度 + 不唯一拆分(C4,防产量崩)**:定义唯一性粒度(同 segment/同 frame/同 action class/同 option set);多主体多动作段不唯一时**给拆分策略**(拆到可唯一的粒度再构造),而非一律丢弃。
- **双 VLM 共享盲区校准(C2)**:两 VLM 一致**只降随机噪声、不排除同向幻觉**;加错配/遮挡/反提示一致性校准 + **人工小样本估 shared-error rate** 落验收面板;一致不当真值背书。
### 9.2 实证验证状态(小样本 spike,见 [2026-07-15-v3-frame-perception-spike-validation.md]
5 视频×3 段、94 次 VLM 调用 + Claude 亲自看帧核查,**机制已验证站得住**:可抽取率 100%、判别性 ~83%、negative_at_target 实证有效(正确抓双正解)、双 VLM 一致 87%、粗时序 5 帧可感知、抽样无双 VLM 一致幻觉。据实证细化 5 条(须折进实现):
1. **fact_sampler 加"动作性"前置筛**(样本含幻灯片/录屏非动作视频,抽取虽成功但对 AR 无意义)。
2. **fine_grained 密帧从"运行时兜底"升为"硬前置"**(实证:manner 5 帧确实不够,必须密帧重采或走 B 路线,不等运行时才发现)。
3. **manner 类 fact 不靠双 VLM 交叉核**(实证一致性低)→ 走更严核实(更多帧+人工小样本),对齐 §9.1 C1 难度分层。
4. **抽取主用详细但准确的 VLM(MiniMax 风格),保守 VLMqwen)作交叉核**
5. 多主体绑定未被 spike 压测(样本多单主体)→ 见 §16 开放风险。
**为何这不是 v2 陷阱、且比"从树文本抽取"更强**v2 的失败是"VLM **判分**自由发明的干扰项"(判断题,不可靠);这里是"VLM **感知**真实帧里有什么"(感知/描述题,可靠得多)——干扰项始终是**从真实帧感知到的真实事实绑到错误查询点**,从不自由发明、从不循环打分。wrongness 由构造保证(真事实、错绑定),grounding 由**真实帧感知 + 双 VLM 交叉**保证(短于人工标注下最强)。
**做不了**:bbox/像素坐标/精确计数/说话人 ID——放弃,不硬凑。
**grounding 强度诚实分档**(不抹平):temporal = **结构保证**(树顺序,零模型依赖);其余 5 = **帧感知验证保证**(真实帧 + 双 VLM 交叉 + Fact schema,模型依赖但锚在真实视觉证据,非自由发明)。两档都是合法 grounded,来源不同,须在验收报告分别标注。
## 10. 对抗前移、产量与续跑
- **难度探针前移**:构造后、落盘前即用 deepseek AgentLoop 试答(对抗前移),不是事后过滤。
- **失败题内容指纹去重**(R5 真正对症):对**题面语义内容**(非 question_id)算指纹,`拒/太易/歧义` 的内容指纹入 quarantine 黑名单;补构造命中黑名单即丢(堵"等价题换皮重试穿门")。
- **收敛上界**`max_total_constructed`/`max_backfill_per_slot`/`min_pass_yield`;连续 N 轮低产即停并报告。
- **产量降级路径**(解产量危机,三选一写进配置):欠产(如 22/30)作为**带质量标签的正式交付物**;或 min_pass_yield 触发转分层人工抽检;明确**质量优先于数量**,`generate_ar30.sh` 的 TARGET 变软。
## 11. 模块结构(Clean Architecture 四层)
**在现有 `app/question_gen/` 内按领域模块替换/重组**(对齐 CLAUDE.md §4.2"直接改原文件、不留向后兼容"与 §5"禁版本化并行目录"——**不建 `app/question_gen_v3/` 并行目录**)。废弃模块(generator_v2/synthesizer/distractor_selector/gates/pipeline_v2**原地删除或改写**,新增领域模块同目录落位:`fact_sampler`(采可翻转事实)、`constructor`(子模式→孪生轴路由)、`twin_builder`(孪生构造)、`grounded_fact_extractor`(§9 帧核实事实抽取,喂 cross_segment/premature/semantic_rigidity/fine_grained/evidence_gap)、`difficulty_prober`(活求解器,**不兼答案裁判**)、`ambiguity_verifier`kimi 独立多裁判)、`collapse_metric`(结构/探针/人工三类验收,见 §7)、`pipeline`(主编排,替换 pipeline_v2);`run_store` 原地扩 pair 感知(不新建 run_store_v3)。
**复用地基**`adapters/*` 全部(GovernedLLMClient/VLM/telemetry/熔断/缓存)、`core/protocols`(扩 `JudgePanelProvider`)、`core/types`(扩 QuestionUnit)、`app/harness/*`pair 契约适配,见 §8)、`run_store.py`/`loader.py`(续跑/加载基建)。
**废弃**`generator_v2`/`synthesizer`/`distractor_selector`/`gates`/`pipeline_v2` 主编排 + 对应 prompts/config。**拆解复用**`adversarial_filter` 的孪生翻转构造 + 活求解器探针 + verdicts 续跑(去后置过滤外壳,提升为构造/核验主路径)。**借鉴语义**:`strategy_action_recognition` 的 6 skill 靶点 + flip_axis 标注。
## 12. 非功能性需求(重写必须继承,防隐式丢失)
| 维度 | 设计 |
|------|------|
| **持久化** | 逐 **unit** 原子成对落盘:pair 在内存 pending buffer 收齐 P+Q 后一次性进 accepted;全量 tmp + `os.replace`,**pair 同落或都不落**,崩溃不留半对 |
| **幂等性** | 同 seed→同构造;孪生由 flip_axis 确定性构造;VLM 非确定为既有属性;`unit_hash` 检测续跑失效 |
| **断点续跑** | progressslot→status);pair 以"整对完成"为 accepted 单位;verdicts 表按 (question_id/hash/config 指纹) 三元组续跑;config 指纹失效作废脏续跑 |
| **原子性** | 逐 unit 落盘;读回校验 pair 成对完整、剔孤儿;补构造续跑三件套(seq_offset/used_node_ids/embed_pool |
| **治理/遥测** | 所有 LLM/VLM 经 GovernedLLMClient 五层栈;session_id 透传每次调用必录 telemetry |
| **并发/降级** | asyncio.Semaphore 限流;JSON 解析失败区分"契约违反 raise"vs"可降级 warning",不静默 |
### 12.1 日志与可观测方案(须走 structured-logging skill
v3 产生大量运行时数据。设计阶段先给出**表结构骨架**(对齐 CLAUDE.md §3 Phase 1.4"设计阶段强制项",细节仍由 `structured-logging` skill 在 writing-plans 前定稿 + Wiki schema 注册):
| 表 | 关键列 |
|----|--------|
| `unit_verdict` | unit_id, pair_id, sub_pattern, stage(层1-6), verdict(pass/fail), reason, metric_value, model, session_id |
| `collapse_metrics` | pair_id, text_only_acc, single_frame_acc, placebo_drop, majority_vote_hit, slot_chi2, distractor_min_dist, multiformat_consistency |
| `quarantine` | content_fingerprint, sub_pattern, quarantine_reason, round_no, ts |
| `resume_state` | slot_id/unit_id, status, config_fingerprint(断点恢复+失效检测), seq_offset |
| telemetry | 每次 LLM/VLM 调用(GovernedLLMClient 自动录,session_id 透传) |
基线指标(各门通过率、backfill_yield_by_round、judge_disagreement_by_subpattern)定义与阈值进科研 YAML + run 快照。
## 13. 错误处理
孪生构造失败(找不到真实相反事实)→该 slot 重构或走产量降级;VLM/裁判异常→slot 级隔离宽异常重出不崩整批;kimi/NLI 裁判不可用→明确报错不静默跳过(防漏歧义);安慰剂/坍缩门模型不可用→报错。
## 14. 测试策略
- 单元:6 子模式孪生构造分流;bag-of-words 硬匹配校验;禁蕴含 NLI;逐维众数纯算法门;坍缩度量;pair 原子写/半写检测;双向 AND。
- 集成:AR 端到端(mock 四家族)→ pair 成对落盘、**六层验证全部生效(含层6 MC vs Y/N 多格式交叉的 mock 与失败路径)**、坍缩验收。
- 回归(pair 不拆):`stratified_sample`/`build_batches`/`run_inference`/`pools.build_pools` 四处 pair 同进同出、同批、配对聚合、孤儿剔除;gate_ladder 迁移续跑不崩。
- 回归(非 AR byte-identical):11 非 AR generate-v2 字节级不变,含 rng 隔离验证。
- Agent 类测试产出 MDCLAUDE.md §4.6)。
## 15. 分期实现(一个设计,writing-plans 分阶段)
1. **契约地基**QuestionUnit + ≥13 入口最小 pair 支持 + gate_ladder schema_version 迁移 + 非 AR rng 隔离 + pair 原子落盘。
2. **帧感知事实抽取层(§9+ 构造器 + fact_sampler**。**v3 必达 = 全部 6 子模式**(用户决策:接受帧感知抽取风险):
- **temporal** grounding=树结构保证(零模型);**其余 5**cross_segment/premature/semantic_rigidity/fine_grained/evidence_gapgrounding=**§9 帧感知验证保证**(喂真实帧 + 双 VLM 交叉核 + Fact schema,见 §9);
- 六者共用 bag-of-words/禁蕴含/单轴/逐维众数平衡纯算法门 + 六层验证 + §9 题干模板对称 hard-fail(C8)。**帧感知抽取层是本阶段核心交付。**
- **运行时合法性门兜底**:fine_grained(需两个真实对比时刻,可能超 5 帧/段密度→重下密帧)、evidence_gap(幻觉风险最高)各挂运行时门(帧核实+坍缩+小样本人工抽检),门不过该 pair 走 fallbackfine_grained 退 finding B 路线、evidence_gap 退保守构造)——**兜底是质量安全网,不是把子模式踢出必达**。
3. **六层验证栈**:坍缩度量(含 subtitle 输入)+ 看帧核实 + 帧错配安慰剂 + 难度探针(deepseek AgentLoop+ kimi 独立歧义多裁判 + **多格式交叉一致(MC+Y/N**
4. **对抗前移 + 产量**:失败指纹去重 + quarantine + 收敛上界 + 产量降级路径 + 补构造迭代。
5. **验收面板 + 混格全链路**:反自证指标面板 + AR pair/非 AR single 端到端评分正确性验收。
> 质量闸门前移:§7 纯算法指标(逐维众数/坍缩/槽位卡方)在阶段 2 即作 CI hard-fail;难度探针在阶段 3 出早期难度信号——不等阶段 5 才验质量(对治上一版盲飞根因)。
## 16. 风险与回退
| 风险 | 回退 |
|------|------|
| kimi 网关不可用 | 实现第一步验证;退回 qwen+MiniMax 异家族双看帧裁判并标注局限 |
| **帧感知抽取风险(按 fact_type 的 failure taxonomyC6** | 逐类列失败路径 + 失败率进验收面板:稀疏帧漏检(顺序/变化/次数/速度类)→密帧重采/降级;双 VLM 共享盲区→错配/遮挡校准+人工 shared-error 抽样;**负事实不可证/双正解**→`negative_at_target` hard-fail(§9.1);事实过宽跨段复用→判别性筛;ABSTAIN 吞吐→SLA 终态(§6|
| **重复场景视频(同主体贯穿)大量事实非判别** | §9.1 判别性筛 + `negative_at_target` 剔双正解;产量由 §10 降级兜底(宁少勿歧义)。**spike 实证:连 GsYi 重复场景判别性仍 ~83%,双正解剔除率 ~17% 可控** |
| **多主体繁忙场景的唯一绑定(Codex C4,spike 未压测)** | 样本多单主体,唯一绑定风险未验证 → writing-plans/实现早期补一次多主体段实测;不唯一时按 §9.1 拆分粒度处理 |
| **fine_grained 产量/合法性**("两时刻不同方式"未必总能找到、未必构成合法单轴编辑) | 运行时合法性门(帧核实+坍缩+人工抽检);不过退 finding B 路线(生成候选+独立 wrongness 帧核验);产量降级兜底 |
| **evidence_gap 虚构因果幻觉**(幻觉风险最高) | 运行时合法性门 + 保守构造 fallback"不可确定"选项正/反题对称(防 C3 文本靶)|
| **semantic_rigidity(必达静态类)** | 编辑轴=视觉真相 vs 字幕字面(非名词替换,避 VITATECS 静态退化);视觉真相由帧核实确证 |
| fine_grained/静态类产量低(找不到真实对比时刻) | 产量降级路径;必要时该子模式先缓 |
| 属性抽取层不准 | 抽取后 VLM 看帧复核;不准即弃该题 |
| gate_ladder 迁移破坏冷启动算法保真 | schema_version + 迁移脚本 + 2:1/gamma-EMA/Beta 按 unit 重定义并写入保真清单 |
| 混格题库拖累训练 | 阶段 5 先验评分正确性;必要时 AR pair 与非 AR 分池 |
## 17. 核心算法保真
v3 触及算法保真清单(`ARCHITECTURE.md §6`)第 5 项(信息阶梯冷启动 2:1/gamma-EMA/反泄漏)——因 gate_ladder 迁 unit_id,须逐条比对按 unit 重定义、不简化,并在 commit 标注。其余 11 项不涉及。
> **gate-unit 迁移 ADR(C4,阶段 1 强制交付,不得占位进实现)**:以下每项须有**可测试**的明确定义——① unit 的冷启动"对/错"如何从 P/Q 得出(建议 unit 错=P 或 Q 任一错);② 2:1 错优先交错在 unit 上如何保持;③ unit `p_hat` 初值(Beta 先验参数);④ gamma-EMA 观测来源(predictions 折叠成 unit 观测再更新,防 `update_probs` 按 qid 匹配失效致 EMA 停摆);⑤ probe_quota 按 unit 还是按题抽;⑥ 存量 `gate_pools.json`(无 schema_version、qid 键)的处理:加 `schema_version` + 拒绝或一次性迁移脚本;⑦ 反泄漏(run_id 含 `_gate_` 过滤)不受影响的确认。
## 相关
- 范式依据:[2026-07-15-question-gen-paradigm-shift-construction-over-filtering.md]
- 前序审核:[2026-07-15-question-gen-v2-adversarial-audit.md]
- 被取代:[2026-07-15-question-gen-v2-grounded-contrastive-design.md]
- 论文:`reference/papers-distractor-gen/`6 篇深读)