模型无法说「我不知道」,因为 RLHF 训练中二进制评分(对=1,错=0)使 abstaining 期望收益永远为 0。论文指出幻觉持续不是因为对齐失败,而是对齐在错误目标上成功了。
每个尝试让模型说"我不知道"的团队都会发现同样的问题:它会说一周,然后故态复萌;或者它一直说,变成了一个没用的东西。这两种结果有相同的原因,而这个原因不是提示词(prompt)。
Kalai、Nachum、Vempala 和 Zhang 在《为什么语言模型会产生幻觉》(2025)中清晰地阐述了这个论点。考虑一道模型答对概率为 q 的问题。在二元评分下——正确得一分,否则得零分,这也是几乎所有基准测试和大多数人工评分者的评分方式——猜测的期望得分是 q,而弃答的期望得分是零。对于任何 q > 0 的情况,猜测都是更优选择。
现在,用大致按照上述评分方式收集的人类反馈偏好,以及完全按照这种方式打分的基准测试,来对模型进行强化学习迭代训练。经过多次迭代后,你会得到一个在训练过程中被系统性地训练掉了"含糊其辞"能力的模型。这篇论文的框架是:幻觉在后训练阶段持续存在,不是因为对齐失败了,而是因为对齐在它被赋予的目标上成功了,而该目标中充斥着二元评分者。
这就是为什么仅靠提示词的方法会衰减。你在推理时要求的,是在整个训练过程中都被惩罚的行为。这是可能的——分布不是一堵墙——但你必须让弃答在模型的局部目标中有价值,而你在推理时唯一能用的杠杆是提示词中隐含的评分规则。
这篇论文建议的做法——而且它作为一种提示技术确实有效,因为它改变了上下文中"好答案"的含义——是明确声明置信度阈值和惩罚。
选择一个阈值 t——低于该置信度时你宁可什么也不要得到。使 t 成为正确分界线的评分规则是:正确答案得 +1 分,弃答得 0 分,错误答案得 -t/(1-t) 分。当 t = 0.75 时,惩罚是 3;当 t = 0.9 时,惩罚是 9。把这个算术放进提示词里,而不是"请谨慎"这样的词:
Only answer if you are more than 75% confident. Scoring for this task:
a correct answer is worth +1, "I don't know" is worth 0, and an
incorrect answer is worth -3. Answering when unsure loses points.
If you cannot meet the threshold, reply exactly:
INSUFFICIENT_EVIDENCE: <the one fact you would need>
这里有两点在起作用,而且都是承重结构。数字使得弃答在模型进行推理的框架内成为一个正期望值的行动。而精确要求的 token 使得弃答可以被机器检测,这样你就可以测量它、路由它、统计它——用散文自由表达的拒绝在你的指标中是看不见的。
缺失事实的命名比看起来更重要。它把死胡同变成了检索查询,在接地系统中,它通常是把弃答转化为第二轮答案的关键。
除了评分规则之外,有少量框架能够可靠地改变行为,它们都通过消除对答案的隐性需求来发挥作用:
将弃答作为一个枚举选项,而不是一种缺失。如果输出模式是一个包含 UNKNOWN 的枚举,模型就是在选项之间做选择,而不是未能产生一个答案。结构化输出在这里是一个比指令文本强得多的杠杆。
将提取与回答分离。先要求证据片段,然后再在这些片段的条件下给出答案。空的证据列表比拒绝对模型来说更容易产生,而且它使拒绝成为一种结果而不是一个决定。
说出接下来会发生什么。"如果你不确定,请说出来,问题将被路由给专家处理"比单纯的禁止表现更好,因为它提供了一种完成方式——在这种完成方式中,不回答仍然是有帮助的。
不要把它和一个要求专业性的人设叠加起来。"你是一位世界级专家"和"承认不确定性"是直接冲突的,而人设通常会胜出。
有一些已发表的研究是在训练层面而非提示层面来解决这个问题。Yin 等人的《SelfAware》(2023)构建了一个真正无法回答的问题基准,以测试模型是否知道自己不知道什么;R-Tuning(Zhang 等人,2024)在拒绝感知数据上进行微调,教模型在训练过程中答错的子集上弃答。Feng 等人 2024 年的综述收集了这个系列。如果你拥有微调能力,这是上述一切的持久版本。
更强的架构不要求模型做决定。它在模型外部计算一个置信度信号并在其上设置阈值,这意味着弃答策略是一个你可以调优的数字,而不是一个你希望它在下次模型更新后还能存活的短语。
def answer_or_abstain(question, k=5, agree_threshold=0.6):
"""Sample k answers; abstain when they do not agree.
The self-consistency signal, used as an abstention gate."""
samples = [call_model(question, temperature=0.7) for _ in range(k)]
clusters = cluster_by_entailment(samples) # semantic, not string equality
top = max(clusters, key=len)
agreement = len(top) / k
if agreement < agree_threshold:
return {"abstain": True, "agreement": agreement, "samples": samples}
return {"answer": top[0], "agreement": agreement}
这是校准页面上描述的语义熵和 SelfCheckGPT 系列工作的弃答面:采样答案的不一致是捏造的签名,因为捏造的细节是从分布的平坦区域采样的,而记忆化的细节不是。它花费 k 倍的 token 成本,这是目前发布的最可靠的免知识检测器的真实价格。
对于更强的保证,共形预测是正确的框架。给定一个校准集,它可以将任何置信度分数转换为阈值,并对已回答项目中的错误率提供分布无关的边界——Quach 等人的《共形语言建模》(2024)为生成工作推导出了这一点。保证的质量取决于可交换性假设,而你的流量会在输入分布发生变化的那一天破坏这个假设,所以要按计划重新校准。
一张图决定了弃答策略是否有效,而不是"弃答率前与后"。扫过阈值并绘制:
x 轴:覆盖率——系统回答而非弃答的输入比例,从 0 到 1。
y 轴:风险——仅在已回答项目中的错误率。这才是重要的数字,而裸准确率数字会毁掉它。
一个有用的置信度信号产生一条随覆盖率上升而上升的曲线:你弃答的项目与你本会答错的项目不成比例地重叠。一个无用的信号在基础错误率处产生一条水平线——你在随机弃答,用答案换来了什么也没有。大多数仅靠提示词的方法都是这个结果,而且除非你用这种方式绘制,否则它是看不见的。
报告整条曲线,然后从业务角度选择操作点:"在 80% 覆盖率下,已回答项目的错误率为 X"是一句产品负责人可以据此行动的话。而且要注意另一端——过度弃答是真实存在的成本,一个在本可以回答的问题上含糊其辞的模型,是从相反方向到达正当工作被拒绝所描述的失败状态的。
k 次采样一致门不需要对同一个昂贵的模型调用 k 次;来自不同家族的更便宜的模型通常是一个更好的分歧检测器,恰恰因为它的错误相关性更低。Multigrid 的按模型 token 定价是这项算术的输入。
Why LLMs Hallucinate: The Mechanical Explanation
Confidence and Calibration: Does the Model Know It's Wrong?
Refusals: When Safety Training Blocks Legitimate Work