自洽采样是什么?让 AI 多答几次再投票,一道题的正确率上一个台阶(2026实战)

开头:一道题的两种运气

上周写幻觉治理那篇文章时,提到过一条自查思路,但没展开。这篇把「让模型多答几次再投票」这个套路单独讲清楚,它有个正式名字:自洽采样,Self-Consistency,出自 2022 年 3 月 Google Brain 团队的论文《Self-Consistency Improves Chain of Thought Reasoning in Language Models》。

先看它治什么病。思维链 prompting 让模型把中间步骤写出来,数学题的准确率确实上去了。但每次只采样一条推理路径,意味着这道题的对错押在一次回答上:模型这次脑子走岔了,答案就错了。同一个模型、同一道题、同一个提示词,答五次可能三个对两个错,你每次只抽一次,等于抽盲盒。

自洽采样的想法很朴素:多抽几次。让模型对同一道题独立地想五条、十条甚至四十条不同的推理路径,每条路径各得一个最终答案,然后做多数投票,哪个答案出现次数最多就选哪个。论文的原话是:一道复杂的推理题通常有多种思考方式,但正确答案往往是唯一的。错的大多是错的各不相同,对的都是对的同一个样,票数自然会向正确答案集中。

方法只有三步

第一步,写一个思维链提示词,要求模型先推理再给答案。第二步,把同一个提示词发给模型 N 次。注意 N 次之间是独立的,互相看不到,这正是「自洽」的含义:各自独立想,看结论能不能对上。第三步,抽取每条路径末尾的最终答案(一般是最后一行的数字或选项),数票,取众数。

论文里怎么设采样参数的,直接照抄:UL2-20B 和 LaMDA-137B 用 temperature 0.5 加 top-k 40 截断,PaLM-540B 用 temperature 0.7 加 top-k 40,GPT-3 用 temperature 0.7 不截断。采样路径数从 1 到 40 做了扫描,结论是路径越多越好,40 条时表现最稳。论文还有一个对照实验:自洽采样 40 条路径,赢了换 40 个不同提示词的 ensemble(prompt permutation),说明收益主要来自「多路径独立推理」而不是「多提示词」。

投票的对象是最终答案,不是推理路径本身。两条路径写得天差地别没关系,只要答案都是 42,就算两票。这一点实现时要注意:需要从输出里稳定地抽取最终答案,数字题抽数字,选择题抽选项字母,抽不出来就丢弃这条路径。

效果:一张表看懂

论文摘要里给了四个算术和常识推理基准的提升幅度:GSM8K +17.9%,SVAMP +11.0%,AQuA +12.2%,StrategyQA +6.4%,ARC-challenge +3.9%。这是论文原话,一手数据。

提升不是无条件的,三个前提值得记:模型能力要够。小模型采样一百条也是错的,投票只会放大自信的错误。论文里 UL2-20B 这种小模型收益就很小。任务要有唯一答案。开放题、创作题没法投票。代码生成是半例外:最终答案(能否通过测试)可以投票,但代价是每条路径都要跑测试。题目要够难。模型一次就答对的简单题,采样十次成本翻十倍,收益接近零。

2026 年这个套路变成什么样了

论文是 2022 年的,方法本身只有三步,但它后来的演化值得单独讲。今天它以三种形态存在。

第一种:自己写循环。API 用户把「采样多次加投票」写在应用层。OpenAI 兼容接口大多支持 n 参数,一次请求返回多个候选。但要注意 API 不是为这个场景设计的:n 个候选来自一次请求内部,有些平台的 n 只是并行采样没有独立推理链;更稳的做法是自己发 N 次独立请求,每条路径独立、参数一致。另外推理模型的输出 token 是计费的,五条长推理链的成本是单条的五倍,这个账要提前算。

限速是第二个现实约束。多平台按账户充值金额限 RPM 和 TPM,一次并发十条推理请求,普通账户会被 429 拒。所以实用的自洽采样往往是 N 等于 5 或者 10,不是论文里的 40。N 的选择有讲究:任务越难、单次准确率越不稳定,N 越大越有效;简单题 3 次就够。可以先测单次准确率,再决定预算。

第二种:内置进推理强度参数。今天主流推理模型把「多想」做成了官方参数。Kimi K3.1 Pro 用 reasoning_effort 控制,三档 low、high、max,默认 max,档位越高推理 token 越多,原理和 思考模式的预算是同一个方向。思考模型的高推理档,内部机制不同,但效果方向一致:把更多计算花在推理阶段。这是自洽采样的「官方化」形态:你在参数里调的是同一个东西的抽象版本。

第三种:作为 Agent 代码里的一个投票节点。复杂 Agent 系统里,关键决策点(工具选择、路线规划)用自洽采样作为兜底:同一个决策请求 N 次,取多数。论文里那个「多数投票」的公式,在 Agent 代码里就是一个 Counter 加一个 argmax。

一个实战配方

拿数学题做例子。提示词部分要加一句硬性要求:最后一行必须是「答案:数字」这种固定格式,方便抽取。采样部分,temperature 0.7(和论文一致),N 先取 5,代码里用两个循环:一个发请求(存 reasoning 和最终答案),一个数票。投票部分就是 Counter 对最终答案计数。三个工程细节:去重,五条路径里有两个一模一样的答案算两票还是一票?论文没有区分,默认算两票。异常处理,有一条路径没抽到答案就丢弃,别让格式错误污染投票。日志,把五条推理路径都存下来,错了还能复盘是哪条路径把票带偏的。

结尾:便宜、笨,但有效的三个词

自洽采样和推理模型、推理模型选型这些话题的关系,本质上是同一枚硬币的两面:一个把「多想」放进模型内部,一个把「多想」放在应用层。(写论文的时候它确实只有一个公式),但 2022 年到今天它一直活着,原因是它把「模型不确定性」这个缺点变成了「多样性」这个优点。它不挑模型、不挑平台,改十行代码就能用。用在什么场景,取决于你对这道题的重视程度:值得多花 5 倍钱的题,就值得多问 5 次。

发表评论