Claude 给出一个答案,听起来非常自信、措辞专业,但你一查发现关键事实是错的:把 API 函数签名写反了、把 2024 年的旧政策当成现行的、或者编了一个不存在的库名。这种”自信地说错”是所有大语言模型的已知局限,也就是 Anthropic 官方文档里说的 hallucination(幻觉)。
最快的修法: 把真正的原文贴进对话,让 Claude 只根据原文回答,并明确允许它说”我没有足够的信息”。这一招就能解决绝大多数情况,因为多数错误答案来自模型在凭训练记忆推测,而不是在读你给的事实。“换个更聪明的模型”这个第一反应通常没用:同样的错误在 Opus 4.7 上照样出现——只要模型没拿到正确的 grounding 数据。先诊断,再修。
你属于哪一类?
动手之前,先把你看到的症状对到最可能的原因。
| 你看到的症状 | 最可能的原因 | 跳转 |
|---|---|---|
| 答案引用了一个不存在的 API / 版本 | 没给 grounding 文档,在凭训练记忆答 | Step 1 |
| 它忘了你在长会话前面贴过的事实 | 上下文被挤出 attention | Step 3 |
| 它宁可猜也不肯说不知道 | System prompt 鼓励”helpful”压过”accurate” | Step 2 |
| 它”讲解”了一个根本不存在的 API / 参数 | 你的问题本身有错误前提 | 原因 4 |
| 中英术语混着问时细节就乱 | 多语言术语不一致 | 原因 5 |
| 难题上又慢又浅、还跳步 | 模型 / 模式与任务不匹配 | Step 6 |
常见原因
按命中率从高到低。
1. 没给 grounding 文档,模型在凭训练记忆回答
最常见。你问”Stripe 2026 年新加的 Adaptive Pricing 怎么用?“——如果你不贴文档,Claude 只能根据训练截止日的记忆去推测,编一个看起来合理但完全错的 API 出来。
如何判断: 让 Claude 在回答末尾加一句”My source for this is:“。如果它说”based on training data”或”通常情况下”,就是在凭记忆猜。
2. 上下文窗口被挤满,关键事实被截断
长会话里,早期贴的一段规范文档可能因为后面不断灌入日志和代码而失去优先级。Sonnet 4.6 和 Opus 4.7 现在都是 1M token 窗口(截至 2026 年 6 月),Haiku 4.5 是 200K,所以这种情况比以前少见了;但一个真的超长的会话、或者反复重贴,仍可能把你在意的那条事实埋掉。
如何判断: 让 Claude 逐字复述早期那段事实。如果复述偏差大或完全忘了,就是这种情况。
3. System Prompt 鼓励”helpful”压过”accurate”
默认 Claude 倾向于”给出有用回答”,遇到不确定的事实更倾向于”猜一个看起来对的”,而不是”承认不知道”。
如何判断: 直接问”你确定吗?请如实给出置信度”。如果它立刻改口,说明此前在硬猜。
4. 问题本身有错误前提
“Python 的 urllib.fetch 怎么用?“——Python 没有 urllib.fetch,但 Claude 可能不指出错误,而是顺着你的话编一个。
如何判断: 你的问题里是否假设了某个不一定存在的 API / 概念 / 配置项?
5. 多语言混合 / 术语不一致
用中文问技术问题但夹了英文术语,可能让 Claude 在中文语料和英文语料之间摇摆,导致细节错乱。
如何判断: 换成单一语言重问同一题,看答案是否变准。
6. 模型或模式与任务不匹配
复杂的多步问题用一个又快又简短的模型,或者简单查询却套上重型推理,都会出错。Haiku 4.5 又快又便宜,但别指望它做深度多步推理;那种活该用 Opus 4.7 配 Extended Thinking。
如何判断: 打开消息框旁边的模型选择器,对照任务复杂度看你当前用的是哪个模型。
最短修复路径
按 ROI 排序,前 3 步通常能消掉绝大多数错误。这些直接对应 Anthropic 官方 Reduce hallucinations 文档里的技巧。
Step 1:贴原文,强制 grounding
最有效的一招。不要让 Claude 凭记忆,把相关原文贴进来并限定它只用这段文字。Anthropic 把这叫 external knowledge restriction(限制外部知识)加 use direct quotes for factual grounding(用原文引用做事实锚定)。
[贴 Stripe API 文档原文 200-500 字]
只根据上面的文档回答:Adaptive Pricing 怎么 enable?
要求:
- 只能用文档里出现过的字段名和 API endpoint。
- 如果文档没明说,必须回答 "the document doesn't say"。
对于长原文(Anthropic 给的阈值大约是 >20k token),加一步”先抽引用”,让答案锚在真实文字上:
1. 先从文档里抽出与我问题最相关的原文引用。
如果一条都找不到,就说 "No relevant quotes found"。
2. 然后只用这些引用作答,并按编号标注引用。
Step 2:System Prompt 加”反过度自信”指令
这就是 Anthropic 的”allow Claude to say I don’t know”(允许 Claude 说不知道)技巧的显式版本。在对话开头放一次即可(或者放进 Project 的自定义指令,让每个会话都继承)。
你是一个严谨的助手。规则:
1. 任何不确定的具体事实(数字、版本号、API 名)必须前缀 "[unverified]"。
2. 不能 100% 确定时,必须说"我没有足够的信息,建议你查 X 文档",
而不是硬猜。
3. 不要为了显得有帮助而编造细节。
4. 引用任何函数名或配置项,必须能在我贴的代码或文档里找到。
Step 3:开新会话,只带必要 context
长会话会”自我中毒”:前面一个错误答案被反复引用、不断强化。关掉它,开一个新会话,只贴你需要的事实,再问一遍。新会话明显更准,因为没有陈旧内容在抢占 attention。
Step 4:用第二个模型交叉验证
Claude 答完后,把同一个问题发给另一个模型(GPT-5.5、Gemini 3.1 Pro)或同一模型的另一个会话:
独立问问:[原问题]
请自行作答;不要假设之前任何答案是对的。
对比两者。分歧的地方,就是至少有一方在猜的地方。
Step 5:让 Claude 自评置信度
这是 Anthropic verify with citations(用引用核验)的轻量版。
对上面的回答,逐条评估每个事实陈述的置信度:
- 高(>95%,能在我提供的资料里找到原文)
- 中(不确定,但符合一般经验)
- 低(猜测,需要核实)
对每条"高",附上支持它的那行原文引用。
只采纳带真实引用的”高”。
Step 6:让模型和模式匹配任务
- 复杂多步推理:Opus 4.7 配 Extended Thinking 开关(Pro / Max 下底部工具栏里的大脑图标)。
- 超长原文文档:用 Sonnet 4.6 或 Opus 4.7(1M token 窗口),而不是 Haiku 4.5(200K)。
- 对同一份语料反复做事实检索:建一个 Claude Project,把文档作为 Knowledge 上传,让每个会话自动 grounding,而不是每次往纯聊天里重贴。
如何确认已修好
别只因为语气更自信就放心,要核验:
- 来源检查。 每条关键事实现在都能追溯到你贴的原文引用,而不是”基于训练数据”。
- 在干净会话里重问。 开新会话,只贴原文,再问一遍。一个正确且有依据的答案会稳定复现;猜测一般会漂移。
- 挑一条外部抽查。 拿一条关键事实去官方文档或状态页对一下。如果它成立、其余又都有引用支撑,就算修好了。
预防建议
- 对所有”具体数字 / 版本号 / API 名 / 函数签名”默认不信任,自己对照原文核实。
- 维护一份常用领域的”事实包”(API 文档关键片段、内部规范),重要对话直接粘贴,或一次性传进某个 Project 的 Knowledge。
- System Prompt 里固定加”不确定就说不确定”,作为 baseline。
- 把 Claude 当 senior pair-programmer 而非 oracle:它给草稿,你做校对。
- 模型按任务复杂度匹配,别一上来就用最贵的,也别为省钱用最便宜的处理复杂任务。
常见问题
换成 Opus 4.7 是不是就不出错了? 通常单靠它不行。如果原因是缺 grounding 数据,更聪明的模型只会把错误答得更流畅。先修 grounding(Step 1);只有遇到真正难的推理时才升级模型(Step 6)。
Claude 为什么会编出不存在的库名或 API 方法? 这是典型的幻觉:缺真实参考时,模型会预测出”听起来合理”的 token。把它限定在你贴的文档里、并允许它说”不知道”(Step 1 和 Step 2),就是阻止它的办法。
Claude 里有没有让它更准的设置? 没有单一的”准确度开关”。最接近的几个杠杆是:处理难推理时的 Extended Thinking 开关、用来 grounding 的带 Knowledge 的 Project、以及允许它表达不确定的 system prompt。表现来自你怎么提示和锚定,而不是某个隐藏开关。
同一个会话里它前面还对,后面就错了,为什么? 长会话会埋掉前面的事实,还会强化之前的错误。开一个新会话,只带你需要的事实(Step 3),别在被污染的会话里继续争。
怎么让 Claude 在不知道时承认不知道? 明确给它许可。在 system prompt 或 Project 指令里加一条”如果信息不足,就直说,不要猜”。这就是 Anthropic 文档里的”allow Claude to say I don’t know”技巧,能切实减少编造。