Appearance
8.5.1 RAG 生成阶段最常见的错误有哪些?
先给结论:RAG 生成阶段最常见的错误,不只是“胡编乱造”。更常见也更麻烦的,往往是:答非所问、证据选错、把推测说成事实、引用不忠实、只答对一半、忽略限制条件。
这些错误之所以值得特别重视,是因为它们很多时候都不是完全离谱的错,而是:
- 看起来像对
- 也确实引用了一些材料
- 但关键结论还是不稳
这类错误比纯粹的“完全瞎答”更难发现,也更容易误导用户。
一、最常见的几类生成错误
1. 答非所问
模型表面上围绕同一主题回答了很多内容,但并没有真正回答当前问题。
例如用户问的是:
- 某条规则在什么条件下生效
模型却回答成了:
- 这条规则的一般背景介绍
这类错误往往不是因为没材料,而是:
- 模型抓住了相关主题,但没抓住问题焦点
2. 证据选错
候选里可能有多条相关材料,但模型最终抓住的是:
- 背景块
- 一般说明
- 旧版本
- 表面相似但不够直接的段落
这时答案看起来仍然“像有依据”,但实际上关键证据没有被正确使用。
3. 把推测说成事实
这类错误在 RAG 里特别常见。
模型可能先根据材料得出一部分可靠结论,然后又顺着语言模式自动补全出:
- 材料里没有明确支持的细节
- 看起来合理但未经证据支持的判断
这会让回答呈现出一种危险状态:
- 前半段可靠,后半段开始漂
4. 只答对一半
有些问题本身需要多个条件、多个步骤或多个例外同时成立。
模型可能确实引用了证据,但只覆盖了其中一部分,比如:
- 给出了定义,但没给限制条件
- 给了主流程,但没提例外分支
- 说了结论,但没说适用范围
这类错误很像“基本答对了”,但对真实系统来说仍然是不完整甚至误导的。
5. 忽略限制条件和例外条款
很多材料里真正决定答案边界的,不是主体规则,而是:
- 例外条件
- 生效范围
- 时间边界
- 版本限定
模型经常会优先抓主规则,却忽略这些更关键的约束。
于是答案会变成:
- 表面正确,但边界错了
6. 引用存在,但引用不忠实
这一类会在下一篇专门展开,但这里先建立一个判断:
- 引用了来源,不代表答案就一定忠实于来源
模型可能:
- 引用了一条材料
- 但对那条材料的解释超出了原意
二、为什么这些错误比纯幻觉更麻烦
因为纯幻觉往往相对容易发现,而这些错误通常:
- 有一点材料依据
- 有一定语义相关性
- 看起来不像明显乱说
也正因为如此,它们更容易通过表面检查,却在真实使用里出问题。
三、怎么先粗分是哪一类错误
可以先问三个问题:
- 模型有没有真正回答当前问题,而不是只回答相关主题
- 模型引用或使用的是不是最关键的那条证据
- 模型有没有把材料外推测混进确定结论
这三个问题一拆开,很多“答案不稳”的问题就会清楚得多。
一个最小示意
python
answer = llm(build_prompt(query, context))
if answers_related_topic_but_not_question(answer):
error_type = "off_target"
elif uses_context_but_misses_key_constraint(answer):
error_type = "partial_or_misgrounded"
elif adds_unsupported_details(answer):
error_type = "unsupported_inference"这段代码想说明的是:
- 生成错误不是一种,而是要按失败模式拆开看
一个常见误区
很多人会把生成阶段问题统一叫成:
- 幻觉
这不够细,也不利于排查。因为“幻觉”只是其中一类,而真实系统里更常见的是:
- 半忠实
- 半完整
- 半答对
如果不把错误类型拆开,后面就很难决定该改 Prompt、改上下文构造,还是改检索策略。
一句话总结
RAG 生成阶段最常见的错误,不只是胡编,而是答非所问、证据选错、把推测说成事实、只答对一半、忽略边界条件和引用不忠实。这些错误往往比纯幻觉更难发现,也更需要细分定位。