让 AI 更懂行:一文读懂检索增强生成(RAG)
你有没有过这样的经历?问 AI 一个专业问题,比如 “2024 年最新的新能源汽车补贴政策”,它却给你一套 2022 年的答案;或者让它解释 “量子计算中的量子隧穿效应”,结果说出来的内容似是而非,甚至有明显错误。
这不是 AI “不努力”,而是大语言模型(LLM)天生有两个短板:知识有保质期(训练数据截止到某个时间点,之后的新信息不知道)、容易 “瞎编”(遇到不懂的问题可能硬凑答案)。
而今天要讲的检索增强生成(RAG),就是给 AI “装个外挂”,让它既能回答最新知识,又能说得更靠谱。
一、为什么需要RAG?专业知识的获取之道
大型语言模型(LLM)虽然强大,但它的知识仅限于训练数据。当需要处理专业领域知识或私有数据时,有三种主要解决方案:
-
RAG(检索增强生成)
-
实时从外部知识库检索信息
-
将检索结果与问题一起交给LLM生成答案
-
优势:知识实时更新,成本低
-
场景:客服系统、实时金融数据查询
-
-
模型微调(Fine-tuning)
-
使用专业数据重新训练模型
-
调整模型参数适应特定领域
-
优势:响应速度快(单次模型调用)
-
场景:自动驾驶系统、专业文档生成
-
-
混合策略
-
结合RAG和微调的优势
-
基础能力通过微调实现
-
实时知识通过RAG补充
-
选择指南:
✅ 优先微调:自动驾驶、实时翻译等毫秒级响应场景
✅ 优先RAG:客服机器人、股票咨询等知识频繁更新场景
✅ 混合方案:医疗诊断等复杂专业场景举个例子:
- 如果你做 “古诗生成” APP,用微调更合适(古诗知识几百年不变)。
- 如果你做 “电商客服机器人”,用 RAG 更合适(商品价格、库存天天变,改改知识库就行)。

二、什么是 RAG?给 AI 开 “卷” 考试的能力
检索增强生成(Retrieval-Augmented Generation),简单说就是:
在 AI 回答问题前,先让它从你的专属知识库(比如公司文档、行业报告、最新新闻)里 “搜资料”,再把搜到的信息和问题一起交给 AI,让它基于这些资料生成答案。
打个比方:
- 没有 RAG 的 AI,像闭卷考试的学生,全靠记忆答题,记不清就可能错。
- 有 RAG 的 AI,像开卷考试的学生,答题时可以翻书、查笔记,答案既准又新。
三、RAG vs 微调:两种让 AI “变专业” 的方法怎么选?
除了 RAG,还有一种让 AI 懂专业知识的方法叫 “微调”(Fine-tuning)。两者的区别,用生活例子一看就懂:
| 对比维度 | 微调(Fine-tuning) | RAG(检索增强生成) |
|---|---|---|
| 原理 | 用专业数据重新 “训练” AI,让它把知识 “背下来” | 不训练 AI,让它答题时 “临时查资料” |
| 知识更新 | 难(更新后需要重新 “背”,成本高) | 易(直接改知识库内容,AI 下次查就自动获取新信息) |
| 成本 | 高(需要大量数据和计算资源,像请老师一对一补课) | 低(只需准备知识库,像给学生配一本参考书) |
| 适用场景 | 知识稳定、少更新的领域: 比如古诗创作(唐诗宋词不会变)、法律条文解读(几年才修订一次) |
知识频繁更新的领域: 比如电商客服(商品价格天天变)、新闻问答(每天都有新事件)、股票咨询(实时行情更新) |
混合策略:复杂场景可以结合两者优势。比如先微调一个 “基础版” AI(让它熟悉行业术语),再用 RAG 接入实时数据(让它获取最新信息),像金融领域的 AI 助手,既懂金融术语,又能查当天股市行情。

