Skip to content

RAG 完全指南

"RAG 是让 LLM 从'通才'变为'专家'的关键技术。"

RAG(Retrieval-Augmented Generation,检索增强生成) 是一种将信息检索与大语言模型结合的技术架构,通过在生成响应前检索相关的外部知识,显著提升 LLM 回答的准确性、时效性和可靠性。

市场趋势

RAG 市场预计在 2024 年达到 18.5 亿美元,年复合增长率 49%,企业正加速将 RAG 从实验阶段推向生产部署。


一、RAG 基础原理

1.1 RAG 解决的核心问题

问题传统 LLMRAG 解决方案
知识截止训练数据有截止日期实时检索最新信息
幻觉可能编造错误信息基于检索的证据生成
领域知识缺乏专业领域深度接入专业知识库
可追溯性无法追溯信息来源提供引用来源
隐私数据无法访问私有数据安全检索内部文档

1.2 RAG 工作流程

1.3 RAG vs Fine-tuning

方面RAGFine-tuning
数据更新实时更新,无需重训需要重新训练
成本基础设施成本高昂训练成本
可解释性可追溯信息来源黑盒
适用场景知识密集型任务行为/风格调整
部署复杂度需要向量数据库模型部署
组合使用✅ 两者可以组合使用,RAG + Fine-tuned LLM

二、RAG 架构模式

2.1 架构演进:Naive → Advanced → Modular

2.2 主流架构模式

模式说明适用场景
Simple RAG基础检索+生成,无额外优化静态知识库、简单问答
Conversational RAG融入对话历史,支持多轮对话客服、聊天机器人
Branched RAG分类后路由到不同数据源多领域知识库(法律/技术/财务)
HyDE先生成假设答案,再检索相似文档抽象查询、概念性问题
Adaptive RAG根据查询复杂度动态调整策略混合复杂度场景
Corrective RAG (CRAG)评估检索结果后再生成高准确性要求场景
Self-RAG自主评估和修正生成结果需要自我验证的场景
Agentic RAGAgent 编排多工具和知识源复杂推理任务
Graph RAG结合知识图谱增强关系理解实体关系密集的领域
Multimodal RAG支持文本、图像、音频、视频多模态知识库

2.3 Agentic RAG 详解

2025 趋势

Agentic RAG 是当前最受关注的架构模式,它将 RAG 与 Agent 能力结合,实现更复杂的推理和动态探索。


三、数据处理与 Chunking

3.1 Chunking 策略对比

策略说明优势劣势
固定大小按字符/Token 数量切分简单快速破坏语义,切断句子
递归字符分割按段落→句子→词层级分割保留更多上下文可能不均匀
句子分割以句子为基本单位保留完整语义块大小不一
Token 分割按 Token 数量(考虑 LLM 限制)精确控制可能切断语义
语义分割基于 Embedding 相似度识别主题边界最佳语义完整性计算成本高
页面级分割按文档页面分割适合结构化文档依赖文档格式
LLM 分割使用 LLM 识别逻辑边界最高质量成本最高
混合分割组合多种策略灵活适应实现复杂

3.2 推荐的 Chunking 配置

2025 最佳实践

  • 块大小: 256-512 tokens(平衡精确性和上下文)
  • 重叠率: 10-20%(约 50-100 tokens)
  • 保留结构: 保留标题、章节信息作为元数据
python
# 语义分割示例(使用 LangChain)
from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50,
    separators=["\n\n", "\n", "。", ".", " ", ""],
    length_function=len
)

chunks = splitter.split_documents(documents)

3.3 Small-to-Large 策略

一种高级策略:使用小块检索,返回大块上下文。

检索阶段:使用 256 token 小块进行精确匹配

返回阶段:返回包含该小块的 1024 token 父块给 LLM

效果:既有检索精确性,又有充足上下文

四、Embedding 模型选择

4.1 主流 Embedding 模型对比(2025)

模型提供商MTEB 分数维度最大 Token特点
Qwen3-Embedding-8BAlibaba70.58102432K#1 多语言榜单
Gemini EmbeddingGoogle68.3230722K多语言领先
text-embedding-3-largeOpenAI64.630728KMatryoshka 支持
text-embedding-3-smallOpenAI62.315368K高性价比
Cohere Embed v4Cohere65.21536128K多模态+超长上下文
Voyage-3-largeVoyage-102432K顶级检索质量
BGE-M3BAAI63.010248K开源,多功能
NV-Embed-v2NVIDIA69.32409632K高性能(非商用)

