ByteNoteByteNote
RAG 落地为什么难?七个常见坑和应对办法

字节笔记本

2026年2月21日

RAG 落地为什么难?七个常见坑和应对办法

API中转
¥120

RAG 系统的落地比很多人想象的难。本文基于斯坦福论文《Seven Failure Points When Engineering a RAG System》,结合实际开发经验,梳理了 RAG 系统中最常见的几个坑和应对办法。

格式错误:模型不听话

你让模型输出 JSON,它给你一堆自由文本。你想要表格,它给你 Markdown。这是 RAG 开发中最常见的挫败感来源之一。

几个实用的解决思路:

  • 写更明确的 prompt。别指望模型猜你要什么格式,直接给示例。
  • 用输出解析器兜底。LlamaIndex 支持和 Guardrails、LangChain 的输出解析模块集成,把模型的输出强制解析成你要的结构。
  • 用 Pydantic 定义数据模型。LlamaIndex 支持三种 Pydantic 程序:文本完成版、函数调用版、预设版。定义好输出 schema,模型自动按规范输出。
  • OpenAI JSON 模式。设 response_formatjson_object,模型只输出能解析的 JSON。但注意,这只保证格式是 JSON,不保证内容符合你的 schema。

内容缺失:瞎编一气

这是最危险的。知识库里没有答案,RAG 系统不是承认"我不知道",而是编一个看起来很合理的答案。用户被误导,后果不堪设想。

两个层面解决:

优化数据源。 "输入什么,输出什么。"如果源数据质量差、充斥着冲突信息,怎么优化 RAG 流程都没用。数据治理是前置条件,不是可选项。

改进提示方式。 在 prompt 里加一句"如果你无法确定答案,请说明你不知道"。不能百分百保证有效,但实测下来确实能显著减少幻觉。

错过关键文档:答案就在那,但没找到

检索到了相关文档,但最关键的文件排名靠后,没进 top-k,模型看不到正确答案。

两种解决思路:

重排序。 先检索 top-10 结果,再用 CohereRerank 等模型重排序,最后取 top-2。LlamaIndex 有对比实验证明这种做法比直接取 top-2 效果好。

调参。 chunk_sizesimilarity_top_k 直接影响检索质量。chunk 太小会丢失上下文,太大又会导致噪声太多;top_k 太小会错过关键文档,太大又会让噪声淹没有用信号。需要根据具体场景调。

脱离上下文:检索到了但没用上

检索到了含有答案的文档,但这些文档在整合阶段被忽略了。数据库返回了大量文档,LLM 在整合过程中丢了关键信息。

解决方向:

  • 用更好的检索策略。LlamaIndex 提供了从基础到高级的一系列检索方式:自动检索、知识图谱检索器、组合检索器等。
  • 微调 embedding 模型。如果你用的是开源模型,微调 embedding 可以显著提高检索准确性。

未能提取答案:信息太多,找不到重点

上下文里信息量太大,干扰信息和矛盾信息混在一起,LLM 提取不到关键内容。

三个解法:

清理数据。 再次强调数据质量。垃圾进,垃圾出。

上下文压缩。 LongLLMLingua 技术可以在检索后压缩上下文,去掉噪声,保留和问题相关的内容。压缩后再喂给 LLM,提取准确率会提高。

重排序。 研究发现,LLM 对上下文开头和结尾的信息处理得更好,中间的信息容易被"丢失在中间"。LongContextReorder 可以重新排列节点顺序,把最相关的内容放到首尾位置。

回答太宽泛:不够具体

答案没错,但缺少细节。比如问了一个很具体的技术问题,模型给了一段放之四海而皆准的泛泛而谈。

这通常不是 LLM 的问题,而是检索的问题。文档里确实有详细的答案,但没被检索到。

LlamaIndex 提供了几种高级检索方法来解决这类问题:从细节到全局的检索、围绕特定句子的检索、逐步深入的递归检索。

回答不全面:只答了一部分

比如问"文档 A、B、C 分别讨论了哪些主题?",简单的 RAG 模型可能只回答了其中一两篇的内容,漏掉了其他的。

解决办法是加一个查询理解层:在实际检索之前,先对查询进行优化。LlamaIndex 支持四种方式:

  • 路由优化:根据查询内容,分发给不同的检索工具
  • 查询改写:保持工具不变,但用不同的措辞重新表达查询,提高覆盖率
  • 细分问题:把大问题拆成几个子问题,分别检索
  • ReAct Agent:让 agent 自己决定用什么工具、构造什么查询

假设性文档嵌入(HyDE)是一种常用的查询改写技术:先让 LLM 根据原始查询生成一个假设性答案,再用这个答案去做 embedding 检索,效果比直接用原始查询好。

数据处理能力:跑不动

文档量大的时候,RAG 系统的数据处理管道可能成为瓶颈。分词、embedding、入库,串行执行的话速度很慢。

LlamaIndex 的解决方案是并行处理。IngestionPipeline 支持设置 num_workers,实测最多能提升 15 倍的处理速度。

小结

上面列了七个问题,但 RAG 落地的坑远不止这些。每个问题单独拿出来都可以写一篇长文。在实际项目中,这些问题往往是交织在一起的——格式错误可能加剧内容缺失,检索不准又让回答过于宽泛。

如果只能给一条建议的话:先把数据治理做好。RAG 系统的上限不取决于你用了多先进的检索策略或多强大的 LLM,而取决于你喂给它的数据质量。

分享: