0%

RAG 检索增强生成优化:提升 AI 准确率的关键技术

RAG 检索增强生成优化:提升 AI 准确率的关键技术

写在前面:RAG(检索增强生成)是企业 AI 落地的首选方案。这篇文章详解 RAG 架构优化、向量检索技巧和真实业务场景应用。


一、RAG 架构详解

1.1 核心流程图

1
2
3
4
5
6
7
8
9
10
11
flowchart LR
A[用户问题] --> B[检索相关文档]
B --> C[拼接上下文]
C --> D[LLM 生成]
D --> E[返回答案]

style A fill:#e1f5ff
style B fill:#fff4e1
style C fill:#f0e1ff
style D fill:#e1ffe1
style E fill:#ffe1e1

1.2 完整架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
flowchart TB
subgraph 数据准备
A1[文档加载] --> A2[文本分块]
A2 --> A3[向量嵌入]
A3 --> A4[向量存储]
end

subgraph 查询处理
B1[用户问题] --> B2[问题嵌入]
B2 --> B3[相似度检索]
B3 --> B4[重排序]
end

subgraph 答案生成
C1[拼接上下文] --> C2[LLM Prompt]
C2 --> C3[生成答案]
C3 --> C4[返回结果]
end

A4 --> B3
B4 --> C1

1.3 架构组件对比

组件 作用 技术选型 推荐度
文档加载 读取各种格式 LangChain Loaders ⭐⭐⭐⭐⭐
文本分块 切分为合适大小 RecursiveCharacter ⭐⭐⭐⭐⭐
向量嵌入 文本转向量 OpenAI/BGE/M3E ⭐⭐⭐⭐
向量存储 存储和检索 Pinecone/Milvus ⭐⭐⭐⭐⭐
检索器 查找相关文档 Similarity Search ⭐⭐⭐⭐
生成器 生成答案 Qwen/GPT ⭐⭐⭐⭐⭐

二、向量检索优化

2.1 嵌入模型对比

1
2
3
4
5
6
7
8
9
10
11
quadrantChart
title "嵌入模型性能对比"
x-axis "速度慢" --> "速度快"
y-axis "效果差" --> "效果好"
quadrant-1 "推荐:BGE-large-zh"
quadrant-2 "备选:text-embedding-3"
quadrant-3 "低成本:M3E-base"
quadrant-4 "不推荐"
"BGE-large-zh": [0.4, 0.9]
"text-embedding-3": [0.8, 0.7]
"M3E-base": [0.9, 0.6]
模型 维度 中文效果 速度 推荐场景
text-embedding-3 1536 英文为主
BGE-large-zh 1024 最好 中文场景
M3E-base 768 资源受限

2.2 检索策略对比

1
2
3
4
5
6
7
8
9
10
11
12
flowchart LR
subgraph 策略 1
A1[相似度检索] --> A2[返回 Top-K]
end

subgraph 策略 2
B1[MMR 检索] --> B2[多样性 + 相关性]
end

subgraph 策略 3
C1[混合检索] --> C2[关键词 + 向量]
end

results = vectorstore.similarity_search(query, k=5)

1
2
3
4
5
6

**策略 2:MMR(最大边际相关)**
```python
results = vectorstore.max_marginal_relevance_search(
query, k=5, fetch_k=20, lambda_mult=0.5
)

策略 3:混合检索

1
2
# 关键词 + 向量
results = hybrid_search(query, k=5)

三、准确率提升技巧

3.1 分块优化

策略 块大小 重叠 适用场景
小块 256 50 精确查找
中块 512 100 通用场景
大块 1024 200 上下文理解

3.2 重排序

1
2
3
4
5
6
# 检索后重排序
from rerank import Reranker

results = retriever.search(query, k=20)
reranker = Reranker()
top_k = reranker.rerank(query, results, k=5)

3.3 查询改写

1
2
3
4
5
6
7
8
9
10
11
12
# 原始查询
query = "如何部署 K8s"

# 改写后
queries = [
"K8s 部署步骤",
"Kubernetes 安装指南",
"K8s 集群搭建教程"
]

# 多查询检索
results = search_all(queries)

四、实战案例

4.1 企业知识库问答

场景架构图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
flowchart TB
subgraph 数据源
A1[员工手册]
A2[技术文档]
A3[常见问题]
end

subgraph RAG 系统
B1[文档加载] --> B2[向量嵌入]
B2 --> B3[向量检索]
B3 --> B4[重排序]
B4 --> B5[LLM 生成]
end

subgraph 输出
C1[准确答案]
C2[引用来源]
end

A1 & A2 & A3 --> B1
B5 --> C1 & C2

方案

1
2
3
4
5
6
7
8
9
10
11
12
from langchain import VectorDBQA

qa = VectorDBQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever(
search_type="mmr",
search_kwargs={"k": 5}
),
return_source_documents=True
)

result = qa({"query": "年假有多少天?"})

4.2 技术文档问答

优化前后对比

1
2
3
4
5
6
xyChart
title "优化效果对比"
x-axis ["准确率", "响应时间", "用户满意度"]
y-axis "得分" 0 --> 100
bar [65, 80, 70]
bar [92, 95, 90]

场景:开发者询问 API 用法

优化

  • 代码块单独分块
  • API 名称添加同义词
  • 示例代码优先展示

五、常见问题

5.1 检索不相关

解决

  1. 调整嵌入模型
  2. 优化分块策略
  3. 添加查询改写

5.2 回答不准确

解决

  1. 增加检索数量(k 值)
  2. 添加重排序
  3. 优化 Prompt 模板

六、总结

核心要点

  1. 选择合适的嵌入模型
  2. 优化分块策略
  3. 使用混合检索
  4. 添加重排序机制

作者:John
创建时间:2026-02-26
文档版本:v1.0