Level 325 分钟

自洽性验证

通过多次采样和投票提升输出可靠性

自洽性验证:多次采样,共识决策

什么是自洽性?

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年奥运会在哪个城市举办?

  1. 设计采样策略
  2. 模拟 5 次采样结果
  3. 计算置信度
  4. 给出最终答案

小结

  • 自洽性通过多次采样提升可靠性
  • 适用于有确定答案的任务
  • 置信度帮助评估结果质量
  • 权衡成本与可靠性

恭喜完成 Level 3!下一阶段进入 Tools & Skills。

加载中...