RAG 的设计问题与局限性分析

16 阅读8分钟

RAG 的设计问题与局限性分析

尽管 RAG(检索增强生成)是目前落地 LLM 应用的主流架构,但它并非银弹。以下是 RAG 在设计层面的系统性问题和固有缺陷


一、核心设计缺陷

1. "检索-然后-生成"的流水线本质

RAG 采用的是流水线架构(Pipeline Architecture),而非端到端联合优化:

检索 → 生成(单向依赖,无法反馈)

问题表现:

  • 生成阶段无法指导检索阶段
  • 如果检索结果不好,生成阶段无能为力
  • 生成阶段发现信息不足时,无法"回头"要求补充检索

实例:

用户问:"张三的生日是哪天?"
检索系统找到了"张三的入职日期是2020年"(不相关)
生成阶段:没有发现"没找到生日信息",反而编造了一个日期

理论本质: 这是一个开环控制系统,缺少反馈机制。


2. 检索质量与生成质量的耦合

检索结果生成结果问题
相关且准确✅ 理想情况
相关但不完整部分正确,有遗漏信息丢失
相关但错误生成错误答案误导
不相关拒绝回答 或 幻觉浪费计算
缺失关键信息不知道"不知道"最危险

核心问题: 系统无法区分"没有检索到信息"和"信息不存在"。

# 伪代码展示问题
if retrieved_docs is empty:
    # 选择1: 拒绝回答 → 用户体验差(明明有答案只是没检到)
    # 选择2: 让LLM自由发挥 → 幻觉风险
    # 没有完美的第三种选择

3. 分块(Chunking)的信息碎片化

RAG 必须将长文档切分成小块,这会破坏跨块的信息关联

原文:"虽然A方案成本低,但B方案更可靠。因此我们推荐B方案。"
         ↓ 切分
块1:"虽然A方案成本低,但B方案更可靠。"(丢失了结论)
块2:"因此我们推荐B方案。"(丢失了理由)

具体问题:

问题类型说明实例
上下文断裂跨块的指代关系丢失"它"指代什么?
结论孤立结论与前提分离只检索到结论,缺少推理链
信息重复重叠切分导致冗余同一信息被多次检索
边界噪声切分边界切断完整语义句子被腰斩

二、工程实践中的痛点

4. "大海捞针"问题

当知识库规模增大时(百万级文档),检索的精准度会下降。

现象:

  • Top-5 检索结果中可能只有 1-2 条真正相关
  • 相关信息可能排在 20 名以后,被截断丢弃
知识库:100万份文档
用户问:"公司2023年Q3的毛利率是多少?"
检索结果Top-5:
1. 2022年年报(相关度0.82)
2. 2023年Q2季报(0.79)
3. 2024年Q1季报(0.77)
4. 2023年Q3季报(0.76)← 真正需要的排在第四
5. 投资者关系介绍(0.74)

如果只用Top-3,就错过了正确答案。

根本原因: 向量相似度 ≠ 问题答案相关性。语义相似的文档不一定包含答案。


5. 多跳推理(Multi-hop Reasoning)能力弱

复杂问题需要从多个文档中分别获取信息然后组合推理。

问:"A公司和B公司中,谁收购的公司更多?"
需要:
1. 检索"A公司收购记录" → 文档X
2. 检索"B公司收购记录" → 文档Y
3. 比较计数 → 推理

RAG 的困境:

  • 单次检索很难同时获取文档X和文档Y
  • 两次检索之间缺少"记忆"和"状态"

现有方案的缺陷:

  • 迭代检索:多次调用 LLM,延迟高
  • 多路检索:需要预定义检索路径
  • 都无法完美解决

6. 位置偏差(Position Bias)

LLM 对输入上下文中的信息位置敏感。

prompt = """
参考资料:
[1] 正确答案是A  ← 放在末尾效果最好?
[2] 无关信息
[3] 无关信息
...
问题:正确答案是什么?
"""

研究发现:

  • LLM 倾向于关注上下文的两端(首因效应 + 近因效应)
  • 中间位置的信息容易被忽略
  • 不同模型的偏差模式不同

后果: 即使检索到了正确答案,如果排在了"不好的位置",LLM 可能忽略它。


7. 长度限制与信息密度矛盾

情况问题
检索 Top-3可能遗漏相关信息
检索 Top-10可能塞入噪声,LLM 注意力分散
检索 Top-20超过模型上下文窗口,必须截断

本质矛盾:

  • 信息覆盖率 ↑ → 噪声 ↑ → 生成质量 ↓
  • 信息覆盖率 ↓ → 遗漏 ↑ → 答案不完整 ↓

没有理论上的最优解,只能工程调参。


三、理论层面的根本问题

8. 知识边界不透明

用户无法知道系统的"知道"与"不知道"的边界。

