AI Agent原理篇09:RAG:检索增强生成原理

模型的知识来自训练数据,它不知道你公司的内部文档、你的产品手册、上周刚更新的规章制度。RAG(Retrieval-Augmented Generation,检索增强生成)就是让模型基于你自己的资料回答问题的方法。

一、RAG 解决什么问题

大模型直接回答有三个局限:

  • 不知道私有信息:内部文档、业务数据从没出现在训练数据里。
  • 知识有截止时间:训练之后发生的事情它不知道。
  • 可能编造:不知道答案时,模型可能给出看似合理但错误的回答。

RAG 的思路很简单:先检索,再回答。根据问题从资料库里找出相关片段,放进上下文,让模型基于这些片段作答。就像开卷考试。

二、基本流程

RAG 分为两个阶段:

离线阶段:建立索引

  1. 收集文档:Markdown、PDF、网页、数据库记录等。
  2. 切分:把长文档切成较小的片段(chunk)。
  3. 向量化:用 Embedding 模型把每个片段转换成一个向量,语义相近的文本,向量也相近。
  4. 入库:把向量和原文存进向量数据库。

在线阶段:检索与生成

  1. 把用户的问题也转换成向量。
  2. 在向量库中找出最相似的若干个片段。
  3. 把这些片段和问题一起放进上下文。
  4. 模型基于片段生成回答,最好注明出处。

三、影响效果的关键环节

1. 切分

切分是 RAG 中最容易被忽视、又最影响效果的环节。

  • 切得太大:一个片段包含太多无关内容,检索不精准,还浪费上下文。
  • 切得太小:上下文被切断,片段单独看不知所云。
  • 比较好的做法是按文档的自然结构切:按章节、段落、标题切,而不是机械地每 500 字切一刀。片段之间可以保留一些重叠。
  • 给每个片段附上元信息:来自哪篇文档、哪个章节、更新时间,方便过滤和引用。

2. 检索

  • 向量检索擅长语义匹配:问「怎么退货」能找到写着「退换货流程」的段落。
  • 关键词检索擅长精确匹配:产品型号、错误码、人名这类专有名词,向量检索反而可能找不准。
  • 实际中常用混合检索:两种方式各取一批结果再合并。

3. 重排序

初步检索出的几十个片段,用一个更精细的模型(重排序模型)重新打分,只把最相关的几个放进上下文。能显著提升质量。

4. 生成

  • 在提示中要求模型「只根据提供的资料回答,资料里没有的就说不知道」。
  • 要求模型标注引用来源,方便用户核对。

四、RAG 与 Agentic Search

传统 RAG 是固定流程:一个问题,检索一次,生成一次。它的问题是:如果第一次检索没找到,就没有补救机会了。

在 Agent 中,检索可以变成一个工具,由模型自己决定:

  • 搜什么关键词;
  • 搜一次不够,换个说法再搜;
  • 先搜到文档目录,再读具体章节;
  • 结合多次搜索结果再回答。

这种方式叫 Agentic Search 或 Agentic RAG。它更灵活,能处理需要多步查找的复杂问题,代价是更慢、更贵。

传统 RAG Agentic Search
检索次数 固定一次 模型决定,可多次
查询词 直接用用户问题 模型自己构造和改写
适合 问题简单、资料集中 问题复杂、需要多处信息拼合
成本 低 较高

另一个趋势是:对代码库、文档目录这类本身就有良好结构的资料,直接给 Agent 文件列表和搜索工具(类似 grep),效果往往不比向量检索差,而且省去了建索引的麻烦。

五、什么时候不需要 RAG

  • 资料总量不大,能直接放进上下文的,直接放进去更简单。
  • 需要精确查询的结构化数据,比如订单、库存,用数据库查询工具,而不是向量检索。

本篇小结

  • RAG:先检索相关资料,再基于资料生成回答。
  • 流程:切分 → 向量化 → 入库 → 检索 → 生成。
  • 关键环节:按自然结构切分、混合检索、重排序、要求引用。
  • Agentic Search 把检索变成工具,由模型决定搜什么、搜几次。
  • 资料少就直接放进上下文;结构化数据用数据库查询。

思考与练习

  • 把一套技术文档做成知识库,以什么为单位切分比较合适?需要给片段附上哪些元信息?
  • 用户问「型号 X200 的保修期是多久」,为什么纯向量检索可能找不准?怎么改进?

上一篇:AI Agent原理篇08:记忆机制:短期记忆、长期记忆与检索
下一篇:AI Agent原理篇10:规划、反思与任务分解
返回系列总目录

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