Consistency-based Self-adaptive Prompting

prompt提示词2026年6月7日1

我是你的 Prompt 提示词教练,长期做两类事:一是读论文/复现实验,把方法讲成“你今天就能用”的提示词模板;二是做工程落地,把提示词从“偶尔好用”变成“稳定、可控、可评估”的流程(含示例选择、输出约束、自检、A/B、失败兜底等)。

下面按你的要求,解释 Consistency-based Self-adaptive Prompting(COSP, Wan et al., 2023a):它如何用“自一致性(Self-Consistency)”自动构造 Few-shot CoT 提示词,并再次用自一致性推理。


1) COSP 是什么?一句话

先用 Zero-shot CoT + Self-Consistency 在一批候选样例上“生成很多条推理”,挑出“答案高度一致”的样例及其推理作为 Few-shot exemplars,组成最终提示词;再用这个最终提示词对新问题做 Self-Consistency。

它的核心是:让模型自己“筛选出最稳定(高一致)”的示例,从而减少人工挑例、减少低质量链路推理带来的示例污染。


2) 关键组件解释

A. Zero-shot CoT(零样本链式思维)

不提供示例,只用一句类似:

  • “请一步步推理并给出最终答案。”

让模型产生推理过程(CoT)。

B. Self-Consistency(自一致性)

不是只采样一次,而是对同一输入 采样多次(通常设置较高温度/多样性),得到多条推理路径与最终答案,然后用 多数投票/聚合 选出最一致的最终答案。

直观理解:

同一道题让模型“想 20 次”,看它最后更常得到哪个答案;一致性高通常意味着更可靠。

C. High agreement subset(高一致子集)

对每个候选示例(训练/开发集里的题目),用 Self-Consistency 得到一个“答案分布”。
如果某题的答案高度集中(比如 20 次里 18 次都得到同一个答案),说明它:

  • 对模型而言较“确定”
  • 推理链更不容易跑偏
    因此把这类题的(问题 + 高质量推理 + 答案)选出来,作为 few-shot 示例。

3) COSP 的流程(更具体)

可以把 COSP 看成两阶段:

阶段1:自动构造 Few-shot CoT exemplars(Prompt 自适应)

  1. 准备一批候选样例集 E(比如 100 道题)。
  2. 对每个样例 e:
    • 用 Zero-shot CoT 提示它“逐步推理”
    • 用 Self-Consistency 采样 K 次得到 K 条推理与答案
    • 统计答案一致性(agreement),例如:最高频答案占比 = max_count / K
  3. 按一致性排序,选出 top-M 个高一致样例
  4. 对每个入选样例,从 K 条推理中挑“代表性/与众数答案一致”的那条推理,作为 exemplar 的 CoT
  5. 把这些 exemplars 拼成最终 Few-shot CoT prompt

阶段2:用最终 prompt 再做 Self-Consistency 推理

对真正要解的新输入 x:

  • 用“阶段1拼好的 few-shot CoT prompt”
  • 再跑 Self-Consistency(采样多次、多数投票)
  • 输出最终答案

4) 适合与不适合的应用场景

适合

  1. 有明确最终答案、可投票聚合的任务
    • 数学题、逻辑题、选择题、代码题单元测试可过/不过
  2. 推理链容易不稳定、偶尔“想歪”的任务
    • 用一致性筛掉不稳定的 exemplars,减少坏示例带偏
  3. 你有一批候选样例但不会挑、或挑样例成本高
    • COSP 自动挑“模型认为最确定”的那批
  4. 离线可花算力换稳定性
    • 阶段1要对每个候选样例多次采样,成本不低

不适合

  1. 开放式主观任务(难以定义“答案一致”)
    • 写诗、创意文案、开放问答:一致不代表好,且多数投票难定义
  2. 需要多样性而不是一致性
    • 头脑风暴/广告创意:自一致会把输出“收敛”到安全常见答案
  3. 强依赖外部事实且模型本身知识不足
    • 如果没有检索(RAG)支撑,一致性可能只是“一致地胡说”
  4. 在线低延迟场景
    • Self-Consistency 需要多次采样,延迟和成本高