4.2 模型选择指南

4.3 Embedding 最佳实践

实践说明
领域微调在特定领域数据上微调可显著提升检索质量
Matryoshka 维度使用可变维度降低存储成本(如 3072→256)
批量处理批量 Embedding 提高吞吐量
缓存策略缓存常用查询的 Embedding
定期更新使用最新模型版本

五、向量数据库选择

5.1 主流向量数据库对比

数据库类型特点最佳场景
Pinecone托管服务Serverless、免运维、高可用企业生产环境
Weaviate开源+托管内置向量化、GraphQL、混合搜索AI 应用+结构化数据
Qdrant开源+托管Rust 高性能、强过滤能力高性能搜索、边缘部署
Chroma开源极简 API、Python 友好开发原型、小规模应用
Milvus开源大规模、分布式、云原生十亿级向量
pgvector扩展PostgreSQL 原生支持已有 PG 基础设施
FAISSMeta 开发、内存索引研究、本地测试

5.2 选择决策树

5.3 向量数据库配置要点

配置项说明推荐值
索引类型HNSW 平衡速度和准确性HNSW
相似度度量余弦相似度适合大多数场景Cosine
ef_construction索引构建质量128-256
ef_search搜索精度(更高=更准但更慢)64-128
Top-K初始检索数量20-50

六、检索优化策略

6.1 Hybrid Search(混合搜索)

结合语义搜索(向量)和关键词搜索(BM25)的优势:

场景向量搜索关键词搜索混合搜索
"AI 如何工作"✅ 语义理解
专有名词 "GPT-4o"❌ 可能混淆✅ 精确匹配
复杂问题部分✅✅

6.2 Query Enhancement(查询增强)

技术说明示例
Query RewritingLLM 重写查询更适合检索"今天天气" → "2026年1月2日北京天气预报"
Query Expansion扩展同义词和相关概念"ML" → "ML, machine learning, 机器学习"
HyDE生成假设答案再检索先生成"理想答案",再找相似文档
Multi-Query生成多个查询版本从不同角度提问

6.3 Re-ranking(重排序)

两阶段检索架构:

第一阶段:快速召回(Bi-Encoder / BM25)
    ↓ Top 50-100 候选文档
    
第二阶段:精准重排(Cross-Encoder)
    ↓ Top 3-10 最相关文档
    
第三阶段:送入 LLM 生成答案
重排器类型说明性能成本
Cross-Encoder同时编码查询和文档高精度
LLM as Judge用 LLM 评估相关性最高
Cohere Rerank托管服务按调用计费
BGE Reranker开源自托管

研究数据

重排序可将检索质量提升高达 48%,减少 LLM 幻觉 35%。


七、生成优化

7.1 Prompt 构建策略

xml
<system>
你是一个基于检索知识回答问题的助手。
请严格基于提供的上下文回答问题。如果上下文中没有相关信息,请明确说明。
</system>

<context>
{retrieved_documents}
</context>

<question>
{user_question}
</question>

<instructions>
1. 仅使用上下文中的信息回答
2. 引用相关来源
3. 如果信息不足,承认不确定性
</instructions>

7.2 上下文压缩

技术说明效果
LLM 压缩用 LLM 提取关键信息减少 50-70% Token
句子窗口只保留关键句子周围内容保留上下文完整性
摘要压缩对长文档生成摘要适合超长文档
去重过滤移除重复或高度相似的块提高信息密度

7.3 引用与归因

python
# 在回答中添加引用
answer = """
根据公司政策文档,年假天数为 15 天 [1]。

参考来源:
[1] 《员工手册》第 5.2 节 - 休假政策
"""

八、评估与监控

8.1 RAGAS 评估框架

RAGAS(Retrieval-Augmented Generation Assessment Suite)是专门为 RAG 设计的评估框架。

指标说明计算方式
Faithfulness答案是否忠实于检索上下文检查答案中每个声明是否可从上下文推断
Answer Relevancy答案与问题的相关性从答案反向生成问题,比较相似度
Context Precision检索上下文的精确度相关块在结果中的排名位置
Context Recall检索上下文的召回率答案所需信息在上下文中的覆盖度
Answer Correctness答案与标准答案的一致性语义相似度 + 事实重叠

8.2 评估代码示例

python
from ragas import evaluate
from ragas.metrics import (
    faithfulness,
    answer_relevancy,
    context_precision,
    context_recall
)

