一、引言:为什么需要 RAG
随着大语言模型(LLM)的快速发展,其在自然语言理解与生成任务中展现出了极强能力。然而,纯粹依赖预训练模型存在几个关键问题:
-
知识过时(Knowledge Cutoff)
模型只能基于训练数据中的知识,无法获取最新信息。
-
幻觉问题(Hallucination)
模型可能生成"看起来正确但实际上错误"的内容。
-
领域知识不足
对于企业私有数据、垂直领域知识(如医疗、工业、金融),模型通常无法覆盖。
-
不可控性与不可追溯性
生成结果缺乏明确来源,难以验证。
为了解决这些问题,RAG(Retrieval-Augmented Generation,检索增强生成)应运而生。
二、什么是 RAG
2.1 定义
RAG(检索增强生成)是一种将**信息检索(Retrieval)与文本生成(Generation)**相结合的架构,通过在生成过程中引入外部知识库,使模型能够基于"实时检索到的信息"进行回答。
核心思想:
先查资料,再回答问题,而不是完全靠记忆。
2.2 基本流程
RAG通常包含以下几个步骤:
-
用户提出问题(Query)
-
将问题进行向量化(Embedding)
-
在向量数据库中检索相关文档(Top-K)
-
将检索结果作为上下文(Context)拼接到 Prompt 中
-
输入大模型进行生成(LLM Generation)
-
输出结果
2.3 架构图(逻辑)
用户问题
↓
Embedding编码
↓
向量数据库检索(Top-K)
↓
构建Prompt(问题 + 上下文)
↓
LLM生成答案
↓
输出结果
三、RAG 属于什么工程体系
RAG并不是单一技术,而是一个跨多个领域的工程体系,主要涉及:
3.1 Prompt Engineering(提示工程)
RAG中最关键的一步是如何构造 Prompt:
-
如何组织上下文
-
如何限制模型回答范围
-
如何减少幻觉
例如:
请基于以下资料回答问题,如果无法从资料中找到答案,请回答"未知"。
资料:
{context}
问题:
{question}
3.2 Context Engineering(上下文工程)
RAG的核心在于"给模型喂什么上下文"。
关键问题:
-
检索多少条(Top-K)
-
文本如何切分(Chunking)
-
是否做重排序(Rerank)
-
是否做摘要压缩(Compression)
3.3 Retrieval Engineering(检索工程)
涉及信息检索系统设计:
-
向量检索(Vector Search)
-
混合检索(BM25 + 向量)
-
重排序模型(Cross Encoder)
3.4 Data Engineering(数据工程)
RAG效果很大程度取决于数据质量:
-
文档清洗
-
分段策略
-
元数据设计(metadata)
-
数据更新机制
3.5 LLM Engineering(模型工程)
包括:
-
模型选择(GPT / Claude / 开源模型)
-
推理优化
-
Token控制
3.6 Agent / Harness Engineering(智能体工程)
在复杂系统中,RAG通常作为Agent的一部分:
-
多工具调用(Tool Use)
-
多轮对话记忆(Memory)
-
多阶段推理(Chain / Graph)
四、RAG 的核心技术详解
4.1 文本切分(Chunking)
为什么要切分?
因为:
-
LLM上下文有限
-
检索需要粒度更细
常见策略:
| 方法 | 描述 |
|---|---|
| 固定长度切分 | 按token数切 |
| 语义切分 | 按段落/句子 |
| 滑动窗口 | 保留上下文重叠 |
4.2 向量化(Embedding)
将文本转为向量:
text → embedding vector
常见模型:
-
OpenAI embedding
-
BGE(开源)
-
E5
关键指标:
-
语义相似度
-
向量维度
-
计算效率
4.3 向量数据库(Vector DB)
用于存储和检索向量:
常见系统:
-
FAISS(本地)
-
Milvus
-
Pinecone
-
Weaviate
功能:
-
相似度搜索(cosine / dot)
-
Top-K检索
-
过滤(metadata filter)
4.4 检索优化(Retrieval Optimization)
1)Top-K选择
-
太小 → 信息不足
-
太大 → 噪音增加
2)Rerank(重排序)
使用更强模型重新排序:
Query + Doc → relevance score
3)Hybrid Search(混合检索)
结合:
-
关键词(BM25)
-
向量检索
4.5 Prompt 构建(Prompt Construction)
关键设计点:
-
上下文顺序
-
是否标注来源
-
是否限制回答范围
示例:
你是一个知识助手,请严格基于以下内容回答:
【文档1】
...
【文档2】
...
问题:
xxx
4.6 生成控制(Generation Control)
包括:
-
temperature(控制随机性)
-
max tokens(长度控制)
-
system prompt(角色设定)
五、RAG 的工作模式
5.1 Naive RAG(基础版)
最简单流程:
检索 → 拼接 → 生成
问题:
-
上下文冗余
-
检索不精准
5.2 Advanced RAG(进阶版)
引入:
-
Rerank
-
Query Rewrite
-
多轮检索
5.3 Agentic RAG(智能体RAG)
特点:
-
多步推理
-
动态检索
-
工具调用
例如:
问题 → 拆解 → 多次检索 → 汇总 → 输出
六、RAG 如何使用(实战流程)
6.1 步骤一:准备数据
-
PDF / Word / 数据库
-
清洗无用内容
-
转为纯文本
6.2 步骤二:切分文档
例如:
每段 500 tokens + 50 overlap
6.3 步骤三:生成向量并入库
chunks → embedding → vector DB
6.4 步骤四:查询流程
用户问题 → embedding → 检索Top-K → 构建Prompt → LLM生成
6.5 示例代码(伪代码)
// 1. 向量化
const queryVector = embed(query)
// 2. 检索
const docs = vectorDB.search(queryVector, topK=5)
// 3. 构建上下文
const context = docs.map(d => d.text).join('\n')
// 4. Prompt
const prompt = `
基于以下内容回答问题:
${context}
问题:${query}
`
// 5. 调用LLM
const answer = llm.generate(prompt)
七、RAG 的优势
7.1 实时性
无需重新训练模型即可更新知识。
7.2 可控性
可以限制模型只基于提供内容回答。
7.3 可追溯
可以返回引用来源。
7.4 成本低
比微调(Fine-tuning)更便宜。
八、RAG 的局限性
8.1 检索质量决定上限
"垃圾进 → 垃圾出"
8.2 上下文长度限制
LLM token有限。
8.3 多跳推理困难
复杂问题需要多次检索。
8.4 延迟增加
多一步检索流程。
九、RAG vs Fine-tuning
| 对比项 | RAG | Fine-tuning |
|---|---|---|
| 更新知识 | 快 | 慢 |
| 成本 | 低 | 高 |
| 实时性 | 强 | 弱 |
| 控制性 | 高 | 中 |
结论:
企业应用优先RAG,模型能力增强再考虑微调。
十、RAG 在实际场景中的应用
10.1 企业知识库问答
-
内部文档查询
-
技术支持系统
10.2 智能客服
-
FAQ自动回答
-
工单辅助
10.3 工业/IoT场景(你这种场景特别适合)
结合设备数据:
-
说明书检索
-
故障诊断
-
传感器数据解释
10.4 编程助手
-
代码库检索
-
API文档查询
十一、RAG 的进阶优化方向
11.1 Query Rewrite(查询改写)
让问题更适合检索:
用户问题 → 标准化问题
11.2 Context Compression(上下文压缩)
减少token占用:
-
摘要
-
过滤无关内容
11.3 多轮对话记忆融合
历史对话 + 当前问题 → 检索
11.4 Graph RAG(图增强RAG)
结合知识图谱:
-
实体关系
-
多跳推理
十二、总结
RAG的本质可以用一句话概括:
让大模型从"闭卷考试"变成"开卷考试"。
它不是替代模型,而是增强模型。
十三、关键理解(重点)
-
RAG不是模型,是系统架构
-
核心在于"检索 + 上下文设计"
-
数据质量 > 模型能力
-
Context Engineering 是RAG的灵魂