Self-Consistency(自洽性)
原理
CoT 让 AI"想出来"答案,但单次推理可能跑偏。Self-Consistency 的思路很简单:让 AI 用不同方法多想几次,再投票选最多的答案。
这借鉴了"群体智慧"——单次推理有偏差,但多次独立推理后取多数,能显著降低随机错误。
研究数据:在 GSM8K 数学基准上,GPT-4 单次 CoT 准确率 58%,Self-Consistency(5 次采样)可达 78%。
与 CoT 的区别
| 维度 | CoT | Self-Consistency |
|---|---|---|
| 推理次数 | 1 次 | N 次(通常 3-10) |
| 核心思想 | 一步步思考 | 多思路投票 |
| Token 成本 | 低 | 高 N 倍 |
| 准确率提升 | 基线 | +15-25% |
| 适用场景 | 一般复杂 | 高精度要求 |
3 种实现方式
方式 1:单 Prompt 多思路(推荐)
一个 Prompt 里让 AI 用多种思路推理:
请用 3 种不同思路解决以下问题:
1. 正向逐步推理
2. 反向验证
3. 举例枚举
问题:一个水池有进水管 A(3小时注满)和 B(6小时注满),出水管 C(4小时排空),三管同开几小时注满?
每种思路独立完成,最后给出最终答案。
优点:一次调用,成本低 缺点:思路之间可能相互影响(不是真正独立)
方式 2:多次采样取众数
用相同 Prompt 调用 N 次(temperature > 0),取出现最多的答案:
answers = []
for i in range(5):
resp = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}],
temperature=0.7, # 关键:用高温度增加多样性
)
answers.append(extract_answer(resp))
# 取众数
from collections import Counter
final = Counter(answers).most_common(1)[0][0]
优点:真正独立采样 缺点:N 倍 Token 成本
方式 3:分阶段验证
先让 AI 给出初步答案,再让它"自我审查":
第 1 步:用 CoT 解答问题
第 2 步:请用另一种方法验证上述答案是否正确
第 3 步:如果两次结果不一致,分析哪个对,给出最终答案
优点:成本适中(2 次调用) 缺点:第二次验证容易"附和"第一次
实战案例
案例 1:数学题
问题:鸡兔同笼,共 35 个头,94 只脚,鸡兔各几只?
思路 1(方程法):
- 设鸡 x,兔 y
- x + y = 35
- 2x + 4y = 94
- 解得 x=23, y=12
思路 2(假设法):
- 假设全是鸡:35×2=70 只脚
- 多出 94-70=24 只脚
- 每只兔比鸡多 2 只脚
- 兔 = 24/2 = 12,鸡 = 35-12 = 23
思路 3(极端值检验):
- 若全兔:35×4=140 > 94,说明有鸡
- 若全鸡:35×2=70 < 94,说明有兔
- 比例介于两者之间,符合 23 鸡 12 兔
投票:3 种思路都得 23 鸡 12 兔,答案确定。
案例 2:代码 bug 定位
问题:函数在特定输入下返回错误结果
思路 1(正向追踪):从入口追踪变量变化 思路 2(反向推理):从错误结果倒推可能的源头 思路 3(对比法):对比正常 case 和异常 case 的差异
多种思路交叉验证,能发现单思路遗漏的 bug。
案例 3:决策分析
问题:是否应该接受新 offer?
思路 1(理性分析):薪资/成长/风险加权评分 思路 2(情感视角):想象 1 年后是否会后悔 思路 3(机会成本):留下 vs 离开的长期收益对比
多视角思考避免单一维度的盲区。
采样次数的选择
| 采样次数 N | 准确率提升 | Token 成本 | 推荐场景 |
|---|---|---|---|
| 1(纯 CoT) | 基线 | 1x | 简单问题 |
| 3 | +10-15% | 3x | 一般任务 |
| 5 | +15-20% | 5x | 重要决策 |
| 10 | +20-25% | 10x | 高精度需求 |
| 20+ | 边际递减 | 20x+ | 不推荐 |
经验法则:N=5 是性价比最高的选择。
常见坑
坑 1:采样温度太低
temperature=0 时多次采样结果完全相同,失去多样性。 解决:用 temperature=0.5-0.8
坑 2:思路不独立
在单 Prompt 中,AI 容易让后面的思路"附和"前面的。 解决:明确要求"每种思路独立推理,不要参考其他思路",或改用多次 API 调用。
坑 3:答案无法比较
开放式问题(如"写一首诗")无法投票。 解决:Self-Consistency 只适用于有明确答案的问题(数学、逻辑、分类、判断)。
坑 4:成本失控
N=10 意味着 10 倍 Token 成本。 解决:先用 N=1 跑一遍,如果置信度低再升级到 Self-Consistency。
与其他技巧组合
Self-Consistency 可以与其他 Prompt 技巧叠加:
- CoT + Self-Consistency:基础组合
- Few-shot + Self-Consistency:示例引导 + 多次验证
- Role-playing + Self-Consistency:多角色视角投票
- Tree-of-Thoughts (ToT):Self-Consistency 的进阶版,树状探索
何时用 / 何时不用
推荐用:
- 数学计算、逻辑推理
- 代码 bug 定位
- 重要决策(多视角验证)
- 分类、判断题
不推荐:
- 创意写作(没有标准答案)
- 简单问答(杀鸡用牛刀)
- 实时对话(延迟太高)
- 成本敏感场景(Token 消耗大)