# 准备评估数据
eval_data = {
    "question": ["什么是 RAG?"],
    "answer": ["RAG 是检索增强生成技术..."],
    "contexts": [["RAG 即 Retrieval-Augmented Generation..."]],
    "ground_truth": ["RAG(检索增强生成)是一种结合检索和生成的技术..."]
}

# 运行评估
result = evaluate(
    eval_data,
    metrics=[faithfulness, answer_relevancy, context_precision, context_recall]
)

print(result)
# {'faithfulness': 0.92, 'answer_relevancy': 0.88, ...}

8.3 生产环境监控指标

指标类型具体指标目标值
延迟检索延迟< 200ms
端到端延迟< 2s
质量响应准确率> 95%
Faithfulness> 0.9
成本每次查询成本根据业务定义
Token 使用量优化至最小
可用性服务可用率> 99.9%
错误率< 0.1%

九、生产部署最佳实践

9.1 架构设计原则

原则说明
模块化检索器、生成器、编排器分离,便于独立更新
可观测性完整的日志、指标、追踪
可扩展性支持水平扩展,应对负载变化
容错性降级策略、重试机制
安全性访问控制、数据加密

9.2 缓存策略

缓存层适用内容效果
查询级缓存完全相同的查询最大节省
语义缓存语义相似的查询高命中率
Embedding 缓存文档/查询的 Embedding减少 API 调用
KV 缓存LLM 推理中间状态加速生成

9.3 成本优化

策略节省幅度实施难度
Embedding 维度降低50-80% 存储成本
智能路由简单查询跳过检索
缓存复用30-50% API 成本
小模型预处理减少大模型调用
批量处理提高吞吐量

十、工具与框架

10.1 RAG 开发框架

框架特点适用场景
LangChain模块丰富、社区活跃通用 RAG 开发
LlamaIndex数据处理强大、索引灵活复杂数据源
Haystack生产就绪、管道化企业搜索
Flowise低代码、可视化快速原型
Dify全栈平台、开箱即用LLMOps

10.2 实用工具

工具用途
Unstructured多格式文档解析
DoclingPDF/文档智能提取
RAGASRAG 评估
LangSmith调试与监控
Weights & Biases实验追踪

10.3 快速开始示例

python
# 使用 LangChain 构建简单 RAG
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA

# 1. 加载文档
loader = PyPDFLoader("knowledge_base.pdf")
documents = loader.load()

# 2. 分块
splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50
)
chunks = splitter.split_documents(documents)

# 3. 向量化并存储
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(chunks, embeddings)

# 4. 创建 RAG 链
llm = ChatOpenAI(model="gpt-4o")
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectorstore.as_retriever(search_kwargs={"k": 5}),
    return_source_documents=True
)

# 5. 查询
result = qa_chain({"query": "公司的年假政策是什么?"})
print(result["result"])

十一、常见问题与解决方案

问题可能原因解决方案
检索结果不相关Chunking 不当、Embedding 不匹配优化分块策略、微调 Embedding
答案包含幻觉检索质量低、Prompt 不当添加重排序、明确指示仅用上下文
延迟过高索引配置不当、模型过大优化索引参数、使用小模型
成本过高过度调用 API实施缓存、降低维度
多语言效果差模型不支持多语言使用多语言 Embedding(BGE-M3, Cohere)
长文档处理困难超出上下文限制使用 Map-Reduce、层次摘要

十二、2025-2026 趋势

趋势说明
Agentic RAGRAG 与 Agent 深度融合,实现动态多工具编排
Graph RAG知识图谱增强,理解复杂实体关系
Multimodal RAG统一检索文本、图像、音频、视频
Long-Context 替代超长上下文模型(1M+ tokens)部分场景替代 RAG
本地部署隐私敏感场景的完全本地化方案
自动优化AI 自动调优 Chunking、检索策略
实时 RAG流式数据源的实时更新和检索

十三、学习资源

13.1 官方文档

资源链接
LangChain RAGdocs.langchain.com
LlamaIndexdocs.llamaindex.ai
RAGASdocs.ragas.io
Pinecone Learningpinecone.io/learn

13.2 经典论文

论文贡献
RAG 原始论文 (2020)RAG 架构奠基
Self-RAG (2023)自反思 RAG
Contextual Retrieval (2024)Anthropic 上下文检索

核心建议

  1. 从简单开始:先用 Naive RAG 验证可行性,再逐步优化
  2. 重视数据质量:Chunking 和 Embedding 质量决定上限
  3. 持续评估:建立评估基准,数据驱动优化
  4. 生产化思维:从第一天就考虑监控、成本、安全

← 返回 AI 知识库