看完后认识RAG的原理,核心思想,工作流程!!!
·
RAG 是一种将检索系统与生成式大模型相结合的人工智能技术。它的核心思想是:在让大模型回答问题之前,先从一个大型、私有的知识库中 “查找” 相关的参考资料,然后让模型基于这些找到的 “证据” 来生成最终答案。
你可以把它想象成一个拥有私人助理的专家:
- 专家 (LLM):拥有强大的语言理解和生成能力,但他的知识更新可能滞后,且不一定了解你的特定领域。
- 私人助理 (检索系统):虽然不擅长创作,但精通查找。当专家接到问题时,助理会立即去一个巨大的文件柜(你的知识库)里翻找所有相关的资料,并把它们呈给专家。
- 最终回答:专家阅读完助理找到的资料后,结合自己的专业知识,给出一个有根有据、最新且高度相关的回答。
1. 为什么需要 RAG?—— 解决大模型的四大核心痛点
在 RAG 出现之前,我们直接使用大模型(LLM)会遇到几个棘手的问题:
| 痛点 | 描述 | RAG 的解决方案 |
|---|---|---|
| 知识过时 (Knowledge Cutoff) | 大模型的训练数据有一个截止日期(例如 GPT-4 是 2023 年 4 月),无法获取最新信息。 | 实时检索:通过接入搜索引擎或实时数据库,RAG 可以为模型提供最新的数据,使其回答与时俱进。 |
| 知识私有化 (Private Knowledge) | 公司内部文档、行业报告、个人笔记等敏感或专属数据,无法用于训练公开的大模型。 | 私有知识库:RAG 可以建立一个本地或私有化部署的知识库,模型仅在回答时临时检索,确保数据安全。 |
| 回答幻觉 (Hallucination) | 模型有时会一本正经地 “胡说八道”,编造出看似合理但实则错误的信息。 | 有据可依:RAG 要求模型基于检索到的、可验证的文档片段进行回答,大大增强了回答的可信度和准确性。 |
| 成本高昂 (High Cost) | 为特定任务持续微调(Fine-tuning)大模型的成本非常高,且每次更新知识都需要重新微调。 | 低成本更新:RAG 的知识库可以轻松增删改,无需重新训练模型,知识更新成本极低。 |
2. RAG 的核心工作流程(Step-by-Step)
一个典型的 RAG 系统运作流程可以分为两大阶段:构建阶段 (Indexing) 和 问答阶段 (Querying)。
阶段一:构建阶段 (Indexing) - “建立文件柜”
这个阶段是一次性的 “基建工程”,目的是把原始文档转换成方便快速检索的格式。
-
文档加载 (Document Loading)
- 做什么:将各种格式的原始文档(如 PDF, DOCX, TXT, Markdown, HTML 等)读取到系统中。
- 工具示例:
LangChain的DocumentLoaders模块、LlamaIndex等。
-
文档分割 (Document Splitting / Chunking)
- 做什么:将长文档切割成更小、更易于处理的片段(Chunks)。这是RAG 性能的关键一步。
- 为什么重要:大模型有上下文窗口限制。如果片段太长,模型无法处理;如果太短,可能会割裂上下文,导致信息丢失。
- 策略:通常按段落、章节分割,或使用更智能的 “递归字符分割器”,并保留每个片段的元数据(如来源、页码)。
-
嵌入生成 (Embedding)
- 做什么:使用一个嵌入模型 (Embedding Model),将每个文本片段转换为一个高维向量(Vector),即 “嵌入向量”。
- 原理:这个向量会捕捉文本的语义信息。意思越接近的片段,它们的向量在空间中的距离就越近。
- 模型示例:
OpenAI Embeddings,Sentence-BERT (SBERT)系列(如all-MiniLM-L6-v2)。
-
向量存储 (Vector Storage)
- 做什么:将所有文本片段的嵌入向量及其对应的原始文本、元数据存储在一个专门的数据库中,即向量数据库 (Vector Database)。
- 核心能力:向量数据库支持近似最近邻搜索 (Approximate Nearest Neighbor, ANN),能在海量向量中快速找到与查询向量最相似的 Top-K 个向量。
- 数据库示例:
Milvus,Weaviate,Chroma,Pinecone(云服务)。
阶段二:问答阶段 (Querying) - “查找并回答”
这是用户与系统交互的实时过程。
-
接收查询 (Receive Query)
- 做什么:用户输入问题,例如:“请总结一下我们公司最新的产品定价策略?”
-
查询转换 (Query Transformation)
- 做什么:将用户的自然语言查询也通过同一个嵌入模型转换成查询向量。
-
相似性检索 (Similarity Search)
- 做什么:将查询向量送入向量数据库,执行 ANN 搜索,找出与查询最相关的 Top-K 个文档片段。
- 结果:得到一个包含相关文本片段、相似度分数和元数据的列表。
-
构建提示 (Prompt Construction)
- 做什么:这是一个关键的 “编排” 步骤。系统会将检索到的相关片段、原始查询以及一些指令(Prompt)组合成一个新的、信息更丰富的提示。
- 示例 Prompt 模板:
plaintext
你是一个专业的问答助手。请基于以下提供的参考资料,用简洁明了的语言回答用户的问题。 如果参考资料中没有相关信息,请直接回答“根据提供的资料,无法回答该问题”,不要编造内容。 参考资料: {retrieved_documents} 用户的问题是: {user_query} 请开始回答:
-
模型生成 (Generation)
- 做什么:将这个精心构建的提示发送给大语言模型 (LLM)。
- 模型示例:
GPT-4o,Claude 3,Gemini Pro,Llama 3等。
-
返回结果 (Return Result)
- 做什么:LLM 接收到提示后,会基于其中的参考资料生成回答。系统将这个回答返回给用户,通常还会附上引用来源(来自元数据),以增强透明度和可信度。
3. 深入细节与关键技术点
要构建一个高性能的 RAG 系统,需要深入理解并优化以下几个方面:
3.1 检索器 (Retriever) 的选择与优化
- 稀疏检索 (Sparse Retrieval):
- 代表:TF-IDF, BM25。
- 原理:基于词频统计,看查询词在文档中出现的频率和重要性。
- 优点:速度快,对关键词匹配友好,可解释性强。
- 缺点:不理解同义词和上下文语义(如 “汽车” 和 “轿车”)。
- ** dense 检索 (Dense Retrieval)**:
- 代表:使用嵌入模型的向量检索。
- 原理:捕捉深层语义,能理解同义词和上下文。
- 优点:语义理解能力强,对模糊查询友好。
- 缺点:计算和存储成本较高。
- 混合检索 (Hybrid Retrieval):
- 原理:结合稀疏检索和 dense 检索 的优点。例如,使用 ColBERT 或 RRF (Reciprocal Rank Fusion) 算法融合两种检索结果。
- 适用场景:对召回率和准确率要求都非常高的场景。
3.2 文档分割 (Chunking) 的艺术
分割策略对 RAG 性能影响巨大。
- 固定大小分割:最简单,但可能破坏句子或段落结构。
- 语义分割:利用 NLP 工具(如 spaCy)按句子、段落或章节分割,保持语义完整性。
- 滑动窗口 / 重叠 (Overlap):在片段之间保留一小段重叠内容(如 50-100 个字符),防止因分割点不当导致上下文丢失。
- 层次化分割:先将文档分割成大的块(如章节),再分割成小块(如段落)。检索时先检索大的块,再在其中检索小的块,可以提升效率和准确性。
3.3 提示工程 (Prompt Engineering) 的技巧
- 指令清晰:明确告诉模型 “必须基于提供的资料回答”、“如果资料不足请说明”。
- 示例驱动 (Few-shot Prompting):在提示中加入 1-2 个 “问题 - 正确回答” 的示例,让模型快速理解任务。
- 思维链 (Chain-of-Thought):引导模型在回答前,先思考 “我需要从资料中找什么信息?”“这些信息如何组织成答案?”。
3.4 RAG 的评估 (Evaluation)
如何衡量一个 RAG 系统的好坏?
- 检索阶段评估:
- 指标:召回率 (Recall@k)。衡量在检索出的 Top-k 个结果中,是否包含了所有与问题相关的文档。这是最重要的指标之一。
- 生成阶段评估:
- 指标:
- 基于事实性:Faithfulness, Factuality。衡量生成的回答是否忠实于检索到的证据,有无 “幻觉”。
- 基于相关性:Answer Relevance。衡量回答是否切题。
- 基于质量:使用 LLM 作为裁判(LLM-as-a-Judge),让另一个大模型对回答的准确性、完整性、有用性进行打分。
- 工具:
RAGAS,TruLens等框架提供了自动化的 RAG 评估能力。
- 指标:
4. RAG 的架构演进
RAG 技术本身也在快速演进:
- RAG v1.0 (基础 RAG):就是我们上面描述的标准流程。
- RAG v2.0 (高级 RAG / "RAG of RAGs"):引入了更多智能。
- 查询重写 (Query Rewriting):模型先分析原始查询,将其重写为更易于检索的形式(如分解为子问题、生成同义词查询)。
- 自我检索 (Self-RAG / Reflection):模型生成初步回答后,会检查其中的每个断言是否有证据支持。如果没有,它会进行多轮迭代检索,补充缺失的信息,直到满意为止。
- 结构化检索:不仅检索非结构化文本,还能检索数据库中的表格、JSON 等结构化数据,回答更精确。
下一步行动建议
现在你已经对 RAG 有了全面的了解,可以从以下几个方向着手实践:
- 动手实践:使用
LangChain或LlamaIndex搭建一个最简单的 RAG 原型。你可以用自己的笔记或几篇文章作为知识库。 - 深入研究:选择一个你最感兴趣的技术点进行深入研究,例如不同的向量数据库性能对比,或者高级的 Chunking 策略。
- 方案设计:思考一下你所在行业或领域,哪些具体问题可以通过 RAG 来解决?尝试为其设计一个初步的技术方案。
更多推荐

所有评论(0)