RAG(检索增强生成)原理详解

📅 2026/7/3 4:18:12 👁️ 阅读次数 📝 编程学习
RAG(检索增强生成)原理详解

为什么需要 RAG?

大语言模型(LLM)有两个核心问题:

问题说明
知识截止模型训练后无法获取新信息(如 2024 年的新闻)
幻觉(Hallucination)模型会"编造"看似合理但实际错误的信息

RAG 的解决思路:让模型在回答问题前,先去查资料(检索),再基于查到的资料来回答(生成),就像开卷考试。

Retrieve(检索)

步骤组件作用技术细节
输入Query用户的自然语言问题
编码Embedding 模型将文本转为向量如 BGE、OpenAI text-embedding-3
检索Vector Database(向量数据库)相似度搜索FAISS、Chroma、Milvus
输出Context(检索结果)召回的相关文档片段Top-K 个最相关的 chunk(文本块)

Augment(增强/组装)

为什么叫"增强"?

因为用户的原始问题(Query)是"单薄"的,通过拼接检索到的上下文(Context),形成了一个"信息更丰富"的完整提示,让 LLM 有依据可答。

来源内容作用
固定模板系统指令 + 格式要求(System Message)角色设定、回答规则、格式要求约束 LLM 行为
Context(检索到的上下文)从向量库检索到的相关文档提供事实依据
Query(检索到的上下文)用户的原始问题明确回答目标

固定模版:eg:"你是一个专业分析师,请根据以下资料回答问题..."

Generate(生成)

特性说明
条件生成LLM 不是自由发挥,而是基于提供的 Context 生成
注意力机制模型会重点关注 Context 中与 Query 相关的部分
约束遵循如果 Prompt 中要求"不知道就说不知道",模型会遵守

RAG关键设计思想

为什么 Query 要同时走两条路?

Query ────▶ Embedding ──▶ 检索(找相关资料) 为了让机器"理解"问题,找到相关知识划定知识范围。

Query ────▶ Prompt──▶ 保留原始问题 为了让 LLM 知道用户"到底在问什么"

综上所述

RAG 是一种结合了检索(Retrieval)生成(Generation)的技术架构。它在模型回答问题之前,先从海量的外部知识库中“查找”相关的辅助信息,然后将这些信息连同问题一起喂给大模型,让模型基于这些事实进行总结和回答。

  • 纯 LLM:像一个闭卷考试的学生,只能靠记忆(预训练数据)回答问题,记错或没背过就容易瞎编。

  • RAG 模式:像一个开卷考试的学生,遇到问题先去翻书(检索知识库),找到依据后再作答。

RAG 的核心流程

一个典型的 RAG 系统包含以下三个关键步骤:

  • 数据索引 (Indexing)

    • 将企业的文档(PDF、Word、Markdown 等)切分成小块(Chunks)。

    • 利用Embedding 模型将文本转化为向量(Vector),存储在向量数据库(如 Milvus, Pinecone, Chroma)中。

  • 检索 (Retrieval)

    • 当用户提问时,系统将问题也转化为向量。

    • 在向量数据库中计算相似度,找出最相关的 top-K 个文档切片。

  • 增强生成 (Generation)

    • 将检索到的原文与用户问题拼接成一个增强后的提示词(Prompt)。

    • 大模型阅读这些背景材料,输出准确的答案。