用户视角:提问 → 得到答案(看起来很有信心)
实际:系统可能只检索到部分信息,但 LLM 会包装成完整的答案

问题:

  • 无法区分"答案来自参考资料" vs "答案来自 LLM 预训练知识"
  • 无法区分"信息完整" vs "信息只有一部分"

解决方案的局限:

  • 让 LLM 标注置信度 → LLM 的置信度校准很差
  • 引用来源 → 用户仍需自己判断相关性

9. 一致性问题

同一个问题在不同时间问,可能得到不同答案。

周一问:"RAG 是什么?" 
→ 检索到文档A → 回答X

周三问(文档B被加入知识库后):
→ 检索到文档B → 回答Y(可能与X矛盾)

问题来源:

  • 知识库动态变化
  • 检索结果有随机性(部分向量检索算法有随机采样)
  • LLM 生成本身的随机性

对于需要确定性回答的场景(如医疗、法律、金融),这是严重缺陷。


10. 评估困难

RAG 系统的质量评估比纯 LLM 更复杂。

评估维度难度原因
检索质量需要标注"文档-问题"相关性
生成质量答案正确性依赖于检索到的文档
忠实度答案是否与引用文档一致
信息完整性极高检索是否覆盖所有必要信息

RAG 特有的评估问题:

  • 检索到的文档正确,但 LLM 生成错了 → 谁的问题?
  • 检索到的文档本身是错的 → 谁的责任?
  • 答案正确但不是来自检索文档 → 算 RAG 的功劳还是 LLM 的?

四、成本与效率问题

11. 延迟开销

纯 LLM:  用户输入 → LLM 生成 → 输出
RAG:     用户输入 → Embedding → 向量检索 → 构建 Prompt → LLM 生成 → 输出
                      ↑          ↑           ↑
                    额外延迟    数据库延迟   更长输入

典型延迟对比:

  • 纯 LLM:500ms - 2s
  • RAG:1s - 4s(增加 100% 以上)

对实时应用的影响:

  • 聊天机器人:可接受
  • 语音助手:体验下降
  • 高频查询:成本翻倍

12. 成本叠加

组件成本来源
Embedding每次查询都要调用
向量数据库存储费用、查询费用(云服务)
LLM 生成输入 token 变多(参考资料占大量 token)

计算对比:

 LLM 查询:输入 100 token  输出 200 token  计费 300 token

RAG 查询:   输入 100 + 参考资料 2000 token  输出 200 token 
            计费 2300 token(增加 7倍)

五、与其他方案的对比

问题维度RAG长上下文 LLM微调 LLM传统搜索引擎
信息完整性高(输入完整文档)低(参数记忆)
延迟高(处理长输入)
幻觉风险中低中高无(直接返回文档)
知识更新高(换库即可)中(每次改 Prompt)低(需重训练)
推理能力
一致性中高
可解释性高(可溯源)

六、改进方向与前沿进展

当前正在探索的解决方案

问题改进方案成熟度
流水线单向Agentic RAG(智能体自主检索)实验阶段
分块碎片化Graph RAG(知识图谱 + RAG)研发中
多跳推理Self-Ask、ReAct、Plan-and-Solve研究阶段
检索质量查询改写、HyDE、多路召回生产中
知识边界校准 LLM 置信度、拒绝回答不成熟
一致性问题确定性检索 + 低温度采样部分解决

代表性前沿工作

  1. Self-RAG:让 LLM 自我评估是否需要检索,以及检索结果的质量
  2. Corrective RAG:对检索结果进行质量评估,差的触发重新检索
  3. Adaptive RAG:根据问题复杂度动态调整检索策略(简单问题不检索,复杂问题多跳)
  4. Graph RAG:用知识图谱代替向量检索,保留实体关系和结构信息

七、总结:RAG 的设计问题清单

类别问题严重程度能否根治
架构流水线单向,缺少反馈⭐⭐⭐⭐难(需 Agent 化)
数据分块导致信息碎片化⭐⭐⭐部分解决(重叠切分)
检索大规模下的精度下降⭐⭐⭐⭐工程缓解
推理多跳推理能力弱⭐⭐⭐⭐⭐研究热点
生成位置偏差、长度限制⭐⭐⭐工程缓解
一致性结果不稳定⭐⭐⭐工程缓解
评估缺乏标准评估体系⭐⭐⭐⭐研究中
成本延迟和 token 开销⭐⭐可接受
理论知识边界不透明⭐⭐⭐⭐⭐根本难题

核心结论:

RAG 是当前最实用的方案,但不是终极方案。它的根本问题在于"检索"和"生成"两个模块是解耦的,缺少联合优化。真正的下一代方案可能需要在模型架构层面融合检索能力(如 RETRO、MemGPT),或者走向 Agent 化的自主知识获取。


文档版本:v1.0
最后更新:2026-05-18