为什么需要 Self-Consistency
我们已经讲过 CoT(线性推理)、ToT(多路搜索)、Step-back(抽象)、Prompt Chaining(流水线)、Few-shot(示例学习)。它们都在增强推理质量,但有一个共同盲区:
单次推理即使用了 CoT,也可能在某一步走错,导致最终答案错误。
Self-Consistency(Wang et al., 2022, Google Brain)的思路极其朴素:
让模型对同一问题独立推理多次,取多数答案作为最终结果。
这本质上是把"一个人的判断"变成"一群人的投票",用群体智慧抵消个体偏差。论文显示,在 GSM8K 数学题上,Self-Consistency 把 CoT 的准确率从 56% 提升到 74%。
与 CoT、ToT 的本质差异
| 维度 | CoT | Self-Consistency | ToT |
|---|---|---|---|
| 推理路径 | 1 条 | N 条独立 | 树形搜索 |
| 路径关系 | 无 | 互相独立 | 有分支关系 |
| 答案选择 | 直接取唯一答案 | 投票取多数 | 自评选最优 |
| 计算成本 | 1× | N×(通常 5-10×) | 3-5× |
| 适合任务 | 通用推理 | 有唯一解的任务 | 创意/决策 |
| 准确率提升 | 基线 | +15-20% | +10-15% |
关键区别:CoT 是"想一次",Self-Consistency 是"想多次再投票",ToT 是"边想边评估边剪枝"。三者可叠加:每条推理链内部用 CoT,多条链之间用 Self-Consistency。
核心原理
Self-Consistency 基于两个假设:
- 正确答案比错误答案更容易被达到:对数学题,正确答案只有一种,错误答案五花八门。5 次推理中正确答案出现 3 次的概率远高于任一错误答案出现 3 次。
- 高温采样能生成多样推理路径:temperature=0.7-1.0 时,模型每次走不同推理路径,增加覆盖正确路径的概率。
问题:一个班 32 人,男生比女生多 4 人,女生多少人?
推理链 1(正确):(32-4)/2 = 14
推理链 2(正确):女生 x,男生 x+4,x+x+4=32,x=14
推理链 3(错误):32-4 = 28
推理链 4(正确):32/2 - 4/2 = 16-2 = 14
推理链 5(错误):32-4*2 = 24
投票:14 ×3, 28 ×1, 24 ×1 → 最终答案 14
3 条正确路径胜过 2 条错误路径,投票结果正确。
采样参数调优
Self-Consistency 的效果取决于采样多样性:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| temperature | 0.7-1.0 | 太低(<0.5)路径重复无意义,太高(>1.2)推理质量下降 |
| top_p | 0.95 | 配合 temperature 控制多样性 |
| 采样次数 N | 5-10 | N=5 性价比最高,N>10 收益递减 |
| max_tokens | 足够长 | 推理链需完整,截断会导致答案缺失 |
调优经验:
- 数学/逻辑题:temperature=0.7,N=5
- 常识问答:temperature=0.5,N=3(答案空间小,不需太多采样)
- 复杂推理:temperature=1.0,N=10(路径差异大,需更多采样覆盖)
三种投票策略
策略 1:多数投票(Majority Vote)
最简单,取出现次数最多的答案:
from collections import Counter
answers = [14, 14, 28, 14, 24]
result = Counter(answers).most_common(1)[0][0] # 14
适合:数学题、分类题等有唯一解的任务。
策略 2:加权投票(Weighted Vote)
根据推理链的"置信度"加权:
推理链 1:答案 A,置信度 0.9(推理逻辑严密)
推理链 2:答案 B,置信度 0.5(推理有跳跃)
推理链 3:答案 A,置信度 0.7
加权得分:A = 0.9+0.7 = 1.6, B = 0.5 → 最终答案 A
适合:开放性问答,答案质量比数量更重要。
策略 3:一致性过滤(Consistency Filter)
只保留推理链间一致的答案:
5 条推理链 → 答案分布 A×2, B×2, C×1
若无绝对多数(≥50%),标记"低置信度",需人工介入
适合:高风险场景(医疗、法律),宁可不答也不答错。
实战示例:用 Self-Consistency 做数学应用题
请用 Self-Consistency 解决以下数学题。生成 5 条独立推理链。
## 问题
小明买了一些苹果和橘子,苹果每个 3 元,橘子每个 2 元。
他一共花了 30 元,买了 12 个水果。苹果和橘子各多少个?
## 要求
1. 生成 5 条推理链,每条用不同方法(方程法/算术法/试错法/消元法/图示法)
2. 每条独立完成,不参考其他推理链
3. 最后统计答案并投票
5 条推理链输出后:
### 投票结果
推理链 1(方程法):苹果 6,橘子 6
推理链 2(算术法):苹果 6,橘子 6
推理链 3(试错法):苹果 6,橘子 6
推理链 4(消元法):苹果 6,橘子 6
推理链 5(图示法):苹果 6,橘子 6
答案分布:苹果 6 橘子 6 ×5
最终答案:苹果 6 个,橘子 6 个
5 条全一致 = 高置信度。若 4:1 或 3:2,仍取多数但标注"中置信度"。
何时该用 Self-Consistency
✅ 适合
- 数学计算:有唯一正确答案,错误路径分散
- 逻辑推理:前提明确,结论可验证
- 事实问答:答案唯一,可投票
- 代码生成:多个实现方案,取最一致的接口设计
- 分类任务:类别有限,投票有效
❌ 不适合
- 创意写作:没有"正确答案",投票无意义
- 开放对话:答案空间无限,投票分散
- 实时场景:N 次采样耗时 N 倍,延迟敏感场景不适用
- 成本敏感:N=5 意味着 5 倍 API 费用
与其他 Prompt 技巧的叠加
| 组合 | 效果 | 适用场景 |
|---|---|---|
| CoT + Self-Consistency | 每条链用 CoT,多条链投票 | 数学推理(经典组合) |
| Few-shot + Self-Consistency | 示例引导 + 多次采样 | 格式化抽取 |
| Step-back + Self-Consistency | 先抽象原则,多次采样求解 | 科学推理 |
| Chaining + Self-Consistency | 某步用 SC 保证准确 | 流水线关键节点 |
经典组合:CoT + Self-Consistency 是论文原始方案,也是性价比最高的组合。
常见误区
- 误区 1:采样次数越多越好。N>10 后准确率提升趋平,成本线性增长。N=5 是性价比拐点。
- 误区 2:temperature 越高越多样。temperature>1.2 时推理质量崩塌,多样性带来的收益被错误率抵消。
- 误区 3:所有任务都套 SC。创意任务无"正确答案",投票无意义。
- 误区 4:投票只看数量。加权投票在开放性任务中更优。
- 误区 5:SC 能修复 Prompt 缺陷。若 Prompt 本身有歧义,多次采样只会放大歧义。
进阶技巧
- 自适应采样:前 3 次若全一致,提前终止,省 API 费
- 混合模型:用 GPT-4 和 Claude 各采样 3 次,跨模型投票更鲁棒
- 验证器投票:训练一个小模型判断推理链质量,只让高质量链参与投票
- ** Universal SC**:不要求所有链给出相同格式答案,用语义匹配而非字面匹配投票
小结
Self-Consistency 是用算力换准确率的朴素艺术:同一问题多次推理、投票取多数,把单次推理的随机性错误用群体智慧过滤掉。当你面对有唯一解的高价值问题(数学、逻辑、事实问答)时,CoT + Self-Consistency 是最稳的组合拳。
本系列 Prompt 技巧篇至此告一段落。从 CoT 的线性推理,到 ToT 的树形搜索,到 Step-back 的抽象跳跃,到 Chaining 的流水线编排,到 Few-shot 的示例学习,再到 Self-Consistency 的多路投票——这六把武器组合使用,能覆盖 90% 的 LLM 推理场景。下一篇我们将开启新的主题系列。