Consistency-based Self-adaptive Prompting
我是你的 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 自适应)
- 准备一批候选样例集 E(比如 100 道题)。
- 对每个样例 e:
- 用 Zero-shot CoT 提示它“逐步推理”
- 用 Self-Consistency 采样 K 次得到 K 条推理与答案
- 统计答案一致性(agreement),例如:最高频答案占比 = max_count / K
- 按一致性排序,选出 top-M 个高一致样例
- 对每个入选样例,从 K 条推理中挑“代表性/与众数答案一致”的那条推理,作为 exemplar 的 CoT
- 把这些 exemplars 拼成最终 Few-shot CoT prompt
阶段2:用最终 prompt 再做 Self-Consistency 推理
对真正要解的新输入 x:
- 用“阶段1拼好的 few-shot CoT prompt”
- 再跑 Self-Consistency(采样多次、多数投票)
- 输出最终答案
4) 适合与不适合的应用场景
适合
- 有明确最终答案、可投票聚合的任务
- 数学题、逻辑题、选择题、代码题单元测试可过/不过
- 推理链容易不稳定、偶尔“想歪”的任务
- 用一致性筛掉不稳定的 exemplars,减少坏示例带偏
- 你有一批候选样例但不会挑、或挑样例成本高
- COSP 自动挑“模型认为最确定”的那批
- 离线可花算力换稳定性
- 阶段1要对每个候选样例多次采样,成本不低
不适合
- 开放式主观任务(难以定义“答案一致”)
- 写诗、创意文案、开放问答:一致不代表好,且多数投票难定义
- 需要多样性而不是一致性
- 头脑风暴/广告创意:自一致会把输出“收敛”到安全常见答案
- 强依赖外部事实且模型本身知识不足
- 如果没有检索(RAG)支撑,一致性可能只是“一致地胡说”
- 在线低延迟场景
- Self-Consistency 需要多次采样,延迟和成本高
5) 至少 3 个中文实际提示词例子(可直接改)
下面示例都围绕 COSP 的“两个阶段”。你可以把它理解为:阶段1用来“造 prompt”,阶段2用来“用 prompt 解题”。
(注:Self-Consistency 本身是“多次运行同一提示词”的策略,不是单条 prompt 就能完全表达;我会把“单次运行的 prompt 模板”给出来,你按 K 次重复调用并做投票即可。)
例子1:阶段1(对候选样例跑 Zero-shot CoT,用于后续一致性筛选)
用途:对“候选题目 e”生成一条推理与答案(你会对同一题采样多次)。
Prompt 模板(单次采样):
你是一名严谨的解题助手。请对下面问题进行逐步推理,最后只在“最终答案:”后给出一个明确答案(如数字/选项字母/是或否)。
问题:{候选样例题目}
要求:
- 推理过程要完整、步骤清晰;
- 最终答案必须唯一且可用于投票统计;
- 输出格式:
- 推理:…
- 最终答案:…
你怎么用它做 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 解决的具体任务是什么(数学/代码/问答/分类)?