diff --git a/app/question_gen/strategy_action_recognition.py b/app/question_gen/strategy_action_recognition.py index 588f7a3..b116153 100644 --- a/app/question_gen/strategy_action_recognition.py +++ b/app/question_gen/strategy_action_recognition.py @@ -49,9 +49,9 @@ _PREMATURE_EVIDENCE_ANCHORING = SubPattern( }, ], distractor_rules=( - "将视频前段出现的局部匹配动作设为强干扰项。" - "其余干扰项使用语义相近但未出现的动作," - "确保仅看前段片段的 Agent 有高概率选错。" + "将视频前段真实出现的局部匹配动作设为强干扰项——它真实发生," + "仅在【时点】这一单一维度上与正解不同(前段 vs 最终结论段)。" + "其余干扰项亦须是视频中真实发生的动作,严禁缺席事件。" ), ) @@ -81,8 +81,9 @@ _TEMPORAL_REASONING_FAILURE = SubPattern( }, ], distractor_rules=( - "干扰项使用其他次出现时的关联动作(如第 1 次或第 2 次的准备动作)。" - "确保各选项在视频中确实出现过,只是对应的时间点不同。" + "干扰项必须是视频中真实发生的事件,仅在【事件时序/顺序】这一单一维度上与正解不同——" + "即同一组真实事件的错误排列或错误的第 N 次定位。" + "严禁使用视频中未出现的缺席事件作为干扰项。" ), ) @@ -111,8 +112,9 @@ _SEMANTIC_RIGIDITY = SubPattern( }, ], distractor_rules=( - "干扰项使用与正确答案表面相似但语义不同的表达。" - "保留一个与视频原始字幕字面接近但含义偏移的选项作为陷阱。" + "干扰项须基于视频真实内容,仅在【表述/语义】这一单一维度上做文章:" + "保留一个复用视频原始字幕字面、但在题干限定下语义为假的选项作为陷阱," + "其余选项描述真实动作的不同同义表述。严禁凭空编造缺席动作。" ), ) @@ -141,9 +143,9 @@ _FINE_GRAINED_VISUAL_ACTION = SubPattern( }, ], distractor_rules=( - "干扰项使用同一大类动作的不同执行方式(同一动词的不同修饰)。" - "确保所有选项描述的都是合理的执行方式,仅细节不同。" - "避免使用明显不相关的动作作为干扰。" + "四个选项须是【同一大类动作】的不同执行方式,全部为视频中真实可见的做法," + "仅在【执行方式】这一单一维度上不同(如顺/逆时针、扳手/螺丝刀)。" + "严禁使用明显不相关或视频中未出现的动作作为干扰项。" ), ) @@ -177,7 +179,9 @@ _CROSS_SEGMENT_ENTITY_TRACKING = SubPattern( }, ], distractor_rules=( - "干扰项遗漏某些片段的动作或混入其他实体的动作。构造一个只包含部分片段信息的选项作为强干扰。" + "干扰项须是视频中【另一真实实体】在相应片段真实做过的动作," + "仅在【动作主体】这一单一维度上与正解不同;或构造只覆盖部分片段的真实子集。" + "严禁编造任何实体未做过的缺席动作。" ), ) @@ -206,8 +210,9 @@ _EVIDENCE_GAP_CONFABULATION = SubPattern( }, ], distractor_rules=( - "干扰项使用看似合理但缺乏视频证据支持的因果推断。" - "至少一个干扰项应构造完整的虚假因果链以诱导 Agent 选择。" + "正解仅陈述视频中可观测的事实或诚实承认证据不足;" + "干扰项在【因果完整性】这一单一维度上越界——补上一段视频未展示的因果链," + "但其前提元素仍取自视频真实内容(诱导 Agent 顺势编造),而非完全凭空的缺席事件。" ), ) diff --git a/tests/unit/test_ar_sub_pattern_counterfactual.py b/tests/unit/test_ar_sub_pattern_counterfactual.py new file mode 100644 index 0000000..c0f5997 --- /dev/null +++ b/tests/unit/test_ar_sub_pattern_counterfactual.py @@ -0,0 +1,16 @@ +"""AR 6 个 SubPattern 的 distractor_rules 含单维反事实约束关键词。""" + +from app.question_gen.strategy_action_recognition import AR_SUB_PATTERNS + +_REQUIRED = ["真实", "单一维度"] # 每个 distractor_rules 都需强调 grounded + 单维 + + +def test_all_sub_patterns_enforce_single_dimension_counterfactual(): + for sp in AR_SUB_PATTERNS: + rules = sp.distractor_rules + assert "真实" in rules, sp.name # 干扰项须真实发生 + assert ("单一维度" in rules or "只在" in rules or "仅在" in rules), sp.name + + +def test_sub_pattern_count_unchanged(): + assert len(AR_SUB_PATTERNS) == 6