我们都曾遇到过这样的情况:向人工智能(AI)提问,却得到一个听起来自信满满,实则完全错误的答案。与人类不同,当不确定时,我们会自然地说“我不确定”,而大型语言模型(LLM)往往感到有义务生成一些东西——即使它们不应该。解决这个问题的办法出人意料地简单:明确地给予你的 AI 承认不确定性的许可。这不仅关乎技术层面的准确性,更关乎构建具有良好“性格”的 AI 系统。
强制回答的问题: LLM的幻觉与不确定性
LLM的幻觉(Hallucination)是当前AI领域面临的一大挑战。它们指的是模型在没有充分证据的情况下,生成看似合理但实际上错误的或虚构的信息。造成这一现象的原因有很多,其中一个关键因素就是模型缺乏在不确定情况下拒绝回答的机制。Anthropic 的 Amanda Askell 在一次 prompt 工程圆桌会议上强调,大多数人与 LLM 交互时存在一个关键疏忽:缺乏处理意外情况的明确指令。如果没有明确的指导,模型通常会强行给出一个答案——即使问题毫无意义或超出它们的知识范围。
Askell 举了一个令人印象深刻的例子:想象一下,要求一个 LLM 分析图表,但实际上向它展示了一张山羊的照片。如果没有明确的指导,模型可能仍然会试图在山羊图像中找到“类似图表”的特征,产生荒谬的结果,而不是指出明显的错配。这突显了 LLM 在面对超出其训练范围或存在歧义的输入时,倾向于生成不准确或虚假信息的倾向。这种“强行回答”的机制,实际上是LLM为了避免“沉默”,而进行的创造性“脑补”。
为了更好地理解这个问题,我们可以将其类比于人类的对话。如果有人问你一个你完全不了解的问题,你会怎么做?大部分人会选择坦诚地说“我不知道”,或者“我不太清楚,你可以去查一下相关资料”。但 LLM 在默认情况下,并没有这种“认错”的机制。它们被设计成尽可能地提供答案,即使这个答案是错误的。
构建“逃生舱”:提示工程中的应对策略
解决LLM的幻觉问题,一个简单有效的方案是在提示工程(Prompt Engineering)中构建一个“逃生舱”。Askell 建议明确地告诉模型,当遇到超出其能力范围的事情时该怎么做:
- “如果你不确定答案,请回答‘我没有足够的信息来可靠地回答’。”
- “如果问题包含不正确的假设,请在尝试回答之前指出这些假设。”
- “当面临模糊的输入时,在继续之前解释可能的解释。”
- “如果发生奇怪的事情,你不确定该怎么做,只需输出
<unsure>
。”
例如,在要求模型生成一篇关于“量子计算机在农业中的应用”的文章时,我们可以添加以下指令:“如果你对量子计算机或农业领域知识有限,请明确声明,并说明你的局限性。” 这样,如果模型缺乏相关知识,它就不会胡编乱造,而是会诚实地承认自己的不足。
这种方法不仅可以防止LLM的幻觉,还可以通过浮出问题案例以供审查来提高数据质量。通过分析模型无法回答的问题,我们可以识别模型知识库中的差距,并针对性地进行改进。这对于持续优化模型的性能至关重要。
超越单个提示:Y Combinator 的 “Complaint Field” 解决方案
Y Combinator 的管理合伙人 Jared Friedman 在他们内部的工具中进一步扩展了这个概念。他们没有依赖用户来制作完美的提示,而是将不确定性处理直接构建到他们的 LLM 响应格式中。这意味着给予模型一个专门的空间来报告它何时遇到有问题的提示或缺乏足够的信息。
Friedman 解释说,这意味着在响应格式中,给予模型一种能力,使其能够向你(开发者)“抱怨”,你给它提供了令人困惑或不充分的信息,它不知道该怎么做。“在响应格式中,我们赋予它一部分响应本质上是对你(开发者)的抱怨的能力——你给了它令人困惑或不充分的信息,它不知道该怎么做。我们在内部称之为调试信息……它最终就像你(代理开发者)必须完成的待办事项清单。这真是令人兴奋的事情。”
例如,他们的LLM 输出结果可能包含以下字段:
{
"answer": "The answer to your question is...",
"debug_info": {
"error_type": "Insufficient Information",
"error_message": "The question requires knowledge of a specific financial regulation that I am not trained on."
}
}
这里的 “debug_info” 字段就扮演着 “Complaint Field” 的角色。它可以让开发者快速识别模型遇到的问题,并进行相应的调整。这种做法将 LLM 从一个简单的响应生成器转变为系统改进中的积极协作者。调试信息浮现了可能导致幻觉的边缘案例和歧义。
为何至关重要:信任、合作与持续改进
允许 LLM 说“我不知道”不仅仅是为了技术上的准确性,更是为了建立具有良好“性格”的 AI 系统——那些明智、周到且诚实地对待自身局限性的系统。
这样做的好处远远不止于防止错误的答案:
- 提高信任度: 当 AI 透明地承认其局限性时,用户会更容易信任它。透明度是建立信任的关键。如果用户知道 AI 会在不确定的情况下承认自己的不足,他们就会更放心地使用 AI 系统。
- 更好的合作: 基于现实期望的合作。当人们对 AI 的能力有现实的期望时,他们就能更好地与 AI 合作。如果人们期望 AI 总是给出完美的答案,他们可能会对 AI 的错误感到失望,并失去对 AI 的信任。
- 持续改进: 通过系统性的反馈循环。通过分析 LLM 报告的错误和不确定性,开发者可以识别模型需要改进的领域,并进行相应的调整。这种持续的反馈循环是提高 AI 系统性能的关键。
- 减少LLM的幻觉: 在生产系统中。通过允许 LLM 承认自己的局限性,开发者可以减少 LLM 在生产系统中产生幻觉的风险。这对于确保 AI 系统的可靠性和安全性至关重要。
例如,在医疗诊断领域,一个诚实地承认自己不确定性的 AI 系统,远比一个给出错误诊断的 AI 系统更有价值。医生可以根据 AI 提供的“我不知道”的信息,采取进一步的检查和诊断措施,避免误诊和漏诊。
背后的哲学:AI 的“性格”培养
Askell 的方法反映了她关于 AI 发展的更广泛的哲学。凭借她的哲学背景,她将提示工程视为一种培养具有良好“性格”的 AI 的练习——系统是谨慎而慈善的,而不仅仅是聪明的。她的测试哲学体现了这一点:“我认为我永远不信任模型,然后我只是锤击它。” 她没有假设可靠性,而是不断探测故障点。 这种方法强调了在 AI 开发中道德和社会责任的重要性。
一个具有良好“性格”的 AI 系统,应该具备以下特征:
- 诚实: 能够诚实地承认自己的局限性,避免生成虚假或不准确的信息。
- 谨慎: 在不确定的情况下,避免给出草率的结论,而是选择保守地报告不确定性。
- 透明: 能够向用户解释自己的推理过程,并说明自己做出决策的依据。
- 负责: 对自己的行为负责,并承担因自己的行为造成的后果。
如何实践:构建可靠的 AI 系统
无论你是在制作单个提示还是构建生产系统,原理都是一样的:明确地给予你的 AI 承认不确定性的许可。有时候,AI 可以做的最有帮助的事情就是认识到它何时无法提供帮助。
以下是一些可以在实践中应用的方法:
- 在提示中添加明确的指令: 在你的提示中,明确地告诉 LLM 在不确定的情况下该怎么做。例如:“如果你不确定答案,请回答‘我没有足够的信息来可靠地回答’。”
- 构建 “Complaint Field”: 在你的 LLM 响应格式中,添加一个专门的字段,让模型可以报告它遇到的问题和不确定性。
- 持续测试和改进: 持续测试你的 AI 系统,并分析模型报告的错误和不确定性。根据测试结果,改进你的提示和模型,提高 AI 系统的性能。
- 注重数据质量: 高质量的数据是训练可靠的 AI 系统的基础。确保你的训练数据准确、完整和一致。
- 采用人类反馈: 利用人类反馈来改进你的 AI 系统。让人类评估 AI 系统的输出,并提供反馈意见。
总结:拥抱不确定性,构建更值得信任的 AI
这代表了我们对待人机交互方式的根本转变——从期望完美的答案到构建了解其局限性且不害怕承认这些局限性的系统。允许 LLM 说“我不知道”不仅关乎技术层面的改进,更关乎构建更值得信任、更可靠的 AI 系统。这种以人为本的 AI 开发方法,将有助于我们更好地利用 AI 的潜力,为人类社会创造更大的价值。
下次当你对一个自信但错误的 AI 答案感到沮丧时,请记住:你可能只需要给它许可说“我不知道”。拥抱LLM的幻觉,实际上也是接受了AI发展过程中的必然挑战,并在挑战中不断进步。只有当我们允许AI拥有“拒绝”的权利,才能真正建立起一个值得信赖、负责任的AI未来。