三、RAG 的 “核心引擎”:向量搜索技术详解
RAG 能快速找到 “相关资料”,靠的是向量搜索(语义搜索)。它比传统的 “关键词搜索” 聪明得多,我们一步步拆解:
1. 向量:给文字编一串 “数字密码”
你可能会问:“文字怎么能被‘搜索’呢?” 向量搜索的第一步,是把文字转换成 “数字向量”。
-
什么是向量? 就是一串数字,用来描述文字的 “语义特征”。
比如:- “猫” 的向量:
[0.8, 0.2, -0.5, 0.3](这串数字代表 “动物、毛茸茸、会叫、小型” 等特征) - “狗” 的向量:
[0.7, 0.3, -0.4, 0.2](和 “猫” 的向量很像,因为都是宠物) - “汽车” 的向量:
[-0.6, 0.9, 0.2, -0.1](和 “猫” 的向量差别很大)
简单说:意思越接近的文字,向量越相似。
- “猫” 的向量:
2. 维度:描述 “语义特征” 的角度
向量的 “维度”,就是描述文字的 “特征角度”。维度越多,描述越精准。
-
比如描述 “一杯奶茶”,可以有这些维度(特征):
维度(特征) 数值(0-10 分) 甜度 8(全糖) 冰度 5(少冰) 是否加珍珠 1(是) 价格(元) 18 这杯奶茶的向量就是:
[8, 5, 1, 18]。 -
再比如描述 “一篇文章”,维度可能是 “主题(科技 / 娱乐)”“情感(正面 / 负面)”“篇幅(长 / 短)” 等,每个维度用数字表示,最终形成一个多维度向量。
3. 相似度计算:判断两句话 “像不像”
向量搜索的核心是 “找相似”。比如用户搜 “轿车”,我们希望返回 “汽车”“vehicle” 等相关内容,这就要靠 “相似度计算”。
最常用的是余弦相似度(不用记公式,理解逻辑即可):
- 两个向量 “方向越接近”,余弦相似度越高(比如 “轿车” 和 “汽车” 的向量,方向几乎一致,相似度≈0.9)。
- 两个向量 “方向越相反”,余弦相似度越低(比如 “热水” 和 “冰块” 的向量,方向相反,相似度≈-0.8)。
举个例子:
- 用户问 “什么车适合家庭用?”,向量是 A。
- 知识库中 “SUV 空间大,适合家庭出行” 的向量是 B,“跑车速度快,适合单人驾驶” 的向量是 C。
- 计算发现 A 和 B 的余弦相似度(0.8)远高于 A 和 C(0.2),所以优先返回 B 对应的内容。
相似度计算四大方法
| 方法 | 特点 | 适用场景 |
|---|---|---|
| 余弦相似度 | 专注方向差异 | 语义匹配 |
| 欧几里得距离 | 计算空间直线距离 | 简单数值匹配 |
| 点积 | 考虑方向和大小 | 综合匹配 |
| 曼哈顿距离 | 计算网格路径距离 | 分类特征匹配 |
4. 为什么向量搜索比关键词搜索强?
- 关键词搜索的局限:比如搜 “苹果”,只会返回带 “苹果” 二字的内容,可能漏掉 “iPhone”“Mac”(虽然都是苹果公司产品)。
- 向量搜索的优势:能 “理解语义”。搜 “苹果手机” 时,会找到向量相似的 “iPhone”“苹果 15” 等内容,哪怕文字里没直接出现 “苹果手机” 四个字。
四、RAG 完整工作流程:从 “喂资料” 到 “答问题”
RAG 的工作过程分两大阶段:索引阶段(提前准备知识库)和检索阶段(实时回答问题)。我们结合具体工具(以 LangChain4j 为例)拆解每一步:
阶段 1:索引阶段 —— 给 AI “喂资料”(离线准备)
这一步是提前处理知识库,让 AI 后续能快速查到资料。流程如下:

1. 加载文档:把你的资料 “搬进系统”
需要把各种格式的文档(TXT、PDF、Word、网页、Excel 等)加载到系统中。LangChain4j 提供了多种 “文档加载器”:
| 文档来源 | 工具类 | 用法示例 |
|---|---|---|
| 本地文件 | FileSystemDocumentLoader | 加载D:/知识库/产品手册.txt |
| 网页内容 | UrlDocumentLoader | 加载https://www.example.com/news的网页内容 |
| 阿里云 OSS | AliyunOssDocumentLoader | 加载阿里云 OSS 存储的文档 |
| 腾讯云 COS | TencentCosDocumentLoader | 加载腾讯云 COS 存储的文档 |
| GitHub 仓库 | GitHubDocumentLoader | 加载 GitHub 仓库里的代码或文档 |
代码示例(加载本地 TXT):
import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.loader.FileSystemDocumentLoader;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class RAGTest {
@Test
public void testReadDocument() {
//使用FileSystemDocumentLoader读取指定目录下的知识库文档
// 加载本地TXT文档,默认用TextDocumentParser解析
Document document = FileSystemDocumentLoader.loadDocument("D:/知识库/产品手册.txt");
System.out.println("文档内容:" + document.text()); // 打印文档内容
}
}
如果是 PDF/Word,需要指定解析器:
比如解析 PDF,先添加依赖:
<!-- 解析PDF的依赖 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-document-parser-apache-pdfbox</artifactId>
<version>${langchain4j.version}</version>
</dependency>

最低0.47元/天 解锁文章
1603

被折叠的 条评论
为什么被折叠?



