模型的知识来自训练数据,它不知道你公司的内部文档、你的产品手册、上周刚更新的规章制度。RAG(Retrieval-Augmented Generation,检索增强生成)就是让模型基于你自己的资料回答问题的方法。
一、RAG 解决什么问题
大模型直接回答有三个局限:
- 不知道私有信息:内部文档、业务数据从没出现在训练数据里。
- 知识有截止时间:训练之后发生的事情它不知道。
- 可能编造:不知道答案时,模型可能给出看似合理但错误的回答。
RAG 的思路很简单:先检索,再回答。根据问题从资料库里找出相关片段,放进上下文,让模型基于这些片段作答。就像开卷考试。
二、基本流程
RAG 分为两个阶段:
离线阶段:建立索引
- 收集文档:Markdown、PDF、网页、数据库记录等。
- 切分:把长文档切成较小的片段(chunk)。
- 向量化:用 Embedding 模型把每个片段转换成一个向量,语义相近的文本,向量也相近。
- 入库:把向量和原文存进向量数据库。
在线阶段:检索与生成
- 把用户的问题也转换成向量。
- 在向量库中找出最相似的若干个片段。
- 把这些片段和问题一起放进上下文。
- 模型基于片段生成回答,最好注明出处。
三、影响效果的关键环节
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:规划、反思与任务分解
返回系列总目录