什么是 RAG
检索增强生成(Retrieval Augmented Generation),简称 RAG,已成为当前大语言模型(LLM)应用中最主流的方案之一。
通俗来说,RAG 通过检索自有垂域数据库中的相关信息,将其合并为提示模板(Prompt),再输入给大模型生成回答。这种方法有效弥补了通用大模型在特定领域知识上的不足。
为什么会出现 RAG
RAG 的出现是为了解决大模型广泛应用中面临的几个核心问题:
- 知识的局限性:模型自身的知识完全源于训练数据。主流大模型的训练集多基于网络公开数据,无法获取实时性、非公开或离线数据。RAG 允许模型访问外部知识库,解决知识滞后问题。
- 幻觉问题:AI 模型基于概率运算,有时会一本正经地胡说八道,尤其是在不擅长的场景。RAG 通过提供事实依据,减少模型幻觉,提高回答的可信度。
- 数据安全性:企业通常不愿将私域数据上传至第三方平台进行训练。RAG 方案允许数据保留在本地或私有环境中,仅将脱敏后的上下文发送给模型,保障数据安全。
RAG 的基本逻辑是:检索技术 + LLM 提示。向 LLM 提问后,系统从数据源检索相关信息,将信息和问题注入 Prompt,LLM 最后给出答案。
示例说明
以知识时效性为例,GPT-4 Turbo 的现实世界知识截止时间较早。对于小米 SU7 的发布等 2024 年的事件,若直接询问模型可能无法准确回答。通过 RAG 检索最新的新闻文档并注入上下文,模型即可基于最新信息生成准确回答。
RAG 的核心流程
完整的 RAG 应用流程主要包含两个阶段:
-
数据准备阶段
- 数据提取:从文档、数据库或 API 中获取原始数据。
- 文本分割:将长文本切分为适合嵌入的片段(Chunking)。
- 向量化(Embedding):使用 Embedding 模型将文本片段转换为向量。
- 数据入库:将向量存储到向量数据库中。
-
应用阶段
- 用户提问:接收用户的自然语言查询。
- 数据检索(召回):将查询转化为向量,在向量库中检索相似内容。
- 注入 Prompt:将检索到的相关片段与用户问题组合成 Prompt。
- LLM 生成答案:大模型根据 Prompt 生成最终回答。
关键技术细节
- 分块策略(Chunking):合理的分块大小对检索效果至关重要。过小的块可能丢失上下文,过大的块可能引入噪声。常见的策略包括按字符数、按段落或语义分块。
- 向量检索:利用余弦相似度或点积计算查询向量与库中向量的距离,返回最相关的 Top-K 个结果。
- 重排序(Re-ranking):在初步检索后,使用交叉编码器(Cross-Encoder)对候选结果进行精细打分和排序,进一步提升相关性。
RAG 的优势
- 外部知识的利用:有效引用大量外部信息,提供更深入、准确的答案,提高可靠性。
- 数据更新及时性:具备检索库的更新机制,无需重新训练模型即可实现知识即时更新。
- 回复具有解释性:答案直接来自检索库,用户可以核实信息来源,减少幻觉。
- 高度定制能力:可根据特定领域的知识库和 Prompt 进行定制,快速具备该领域能力。
- 安全和隐私管理:通过限制知识库权限实现安全控制,确保敏感信息不被泄露。
- 减少训练成本:数据更新只需更新知识库,无需昂贵的模型微调或重新训练。


