Files
Video-Tree-TRM5/research-wiki/schemas/question-gen-items.md
T

3.7 KiB
Raw Blame History

type, node_id, title, date
type node_id title date
schema schema:question-gen-items 表结构: question_gen_items(逐题门判定) 2026-07-12

表结构: question_gen_items(逐题门判定)

出题管线 v2 的逐题门判定记录。每题每轮(含重出)产生一行。

列定义

列名 类型 约束 说明
item_id TEXT PK 题目唯一 IDUUID,每轮独立)
run_id TEXT NOT NULL FK→question_gen_runs 关联批次
slot_id TEXT NOT NULL 逻辑 slot 标识(同 slot 多次重出共享)
video_id TEXT NOT NULL 视频 ID
family TEXT NOT NULL 题族(retrieval/reasoning/enumeration/visual/spatial
task_type TEXT NOT NULL Video-MME 12 类主标签
skill_target TEXT M1-M5 + 题族子标签
attempt INTEGER NOT NULL 当前重出轮次(1-based,≤3
gate_key_verify TEXT pass / reject / NULL(未执行)
gate_blind_answer TEXT pass / reject / NULL
gate_multi_true TEXT pass / reject / NULL
gate_leak_test TEXT pass / reject / NULL
reject_reason TEXT 拒因文本(首个拒绝门的判定摘要)
final_status TEXT NOT NULL accepted / rejected / pending
difficulty_steps INTEGER 重量抽检产出 Agent 步数(NULL=未抽检)
selector_scores TEXT grounded selector 打分观测(JSON,见下方结构;NULL=未打分)
created_at TEXT NOT NULL ISO8601

selector_scores JSON 结构:{correct_score: float, chosen: float[], pool_size: int, anneal_rounds: int, delta_high_final: float, hard_fail: bool}

DDL

CREATE TABLE IF NOT EXISTS question_gen_items (
    item_id           TEXT PRIMARY KEY,
    run_id            TEXT NOT NULL REFERENCES question_gen_runs(run_id),
    slot_id           TEXT NOT NULL,
    video_id          TEXT NOT NULL,
    family            TEXT NOT NULL,
    task_type         TEXT NOT NULL,
    skill_target      TEXT,
    attempt           INTEGER NOT NULL DEFAULT 1,
    gate_key_verify   TEXT,
    gate_blind_answer TEXT,
    gate_multi_true   TEXT,
    gate_leak_test    TEXT,
    reject_reason     TEXT,
    final_status      TEXT NOT NULL DEFAULT 'pending',
    difficulty_steps  INTEGER,
    selector_scores   TEXT,
    created_at        TEXT NOT NULL
);

CREATE INDEX idx_items_run ON question_gen_items(run_id);
CREATE INDEX idx_items_family ON question_gen_items(family);
CREATE INDEX idx_items_task_type ON question_gen_items(task_type);
CREATE INDEX idx_items_slot ON question_gen_items(slot_id);

埋点位置

代码位置 动作 时机
synthesizer.py::generate_one_v2 返回后 INSERTgates=NULL, status=pending 每题生成后
gates.py::run_gates 返回后 UPDATE gate_* 列 + reject_reason + final_status 门跑完后
重出循环入口 INSERT 新行(same slot_id, attempt+1 重出时
heavy_check.py 完成 UPDATE difficulty_steps 抽检完成

查询模式

-- 各门拦截率
SELECT
    gate_key_verify,
    COUNT(*) as cnt
FROM question_gen_items WHERE run_id=?
GROUP BY gate_key_verify;

-- 按题族切片拦截率
SELECT family,
    SUM(CASE WHEN final_status='rejected' THEN 1 ELSE 0 END) as rejected,
    COUNT(*) as total
FROM question_gen_items WHERE run_id=?
GROUP BY family;

-- 重出收敛率
SELECT
    COUNT(DISTINCT slot_id) FILTER (WHERE final_status='accepted') as converged,
    COUNT(DISTINCT slot_id) as total_slots
FROM question_gen_items WHERE run_id=?;

-- 按 task_type 分布
SELECT task_type, COUNT(*) FROM question_gen_items
WHERE run_id=? AND final_status='accepted'
GROUP BY task_type;