【AI应用开发】 RAG篇(一):概述与核心架构

【AI应用开发】 RAG篇(一):概述与核心架构

前言

现在大模型落地业务,90% 的企业场景都会优先上 RAG(检索增强生成)。不管是知识库问答、智能客服还是私有文档助手,RAG 都是绕不开的核心方案。

本文作为系列第一篇,通俗易懂讲清:什么是 RAG、为什么必须用 RAG、完整双阶段架构流程。新手程序员看完就能搭建最简 RAG Demo。


目录

  1. [什么是 RAG](#什么是 RAG)
    • 1.1 基础定义
    • 1.2 RAG 解决大模型三大原生痛点
  2. [为什么要用 RAG](#为什么要用 RAG)
    • 2.1 两种给大模型注入新知识的方案:微调 vs RAG
    • 2.2 RAG 主流落地场景
  3. [RAG 的核心完整架构](#RAG 的核心完整架构)
    • 3.1 阶段一:离线索引阶段(数据预处理入库)
    • 3.2 阶段二:在线查询阶段(用户实时问答)
    • 3.3 RAG 核心底层逻辑:Embedding 语义对齐

1. 什么是 RAG

1.1 基础定义

RAG(Retrieval-Augmented Generation,检索增强生成)

简单说:大模型回答用户问题前,先去外部私有知识库检索相关原文,再拿着检索到的真实资料生成答案,而非仅依靠模型自身训练记忆。

生活化比喻,快速理解

我们可以把整套系统拆成三个角色,很好理解:

角色 对应组件 职责
用户 提问方 提出业务问题的员工 / 客户
检索器(Retriever) 资料库管理员 在海量文档里快速筛选相关片段
LLM 大模型 领域专家 只记住训练数据的专家,需要管理员提供资料才能准确作答

1.2 RAG 解决大模型三大原生痛点

原生大模型存在无法规避的短板,RAG 针对性解决:

问题 具体表现 RAG 解决方案
知识截止问题 模型训练数据固定,无法获取最新业务、实时资讯 知识库可随时新增 / 更新文档,检索实时生效
模型幻觉 遇到陌生知识凭空编造虚假内容,误导业务 生成答案强制绑定检索原文,有据可溯源,大幅降低胡说
私有领域知识缺失 企业内部文档、行业专业内容不在训练数据内 自有文档向量化入库,推理时调取内部资料

三个痛点的本质是同一个问题:大模型的"记忆"是训练时固化的,无法动态获取外部信息。RAG 给大模型装了一个"搜索引擎",让它回答问题前先查资料,从根本上改变了模型的运作方式。


2. 为什么要用 RAG

2.1 两种给大模型注入新知识的方案:微调 vs RAG

想要让大模型掌握企业私有知识,行业只有两条主流路线,两者互补而非对立:

对比维度 微调(Fine-tuning) RAG(检索增强)
底层原理 训练更新模型权重,永久修改模型认知 不改动模型权重,推理阶段动态注入外部文档
知识更新成本 新增文档需重新训练,耗时耗算力 文档上传入库即可生效,实时更新
答案溯源能力 无法定位回答来源,难以校验真实性 每条回答可绑定对应原始文档段落,方便审计
硬件成本 需要高显存 GPU,训练成本高 仅推理算力,向量库开销低,中小企业友好
适用场景 统一输出格式、优化对话风格、统一语气 事实类问答、动态知识库、频繁更新文档场景
工程最佳实践

两者组合使用,而非二选一:

  • RAG 负责提供真实业务知识,确保答案准确
  • 微调 统一模型输出规范、对话风格,让回答更符合业务调性

实际落地顺序:先上 RAG 解决"能不能答对"的问题,再考虑微调优化"答得好不好看"。


2.2 RAG 主流落地场景

场景 说明 典型例子
企业内部知识库问答 员工查询制度、文档、规范 人事制度、产品接口文档、技术规范
行业智能客服 匹配产品手册、FAQ、历史工单 电商售后、金融咨询、运营商客服
专业辅助系统 法条/病例/政策检索辅助决策 法律法条检索、医疗病例辅助、政务政策问答
科研写作助手 检索论文文献辅助写作 撰写综述、实验报告、文献调研
个人知识库 本地笔记、文档私有问答 个人笔记检索、学习资料问答

这些场景的共同特点是:知识量大、更新频繁、对准确性要求高------恰好是 RAG 最擅长的领域。


3. RAG 的核心完整架构

整套 RAG 系统分为两大独立流程:

  • 离线索引构建阶段:一次性或定时执行,把文档处理好存起来
  • 在线查询问答阶段:用户实时请求,检索 + 生成同步完成

3.1 阶段一:离线索引阶段(数据预处理入库)

作用:把企业海量原始文档,处理成向量数据库可检索的数据。离线提前执行,不占用线上问答耗时。

流程链路
复制代码
原始文档 → 文档解析 → 文本切分 (Chunking) → Embedding 向量化 → 存入向量数据库
分步拆解

① 文档解析

  • 解析 PDF、Word、Markdown、HTML 等多种格式文件
  • 提取纯文本内容
  • 过滤水印、空白行、无效页眉页脚、乱码字符

这一层的质量直接决定后续所有的效果------垃圾进,垃圾出。建议根据实际文档格式选用专业的解析库(PyPDF2、python-docx、Unstructured 等),必要时针对企业特有格式做定制解析。

② 文本切分(Chunking)

  • 将超长文档拆分为固定长度的文本块(Chunk)
  • Chunk 是检索的最小单元,每个 Chunk 独立被检索和召回
  • Chunk 长度直接影响召回效果------太长引入噪声,太短丢失上下文

切分策略的选择将在第三篇《文档切分与多路检索》中详细展开,包括固定长度、语义切分、递归切分等多种方案。

③ Embedding 向量化

  • 使用嵌入模型,将每一段 Chunk 文本转为低维数字向量(通常 768 或 1536 维)
  • 核心原理:语义相近的文本,在向量空间中距离更近
  • 同一套系统必须使用同一个 Embedding 模型
python 复制代码
# 概念示意(非完整代码)
chunk_text = "年假申请需要提前三个工作日提交..."
vector = embedding_model.encode(chunk_text)
# 结果: [0.023, -0.451, 0.891, ..., 0.132]  ← 1536 维向量

④ 向量入库

  • 向量 + 对应原文 + 元数据(文档名称、页码、分类、更新时间)一并存入
  • 向量数据库负责持久化存储和高效相似度检索
  • 元数据留作后续过滤条件(如"只检索技术文档")

3.2 阶段二:在线查询阶段(用户实时问答)

用户发起提问后,实时执行检索 + 生成,完整链路:

复制代码
用户提问 → 查询处理 → Query向量化 → 向量库相似度检索 TopK → (Re-rank重排) → 拼接Prompt → LLM生成回答
分步讲解

① 查询处理(Query Processing)

可选但强烈推荐的优化步骤,直接决定了检索质量的上限:

  • 清洗口语化问题:用户输入"那个什么,就是上次说的请假怎么搞来着?"→ 清洗为"请假申请流程"
  • 多意图拆分:"年假怎么申请?病假需要什么材料?" → 拆分为两个独立查询分别检索
  • 同义扩展:为关键词补充同义词,提升召回覆盖面
  • 指代消解:多轮对话中,"它有什么限制?" → 补全为"年假申请有什么限制?"

② Query Embedding

  • 和离线阶段使用同一个嵌入模型,保证向量空间一致
  • 将用户问题转为与文档 chunk 相同的向量格式

③ 向量相似度检索

  • 在向量库中计算距离(余弦相似度、欧氏距离等)
  • 召回相似度最高的 Top-K 个文本块
  • K 值选择需要权衡:太小丢信息,太大引入噪声。典型范围 3~10

④ 【进阶优化】Re-rank 重排序

  • 对粗召回的 K 个候选片段进行精细化二次打分
  • 使用更强但更慢的重排序模型(如 Cohere Rerank、BGE-Reranker)
  • 过滤无关内容,最终只保留最相关的 3~5 个片段送入 LLM
  • 效果提升显著:相同召回基础下,重排后答案准确率可提升 10%~30%

Re-rank 是 RAG 系统从"能用"到"好用"的关键跨越,第四篇将详细展开。

⑤ Prompt 构造

将用户原始问题 + 筛选后的高质量文档片段拼接成提示词:

复制代码
基于以下参考资料回答用户问题:

【参考资料 1】(来源:员工手册-第3章,第2页)
年假申请需提前三个工作日提交OA系统,经直属上级审批...

【参考资料 2】(来源:考勤制度-请假章节,第5页)
年假天数按工龄计算:1-10年5天,10-20年10天...

【用户问题】
公司年假怎么申请?我能休几天?

请基于上述资料回答,注明引用来源。如资料不足,明确说明。

⑥ LLM 生成答案

  • 大模型仅基于提供的检索文档作答
  • 输出完整回答,附带原文引用来源
  • 如果资料不足,模型应诚实说明"依据现有资料无法回答",而非编造

3.3 RAG 核心底层逻辑:Embedding 语义对齐

整套检索能生效的根本,在于 Embedding 模型的语义编码能力:

情况 说明 举例
语义相近,表达不同 向量空间距离近,能被检索匹配 "如何申请公司年假" 和 "年假申请流程是什么" → 向量高度相似
语义无关 向量距离很远,不会被误召回 "年假申请" 和 "办公电脑维修流程" → 向量差距大,不会匹配

这个"语义相近 → 向量相近"的数学性质,是整个 RAG 检索能力的物理基础。Embedding 模型的质量,决定了 RAG 系统的检索天花板。

下一篇将深入拆解:向量相似度到底怎么算?有哪些高效的近似检索算法?7 款主流向量数据库怎么选?Embedding 模型怎么评估?敬请期待《Embedding 与向量数据库》。


本篇小结

知识点 一句话总结
RAG 是什么 先检索外部文档,再基于文档生成答案
解决什么问题 知识截止、模型幻觉、私有知识缺失
RAG vs 微调 RAG 管"答得准",微调管"答得好看",组合使用
离线阶段 文档 → 切分 → 向量化 → 入库,提前执行
在线阶段 提问 → 向量检索 → 重排 → 拼 Prompt → LLM 回答
底层原理 Embedding 把语义相近的文本映射到相近的向量

下一篇将深入 Embedding 与向量数据库,从数学原理到工程选型一次讲透。


下一篇文章 :第二篇《Embedding 与向量数据库》 --- 深入讲解向量相似度计算、ANN 近似检索算法、主流向量库选型对比、Embedding 模型选择标准。

相关推荐
泯泷11 小时前
像项目经理一样指挥 AI 团队:管理者模式
人工智能·llm·agent
DigitalOcean15 小时前
Kimi K3.1 Pro 现已上线 DigitalOcean 无服务器推理
llm
泯泷16 小时前
AI 最坑的失败:不是不会做,而是"假装做完了"
人工智能·llm·agent
nice_lcj52017 小时前
【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端
java·后端·spring·spring ai·ai应用开发
mantou13220 小时前
只用 Cloudflare 全家桶,给游戏站做一个 RAG 搜索和问答
人工智能·llm
泯泷21 小时前
大模型会吃掉 Harness 吗?Agent 天空上的“两朵乌云”
人工智能·llm·agent
Java后端的Ai之路1 天前
RAG 还是 Agent 自主检索?Claude Code 删掉向量库之后,我把选型讲透了
开发语言·人工智能·prompt·agent·rag
泯泷1 天前
一个小改动,让 Claude 在 SWE-bench 上刷新纪录:工具描述有多重要
llm·agent·claude
泯泷1 天前
模型越聪明越健忘?“上下文腐烂”背后的 3 个解法
人工智能·llm·agent
吴凡wudianmei2 天前
RAG 别只会向量检索:玄镜为什么加了「特征加权」
llm·agent