自洽性验证:多次采样,共识决策
什么是自洽性?
Self-Consistency 的核心思想:
- •对同一问题多次采样
- •收集多个推理路径
- •通过投票选出最可靠答案
类比:多位专家独立判断,取共识结果。
为什么需要自洽性?
单次生成的问题:
- •可能走入错误的推理路径
- •结果有随机性
- •无法评估答案可信度
自洽性的优势:
- •减少随机错误
- •提供置信度参考
- •发现潜在问题
自洽性工作流程
相同问题
↓
[生成答案1] → 答案A
[生成答案2] → 答案A
[生成答案3] → 答案B
[生成答案4] → 答案A
[生成答案5] → 答案A
↓
投票统计:A=4票, B=1票
↓
最终答案:A(置信度 80%)
基本实现
步骤1:多次采样
def get_multiple_answers(question, n=5):
answers = []
for i in range(n):
# 每次使用相同提示,但设置 temperature > 0
answer = call_llm(question, temperature=0.7)
answers.append(answer)
return answers
步骤2:答案归一化
不同表述的相同答案统一处理:
- •"42" = "四十二" = "42.0"
- •"是的" = "是" = "正确"
步骤3:投票决策
from collections import Counter
def vote(answers):
normalized = [normalize(a) for a in answers]
votes = Counter(normalized)
winner = votes.most_common(1)[0]
return winner[0], winner[1] / len(answers)
实战示例
数学问题验证
问题:小明有 15 个苹果,给了小红 7 个,又买了 5 个,问现在有几个?
采样结果:
- 回答1: 13个 (15-7+5=13) ✓
- 回答2: 13个 ✓
- 回答3: 23个 (15+7+5=27...计算错误)
- 回答4: 13个 ✓
- 回答5: 13个 ✓
投票结果:13个,置信度 80%
分类任务验证
问题:这条评论是正面还是负面?"产品还行,就是物流太慢了"
采样结果:
- 回答1: 中性
- 回答2: 负面
- 回答3: 中性
- 回答4: 中性
- 回答5: 负面
投票结果:中性,置信度 60%
⚠️ 置信度较低,可能需要人工复核
高级技巧
1. 加权投票
根据推理过程的质量加权:
- 推理步骤完整:权重 1.0
- 推理步骤部分缺失:权重 0.7
- 无推理直接给答案:权重 0.3
2. 置信度阈值
if confidence >= 0.8:
return answer # 高置信度,直接使用
elif confidence >= 0.5:
return f"{answer}(置信度一般,建议验证)"
else:
return "结果不确定,需要更多信息或人工判断"
3. 分歧分析
当出现明显分歧时,分析原因:
如果投票结果分散(如 2:2:1),输出:
- 所有候选答案
- 各自的推理路径
- 让用户判断或补充信息
使用场景
| 场景 | 适用性 | 建议采样数 | |-----|-------|-----------| | 数学计算 | ⭐⭐⭐⭐⭐ | 3-5 | | 事实问答 | ⭐⭐⭐⭐ | 3-5 | | 分类任务 | ⭐⭐⭐⭐ | 5-7 | | 创意写作 | ⭐(不适用) | - | | 开放问题 | ⭐⭐ | - |
成本考量
- •多次采样 = 多次 API 调用
- •建议:重要决策使用,日常任务可省略
- •优化:先用低成本模型采样,高置信度直接用
练习
实现一个自洽性验证:
问题:2024年奥运会在哪个城市举办?
- •设计采样策略
- •模拟 5 次采样结果
- •计算置信度
- •给出最终答案
小结
- •自洽性通过多次采样提升可靠性
- •适用于有确定答案的任务
- •置信度帮助评估结果质量
- •权衡成本与可靠性
恭喜完成 Level 3!下一阶段进入 Tools & Skills。