5) 至少 3 个中文实际提示词例子(可直接改)

下面示例都围绕 COSP 的“两个阶段”。你可以把它理解为:阶段1用来“造 prompt”,阶段2用来“用 prompt 解题”。
(注:Self-Consistency 本身是“多次运行同一提示词”的策略,不是单条 prompt 就能完全表达;我会把“单次运行的 prompt 模板”给出来,你按 K 次重复调用并做投票即可。)


例子1:阶段1(对候选样例跑 Zero-shot CoT,用于后续一致性筛选)

用途:对“候选题目 e”生成一条推理与答案(你会对同一题采样多次)。

Prompt 模板(单次采样):

你是一名严谨的解题助手。请对下面问题进行逐步推理,最后只在“最终答案:”后给出一个明确答案(如数字/选项字母/是或否)。

问题:{候选样例题目}

要求:

  1. 推理过程要完整、步骤清晰;
  2. 最终答案必须唯一且可用于投票统计;
  3. 输出格式:
  • 推理:…
  • 最终答案:…

你怎么用它做 COSP:

  • 对同一个 {候选样例题目} 用不同随机种子/温度运行 K 次
  • 收集“最终答案”,算一致性比例
  • 一致性高的样例进入 exemplar 池

例子2:阶段1(把一致性高的样例整理成 Few-shot CoT exemplar)

用途:把“通过筛选的样例”写成最终 prompt 里的示范题格式(你可能要人工或脚本把它们拼起来)。

Exemplar 格式模板(写入最终 prompt):

示例1:
问题:{样例1问题}
推理:{选中的那条推理链(与众数答案一致)}
最终答案:{众数答案}

示例2:
问题:{样例2问题}
推理:{…}
最终答案:{…}

要点:

  • exemplar 的“最终答案”要可投票、清晰
  • 推理链尽量简洁但包含关键步骤,避免冗长噪声
  • 样例之间题型尽量同分布(否则示例迁移效果差)

例子3:阶段2(用“最终 Few-shot CoT prompt”对新问题做推理;再 Self-Consistency)

用途:对新问题 x 做 few-shot CoT 推理。你会对同一个 x 采样多次再投票。

最终推理 Prompt(单次采样):

你是一名严格遵循示例风格的解题助手。请参考上面的示例,逐步推理并给出最终答案。

{这里粘贴通过 COSP 筛出来的示例1…示例M…}

现在请解答:
问题:{新问题}

输出格式:

  • 推理:…
  • 最终答案:…

你怎么用它做 COSP 的第二次自一致:

  • 对同一个 {新问题} 采样 K 次
  • 对“最终答案”投票,输出众数答案(可附带众数占比作为置信度信号)

例子4(可选加强):让模型输出“可投票字段”,便于工程聚合

用途:工程上更稳:要求模型把最终答案放到固定字段,便于脚本解析。

Prompt(单次采样):

请逐步推理,但务必按 JSON 输出,便于统计自一致性。
字段要求:

  • "final": 最终答案(必须短且唯一)
  • "reasoning": 推理过程

问题:{问题}

只输出 JSON,不要输出其他文本。


6) 实践提醒(新手常踩坑)

  • 一致性高不等于正确:它更像“模型的确定性”,不是外部真值。若任务可验证(算数/单测/规则),建议结合验证器。
  • 温度设置影响一致性:温度太低会导致“看似一致但只是重复”;太高会导致答案发散。常见做法:中等温度 + K 次采样。
  • 示例污染:若阶段1生成的 CoT 本身有系统性错误,即使一致也会被选中。最好加一层“可验证检查”(例如算数题用计算器核对)。

如果你希望我把它讲得更“可复现”,我可以给你一个最小可运行的 COSP 工程流程(K、M怎么取、agreement怎么计算、如何从K条推理里选代表推理、以及和RAG/验证器怎么组合)。你想用 COSP 解决的具体任务是什么(数学/代码/问答/分类)?