深入 RAG(检索增强生成)系统架构:如何构建一个能查资料的大语言模型系统

🐇明明跟你说过:个人主页

🏅个人专栏:《深度探秘:AI界的007》 🏅

🔖行路有良友,便是天堂🔖

目录

一、前言

[1、LLM 的局限:模型知识"封闭" vs 现实知识"动态"](#1、LLM 的局限:模型知识“封闭” vs 现实知识“动态”)

2、什么是RAG

[3、为什么需要"检索 + 生成"结合?](#3、为什么需要“检索 + 生成”结合?)

[二、RAG 的整体架构与流程](#二、RAG 的整体架构与流程)

1、检索增强生成的基本结构

2、核心流程

三、核心模块解析

1、向量检索模块(Retriever)

1.1、文档预处理与切分(Chunking)

1.2、向量化(Embedding)原理

1.3、向量数据库简介

2、生成模块(Generator)

[2.1、提示模板设计(Prompt Template)](#2.1、提示模板设计(Prompt Template))

2.2、插入检索内容的方式

[四、RAG 与传统 QA 系统的对比](#四、RAG 与传统 QA 系统的对比)

[1、检索式 QA(BM25 / Elasticsearch)](#1、检索式 QA(BM25 / Elasticsearch))

[2、生成式 QA(LLM 单独输出)](#2、生成式 QA(LLM 单独输出))

[3、RAG相比检索式 QA和生成式 QA的优势](#3、RAG相比检索式 QA和生成式 QA的优势)


一、前言

1、LLM 的局限:模型知识"封闭" vs 现实知识"动态"

🤖 大语言模型 LLM 的"大脑"怎么来的?

LLM(比如 ChatGPT)是通过"喂大量文字资料"训练出来的。

这些资料可能包括:

  • 维基百科 📚

  • 新闻、小说 🗞️📖

  • 技术文档、网站内容 🧑‍💻

  • 训练时截⽌于某⼀年(比如 2023 年)

✅ 优点:

  • 训练完之后,它能"理解语言"和"生成回答",就像人一样 ✍️

🚫 但问题来了!

训练完之后,这些模型的知识就"封闭"了

就像你在 2023 年读完所有百科,然后被关进了房间...

以后就不能接触外面的新东西了 🙈


📅 现实世界是"动态"的!

现实世界每天都在变:

  • 新技术、新产品 💡

  • 股市波动 📉📈

  • 社会新闻 📰

  • 法律、政策变化 🏛️

  • 你公司的文档不断更新 📂


🤔 举个例子

你问 ChatGPT:

"苹果 iPhone 16 有哪些新功能?"

  • ❌ 普通 LLM(没联网)只能告诉你:

    "截至训练时,最新的是 iPhone 14 或 15..."

  • ✅ 使用 RAG 或联网增强的模型能回答:

    "iPhone 16 加入了 AI 拍照助手、无边框屏幕..."(实时查的!)


📌 所以说...

❗ LLM 的局限:

  • 它的知识是静态的、封闭的 🧱

  • 无法主动感知"此时此刻"发生了什么 ⏰


2、什么是RAG

你有没有和 ChatGPT 聊天时发现,它有时候回答得不太准确?🤔

那是因为它只靠"记忆"回答问题 ,而不是实时"查资料"。

RAG 就是来解决这个问题的!🎯


💡RAG 的全称

RAG = Retrieval-Augmented Generation

中文意思是:"检索增强生成"

听起来是不是很学术?别急,我们来举个栗子🌰


🍜 用"点外卖"举个例子

假设你在点外卖 🍱,你问:

哪家餐厅最近评价最好?

  • 如果是普通大模型(没有 RAG):

    它会靠以前学过的资料 告诉你:

    "大众点评上XX餐厅评价不错哦~"

  • 如果是带 RAG 的模型:

    它会先去实时搜索

    "当前最新的餐厅评价",

    然后结合自己的理解,告诉你答案!

✅是不是更靠谱了!


3、为什么需要"检索 + 生成"结合?

简单说一句话:

👉 "检索"找资料,"生成"来表达

合在一起,就成了聪明又靠谱的问答助手 🧠✨

🎓 一句话区分两者

模块 是谁 作用
🔍 检索 类似 Google、百度 从知识库里"找答案"
✍️ 生成 类似 ChatGPT、文心一言 把资料"说人话"告诉你

📦 为什么不能只靠"生成"?

生成模型(LLM)很强大,但有两个大问题:

  1. 知识是封闭的

    它只能回答训练时学过的内容,不能访问新数据 📅

  2. 可能张口就来(幻觉)

    它有时会"瞎编"一个听起来像真的答案 🤯

    "Python 6.0 已发布"❌(其实根本没有)

🔍 那只用"检索"行不行?

只用检索就像自己去 Google 搜资料:

  • 你得自己读、自己理解 🧾

  • 内容零碎,用户体验不好 😩


✅ 所以"检索 + 生成"强在哪?

它把 两者的优点结合起来

模块 优点
检索 提供实时、可靠、准确的"资料来源" 📚
生成 自动理解内容,用自然语言表达答案 ✨

就像你有了个聪明秘书👇


二、RAG 的整体架构与流程

1、检索增强生成的基本结构

🧱 RAG 的基本结构组成

用户问题

🔍 检索模块(Retriever)

📄 相关文档(Document Store / 向量数据库)

🤖 生成模块(LLM)

✅ 最终回答

1️⃣ 用户问题(User Query)🗣️

用户提出一个自然语言的问题,比如:

"我们公司今年的假期安排是怎样的?"


2️⃣ 检索模块(Retriever)🔍

它会把这个问题变成"向量"或关键词,

知识库里找"相关资料",比如 Word 文档、PDF、数据库记录等。

常用方式有:

  • 向量搜索(embedding 检索)🔢

  • 关键词搜索(BM25等)🔡


3️⃣ 文档库 / 知识源(Document Store)📚

这是你提供给系统的"专属资料库":

可以是:

  • 内部文档系统(如 Confluence)

  • 产品手册、公司制度文档

  • FAQ 问答库

  • 向量数据库(如 Faiss、Weaviate、Pinecone)


4️⃣ 生成模块(LLM)✍️

将检索到的资料 + 用户问题

一起输入给大语言模型(如 GPT-4)

👉 它会生成一个贴合问题、参考资料的自然语言答案。


5️⃣ 最终输出 ✅

模型输出的回答结合了"当前资料"与语言表达能力,

能给出"有依据、不瞎编"的智能答复。


2、核心流程

🧭 1. 用户输入 query(提问)💬

用户输入自然语言问题,比如:

"公司 VPN 连不上怎么处理?"


🔍 2. 检索相关文档(Retriever)📂

将用户问题转化为向量(或关键词),

在知识库中查找相关资料片段,如:

  • 公司 IT 支持文档

  • 网络故障手册

  • FAQ 问答库

🔸 输出:若干条相关内容(上下文)


🧠 3. 拼接上下文 + 问题输入 LLM(Generator)🧾

把这些检索到的内容 + 用户问题

打包送入大语言模型(如 GPT-4)

🔸 模型可以"理解"上下文,结合已有知识进行回答。


✅ 4. 返回回答结果 ✨

LLM 输出一个贴合上下文、语义流畅的回答,例如:

"您好,请尝试重启 VPN 客户端,若仍无法连接,请联系 IT 支持人员并提供错误码。"


三、核心模块解析

1、向量检索模块(Retriever)

1.1、文档预处理与切分(Chunking)

🧐 为什么要切分文档?

我们不能直接把整本 PDF、整篇网页丢给模型或向量数据库!

因为:

  • 太大,无法一次处理(LLM 有长度限制)📏

  • 不利于精确匹配关键词或语义 🎯

所以要把大文档 ✂️ 切成小块(Chunk)

🔨 文档预处理与切分流程

原始文档(PDF / Word / 网页等)📄

  1. 文本提取(OCR / Parser)🔍

  1. 清洗格式(去除 HTML 标签、多余空格等)🧼

  1. 切分成小段(Chunking)✂️

  1. 生成每段的向量 Embedding(文本 → 数字)🔢

存入向量数据库(如 Faiss / Weaviate / Milvus)📦


1.2、向量化(Embedding)原理

🎯 一句话理解:

把一句话或一段文字 ✍️

转换成一个可以在"数字世界"中比大小、量距离的 向量 📍

👉 方便让机器"理解语义"和"做相似度检索"!

🧠 举个例子:

原始文本 向量化后
"猫是一种动物" [0.12, -0.85, 0.33, ..., 0.05]
"狗是哺乳动物" [0.11, -0.80, 0.30, ..., 0.07]
"咖啡是一种饮料" [0.95, 0.02, -0.30, ..., 0.88]

📌 可以看到:"猫"和"狗"的向量相近 ,说明语义上相关。

"咖啡"离它们就远了,语义无关 🧭


🧩 Embedding 是怎么做的?

过程如下图(概念流程):

输入文本:"如何重置公司邮箱密码?"

🔤 分词(Tokenizer)

🔢 编码(Embedding 模型)

输出一个 N 维向量:[0.23, -0.45, 0.88, ..., -0.19]

✅ 每一维都代表了某种"语义特征",比如技术性、办公场景、问题类型等。

🚀 常见的文本向量模型(Embedding Models)

模型 来源 特点
OpenAI text-embedding-3-small GPT家族 准确度高、商用常用
bge-small / bge-large BAAI(北京智源) 中文支持优秀 🇨🇳
E5 / Instructor Hugging Face 社区 多语言、检索效果好
MiniLM / MPNet 微软 轻量快、适合端侧部署

🧭 向量的价值在哪?

  • ✅ 可以通过"距离"判断文本间的语义相似度

    • 常见方式:余弦相似度 cosine similarity

例如:

"公司如何申请年假?" 与 "怎样请假?"

向量距离近,说明意思接近,Retriever 会成功召回!


1.3、向量数据库简介

🧭 什么是向量数据库?

向量数据库是专门用来存储、管理、搜索「向量(Embedding)」的数据库 📦,

它能干的事情主要是👇:

  • ✅ 存:将文本、图像等向量数据存起来

  • ✅ 查:支持「相似度检索」------找出"语义最相近"的内容

  • ✅ 快:可处理数百万、甚至数十亿条向量数据

  • ✅ 强:支持高维向量、支持 GPU、分布式扩展能力强

🔍 所以,在 RAG 架构中,它就是连接 检索模块知识库 的超级引擎!

📦 常见向量数据库介绍一览:

名称 产地 / 背景 优势亮点 使用方式 是否开源
FAISS 🧱 Meta / Facebook 极快的本地向量搜索 Python 为主,嵌入式用多 ✅ 是
Milvus 🚀 Zilliz(国产) 云原生、分布式强 REST / Python / Java ✅ 是
Weaviate 🧠 欧洲公司 集成好(支持 OpenAI / Cohere 等) RESTful API,易部署 ✅ 是
Qdrant 开发者友好 支持过滤器、打分高效 Web UI + API 易用 ✅ 是

🔹 FAISS(Facebook AI Similarity Search)

  • 🌱 轻量级、单机版神器

  • 🚀 支持 GPU,百万级向量检索毫秒级

  • 😅 不适合做分布式、管理功能弱

  • 🔧 适合离线处理、大量批量匹配任务


🔹 Milvus

  • 🇨🇳 开源之光,Zilliz 维护

  • ☁️ 支持云部署、分布式、多副本

  • 🔌 可接 Elastic、S3、MySQL 等

  • 💬 非常适合企业级大规模向量服务


🔹 Weaviate

  • 🔗 天生就是为 RAG 服务的向量库

  • 🎁 内置向量模型集成(OpenAI / HuggingFace)

  • 🌐 提供 GraphQL/REST API,简单易上手

  • 💡 适合快速搭建语义搜索原型


🔹 Qdrant

  • 💻 支持结构化 + 非结构化过滤查询(很灵活)

  • 🧪 拥有 Web 控制台、API 易用

  • 💨 检索性能强,开源活跃

  • 👍 很适合开发者 / 中小型 RAG 项目


2、生成模块(Generator)

2.1、提示模板设计(Prompt Template)

❓为什么要设计提示模板?

因为直接把检索结果 + 用户问题喂给 LLM,模型未必能「懂你想要什么」。

所以我们需要一个"引导话术",像"说明书"一样告诉模型如何回答。📋

✅ 最常见的提示结构如下:

你是一位 [角色设定]。

请根据以下已知信息回答用户的问题:

【已知信息】

{{context}}

【用户问题】

{{question}}

请用简洁、准确的语言回答:

📌 {``{context}} 是 Retriever 检索出来的内容

📌 {``{question}} 是用户输入的问题


💡 示例:技术支持场景

你是一名经验丰富的 IT 支持工程师。

请根据以下信息回答用户的问题:

【已知信息】

  1. VPN 客户端连接错误代码为 809。

  2. 错误 809 常见于防火墙未开放 UDP 500 和 UDP 4500 端口。

  3. 建议联系网络管理员确认 VPN 协议设置。

【用户问题】

VPN 连接一直失败,提示错误 809,怎么解决?

请用中文简洁说明处理方案。

🔍 这个模板能让 LLM:

  • 更清楚角色定位(你是谁)

  • 更聚焦已知信息(别胡编)

  • 更精确响应问题(不要答非所问)


2.2、插入检索内容的方式

🛠️ 插入检索内容的几种方式

1️⃣ 经典方式:直接拼接 Prompt(RAG-原始版)

👉 把检索结果(Top-K 文档)直接用 Prompt 拼到用户问题前面:

文档1内容

文档2内容

...

问题:请总结上述内容的要点。

优点:简单直接

缺点:信息可能冗余,文档质量参差不齐导致生成结果不稳定 😵

2️⃣ RAG Fusion 🧪

👉 灵感来自"多样性增强"。做法是:

  1. 对一个问题,向 多个不同视角的查询(Query variations) 检索文档(比如改写问题)

  2. 把多个检索结果合并、去重、排序

  3. 拼接后交给生成模块

🌟 优点

  • 检索结果更全面、不容易漏信息

  • 减少模型对单一文档的偏见

📌 举例:

问题:"公司的假期制度是怎样的?"

你可能会生成多个查询:

  • "公司节假日规定"

  • "年假政策"

  • "加班与调休"

然后将多个检索结果融合为一个 Prompt。

3️⃣ RAG with Rerank 🔁

👉 在 Top-K 检索结果出来后,使用一个 重排序(Reranker)模型,对这些文档按"相关性"重新排序 ✅

流程如下:

  1. 原始Retriever → 拿到Top-20候选文档

  2. 使用Reranker模型(如 BGE-Reranker、ColBERT)评分

  3. 选出 Top-N 最相关文档拼 Prompt

🌟 优点

  • 提升质量,去掉干扰文档

  • 对复杂问答场景更有效,比如医疗、法律

4️⃣ (加分项)Chunk Merging、信息整合式 Prompt 🧩

针对文档太长、碎片多的问题,有些系统会先:

  • 对多个文档内容做摘要或融合(比如提取共同主题)

  • 然后再生成回答,减少重复和冲突

方式 特点 适用场景
📜 原始拼接 简单、快速 小型项目、简单问答
🧪 RAG Fusion 多视角、全面 信息分散型问题
🔁 Rerank 精准提取、抗噪性强 复杂、高质量要求的问答
🧩 Chunk融合 减冗余 文档重复率高、大模型Token受限时

四、RAG 与传统 QA 系统的对比

1、检索式 QA(BM25 / Elasticsearch)

🧠 传统 QA 系统是怎么工作的?

传统 QA 系统的核心是:直接检索文档段落,作为回答返回

🧱 架构核心:

  1. 用户提问:"公司的加班政策是什么?"

  2. 系统使用 关键词匹配算法(如 BM25)在文档库中查找最相关的段落。

  3. 相关段落原文返回给用户。

🔍 BM25 / Elasticsearch 是主力选手:

  • BM25 是一种基于词频 + 逆文档频率的打分机制(TF-IDF 的升级版)

  • Elasticsearch 是支持 BM25 的流行全文搜索引擎


📦 举个例子:

🧑‍💼 你问:"我们公司节假日有哪些?"

🧾 传统 QA(BM25)返回结果:

第5章 节假日安排:

  1. 元旦放假1天;

  2. 春节放假7天;

  3. 清明节放假1天;

...

✅ 优点:直接、可查证

❌ 缺点:用户得自己读、自己理解


2、生成式 QA(LLM 单独输出)

✨ 生成式 QA 是什么?

生成式问答(Generative QA)就是指:

只用大语言模型(LLM) 来回答问题,不借助外部知识库或检索系统

也就是说,模型完全靠 自己"脑子里"的知识 来作答📦。


🧱 它的工作方式非常简单:

  1. 用户提问:"黑洞为什么是黑的?"

  2. 模型在它的训练知识中找答案(比如 GPT-4 训练时学到的物理知识)

  3. 生成一段自然语言的回答


📦 举个例子

🧑‍💬 用户问:

"牛顿三大定律分别是什么?"

🤖 生成式 QA(单独 LLM)回答:

"牛顿三大定律包括惯性定律、加速度定律和作用反作用定律,分别为:1. 物体不受外力将保持静止或匀速直线运动;2. F=ma;3. 作用力与反作用力大小相等方向相反。"

✅ 回答清晰、自然,不需要引用外部资料


🧠 它的"知识库"来自哪里?

就是它训练时候用的大量数据,比如:

  • 书籍、百科、论文

  • 互联网上的网页、论坛

  • GitHub、博客、维基百科...

一旦模型训练完成,它就像一位博览群书的"闭卷考生",可以根据脑中的"印象"来作答📚🧠


3、RAG相比检索式 QA和生成式 QA的优势

三种 QA 模型的区别:

模型类型 数据来源 回答方式 是否有"理解力" 是否会幻觉
🔍 检索式 QA 外部文档库(如 ES / BM25) 直接返回原文片段 ❌ 没有,靠关键词匹配 ❌ 基本不会
🧾 生成式 QA 模型训练时的知识 自由生成 ✅ 有语义能力 ⚠️ 高,容易胡编
🤖 RAG 检索结果 + LLM 先检索再生成 ✅ 有理解能力 ✅ 较低,可控

✨ 那么,RAG 到底比它们强在哪儿?一起来看!👇

🎯 对比优势一:结合了"知识准确性"和"语言表达能力"

能力 检索式 QA 生成式 QA ✅ RAG
🎯 找到正确知识
🗣️ 表达自然语言

RAG = 检索准确性(靠 Retriever) + 表达通顺性(靠 Generator)

→ 既懂又会说 💡🧠🗣️


🔍 对比优势二:支持开放域问答

传统检索式 QA 往往只适用于特定知识文档,

生成式 QA 又容易"张口就来"。

🎯 RAG 则可以面向任意问题,只要资料在知识库中,就能通过检索 + 推理生成高质量回答。


🧠 对比优势三:降低幻觉风险

幻觉 = 模型一本正经地编!

  • ❌ 生成式 QA:幻觉高(完全靠记忆)

  • ✅ RAG:只在模型读了真实资料后生成,幻觉概率大大降低

  • ✅ 检索式 QA:无幻觉,但用户要自己读


📚 对比优势四:回答内容有"证据"可查

RAG 可将使用过的文档片段一起返回,形成"可追溯"的问答系统。

💡 示例:

问题:公司的带薪年假制度是什么?

🤖 RAG 回答:

  • 🗣️ 回答:你每年有5天带薪年假,未使用的部分可延期1年。

  • 📎 来源文档片段:

    "员工年假为每年5个工作日,未休部分可结转至次年使用。"

✅ 回答可信 + 有出处

(相比之下,生成式 QA 没法告诉你"这句话是哪来的")


🔄 对比优势五:知识可随时更新,无需重训

模型 知识更新方式 难度
生成式 QA 重训练 LLM 😖 非常难
检索式 QA 更新文档库 😀 简单
✅ RAG 更新知识库 + 检索器 ✅ 非常灵活!

💡 RAG 只要更新知识库和 Embedding 就能快速响应新内容,例如法规变化、产品更新、新闻实时问答等。


🧩 总结一句话:

RAG = 检索的严谨 + 生成的聪明 🧠 + 知识的可控 📚

是目前大多数企业级智能问答系统的首选!


🎁 用表格总结一下三者对比:

维度 检索式 QA 生成式 QA ✅ RAG
数据来源 文档库 模型记忆 文档库
回答风格 原文复制 自由生成 生成回答
表达能力 ❌ 弱 ✅ 强 ✅ 强
知识更新 ✅ 易更新 ❌ 难(需重训) ✅ 易更新
是否可溯源 ✅ 可 ❌ 否 ✅ 可
幻觉概率 ❌ 无 ❌ 高 ⚠️ 低
技术难度 ⭐⭐ ⭐⭐ ⭐⭐⭐⭐

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

相关推荐
zxsz_com_cn29 分钟前
设备健康管理的战略升维:用预测性维护重构企业竞争力
人工智能
量子-Alex29 分钟前
【目标检测】【ICCV 2021】条件式DETR实现快速训练收敛
人工智能·目标检测·计算机视觉
合作小小程序员小小店1 小时前
web安全开发,在线%机器学习异常流量检测系统%开发demo
人工智能·python·mysql·机器学习·sklearn
sbc-study1 小时前
混沌映射(Chaotic Map)
开发语言·人工智能·python·算法
Huangdroid1 小时前
LangChain完全指南:从入门到精通,打造AI应用开发新范式
人工智能·python·langchain
要努力啊啊啊1 小时前
大语言模型中的注意力机制详解
人工智能·语言模型·自然语言处理
TimTu1 小时前
RWKV-7 架构理解
人工智能·rwkv·deeplearning
后端小肥肠1 小时前
即梦3.0+Coze王炸联动:10w+小人国微观生活视频轻松量产!(附喂饭级教程)
人工智能·aigc·coze
华院计算2 小时前
华院计算出席信创论坛,分享AI教育创新实践并与燧原科技共同推出教育一体机
人工智能·科技·百度