Contrastive CoT Prompting

prompt提示词2026年6月7日1

Contrastive CoT Prompting(Chia et al., 2023)的核心是在 CoT few-shot 示例里同时提供“错误推理示例”和“正确推理示例”,用“对比学习”的方式让模型不仅学会怎么推,还学会哪些推理路径是陷阱、应当避免。直观上相当于:给模型看“反面教材 + 正面范例”,明确界定“好推理/坏推理”的差异。


1) 它具体怎么做

在一个 CoT prompt 的 exemplars(示例)部分,针对同类问题,你会放入类似结构:

  • 示例 1(Incorrect rationale):给出一个看起来合理、但其实犯了典型错误的推理与错误答案
  • 示例 2(Correct rationale):给出正确推理与正确答案
  • 之后再给“待解问题”,要求模型按正确方式推理

关键点是:错误示例要“具有代表性”(常见错法),并且要在 prompt 中明确标注它是错误的(例如 Wrong: / Incorrect:),避免模型把错误模式学走。


2) 为什么会有效(机制直觉)

  • 提供决策边界:仅给正确例子,模型未必知道哪些相似但错误的路径会失败;对比后边界更清楚。
  • 抑制常见幻觉/捷径:比如算术题里“跳步心算”容易错;事实 QA 里容易把相近实体混淆。错误示例把这些错法显式化。
  • 更像“纠错教学”:人类学习中“错题本”很有效,同理。

3) 适用场景

论文里提到的两类很典型:

  • Arithmetic Reasoning:加减乘除、比例、单位换算、两步以上计算
    常见错法:运算顺序错、漏一步、单位没统一、把“每…多少”理解反
  • Factual QA / 多跳事实问答:实体相近、时间线复杂、别名多
    常见错法:张冠李戴、把相关但非同一实体当作答案、把“出生地/国籍/居住地”混用

也适合:

  • 逻辑题里常见谬误(必要/充分条件混淆)
  • 代码推理里常见 bug 模式(off-by-one、作用域/可变对象引用等)

4) Prompt 模板(可复制)

下面是一个通用骨架(few-shot):

你将看到一些示例,包含错误推理与正确推理。错误推理仅用于展示应避免的思路。请你模仿正确推理方式回答最后的问题。

示例 A(错误示范):
Q: {q1}
Incorrect reasoning: {bad_rationale_1}
Incorrect answer: {bad_answer_1}

示例 B(正确示范):
Q: {q1}
Correct reasoning: {good_rationale_1}
Correct answer: {good_answer_1}

(可再加一组错误/正确示例,提高覆盖面)

现在请回答:
Q: {target_question}
Reasoning:
Answer:

工程上常见强化:

  • 在错误示例后加一句“这里错在 X”(点名错误类型),进一步强调“为什么错”
  • 要求输出前先列“避免哪些错误”(类似 checklist)

5) 实操注意事项(很重要)

  1. 必须强标注错误:Incorrect / Wrong / Do not follow,否则模型可能学习到错误模式。
  2. 错误示例要“错得典型但不离谱”:太离谱会没教学价值;太隐蔽又可能误导。
  3. 错误不要太多:通常 1–2 个典型错法足够;过多会稀释正确模式。
  4. 尽量同分布:示例题型、数字规模、问法应与目标任务相近。
  5. 评测要分开做:对算术/事实 QA 的提升常见,但对开放式生成未必有帮助。

6) 和相近方法的区别

  • vs Self-Consistency:后者是“采样多条推理投票”,Contrastive CoT 是“在提示里教你别怎么推”。可组合:先用 contrastive exemplar 约束,再做 self-consistency。
  • vs Critique/Reflexion:Critique 是模型生成后再自我批判修正;Contrastive CoT 是“生成前”用示例塑形。
  • vs Negative examples in finetuning:Contrastive CoT 是纯 prompt 层面的“负样本对比”,不需要训练。

如果你愿意贴一个你的目标任务样例(比如一道算术题或一类事实 QA),我可以帮你构造一对“错误示范 + 正确示范”的 contrastive exemplars,并给出一个可直接用于 few-shot 的完整 prompt。