RAG 实战指南:核心原理、工作流程与常见挑战解析
2023 年以来,检索增强生成(Retrieval Augmented Generation, RAG)已成为基于大语言模型的人工智能系统中应用最为广泛的架构之一。随着大模型能力的边界不断拓展,对 RAG 应用的性能、检索效率及准确性的研究成为核心技术问题。
本文首先介绍什么是 RAG、为什么需要 RAG,深入剖析 Naive RAG 的工作流程及其存在的挑战,并补充针对常见痛点的优化方案,为构建生产级 RAG 系统提供理论参考。
为什么需要 RAG?
在大模型的快速发展过程中,大家发现仅仅依靠预训练的大语言模型(LLMs)会有诸多制约。以下四点尤为突出:
- 幻觉问题:LLMs 底层基于概率推理,有时会产生一本正经的胡说八道,编造看似合理但事实错误的内容。
- 知识缺乏问题:LLMs 的训练数据存在截止时间。例如 ChatGPT-3.5 的训练数据截止于 2021 年,对于之后的事件一无所知,且可能包含过时知识或缺乏特定领域知识。
- 数据安全问题:企业的经营数据和商业机密至关重要。直接使用公有云大模型可能存在数据泄露风险,私有化部署成本又过高。
- 可信度问题:不透明、无法追踪的推理过程导致回答缺乏依据,难以满足专业场景的可信度要求。
因此,检索增强生成(RAG)技术应运而生。它通过整合外部知识源,提高 LLMs 生成答案的准确性和可信度,特别适用于知识密集型任务,并允许持续的知识更新和特定领域信息的整合。
RAG 与大模型微调的对比
用户常问,为什么使用 RAG 而不是微调(Fine-tuning)?
- 数据变动频繁的场景:微调成本高且周期长,RAG 只需更新向量库即可生效。
- 需要给出出处的场景:RAG 可追溯引用来源,微调后的模型通常无法提供具体出处。
- 对幻觉敏感的场景:微调无法根除幻觉,RAG 通过上下文约束可降低幻觉概率。
- 节省 GPU 训练成本:RAG 无需重新训练模型参数,仅需推理算力。
什么是 RAG?
检索增强生成(RAG)是通过整合来自外部知识源的额外信息来改进大语言模型应用能力的一种技术。这种技术能够帮助 LLMs 产生更精确和更能感知上下文的回复,同时减轻幻觉现象。
简短的公式帮你理解 RAG:RAG = 检索 + LLMs
RAG 分为两个主要阶段:索引(Indexing)和检索(Retrieval)。有的地方理解为离线处理和在线处理。
索引阶段(离线)
索引阶段是将文本、图片、音视频等格式的内容进行解析、分割、向量化处理,并最终将向量化后的内容存储到向量数据库。
注:事实上也并非一定向量化,某些场景可以仅使用精确/关键词搜索,具体视场景而定,但一般情况下向量检索是主流。
此阶段的关键步骤包括:
- 数据清洗:去除无关字符、HTML 标签等。
- 文档解析:处理 PDF、Word、Markdown 等不同格式。
- 分块(Chunking):将长文本切分为适合模型处理的片段。
- 嵌入(Embedding):使用 Embedding 模型将文本转换为向量。
- 存储:存入向量数据库(如 Milvus, Pinecone, FAISS 等)。
检索阶段(在线)
检索阶段主要是将用户提问向量化,然后将向量化的提问去向量数据库中进行相似度查询并返回语义相近的信息,最后将该信息作为上下文发送给大模型。
此阶段涉及:
- 查询预处理:对输入问题进行清洗或改写。
- 向量检索:计算查询向量与库中向量的相似度(如余弦相似度)。
- 重排序(Re-ranking):对初步检索结果进行精细排序。
- 上下文组装:将检索到的片段与用户问题组合成 Prompt。


