AI Engineering

RAG 性能优化
完全指南

从基础原理到高级策略,构建生产级检索增强生成系统

检索 · 索引 · 重排 · 评估 · 2025
01 / 16
基础

什么是 RAG?

核心定义

Retrieval-Augmented Generation(检索增强生成)

在 LLM 生成答案之前,先从外部知识库检索相关文档,将检索结果作为上下文注入 Prompt,使模型能够"基于事实"回答问题。

为什么需要 RAG?

  • LLM 知识有截止日期,容易产生"幻觉"
  • 无法访问私有或实时数据
  • 长上下文窗口成本高、注意力分散
  • 无法追溯答案来源
02 / 16
基础

RAG 完整流程

STEP 01
文档摄入
加载 · 分割 · 元数据
STEP 02
向量化
Embedding 模型编码
STEP 03
索引存储
Vector DB 建索引
STEP 04
检索
Top-K 相似度匹配
STEP 05
生成
Context + Query → Answer
03 / 16
挑战

RAG 的五大性能瓶颈

04 / 16
优化一

策略一:智能文档切分

切分策略对比

固定长度(如 512 tokens)不推荐

语义完整性差,可能切断句子和段落

递归字符分割✓ 基础推荐

按换行符、句子、段落逐级切分

语义分割(LLM 驱动)✓ 生产推荐

基于内容主题边界切分,质量最高

实战参数建议

  • chunk_size:256–512 tokens(短文本)
    或 512–1024(长文档)
  • chunk_overlap:15–25% 重叠
    保持跨 chunk 上下文连续性
  • 保留元数据:标题、来源、页码、章节层级
  • 层级索引:父子 chunk 关系
    检索召回细粒度,补充时用父 chunk
05 / 16
优化二

策略二:Embedding 模型选择

通用场景

text-embedding-3-small

OpenAI 最新模型,体积小速度快,适合通用文档检索

维度1536
MTEB 得分62.3%
中文/垂直

text-embedding-3-large

更高维度更强性能,中文语义理解显著提升

维度3072
MTEB 得分66.1%
开源首选

BGE-m3 /gte-Qwen2

阿里 / 智华开源,中文效果优秀,支持本地部署

优势多语言 / 本地
维度1024

MTEB:Massive Text Embedding Benchmark,涵盖 58 个数据集的综合评估基准。生产环境优先在目标领域数据上做 微调或知识蒸馏

06 / 16
优化三

策略三:混合搜索(Hybrid Search)

为什么只用向量不够?

向量检索擅长语义相似,但 漏掉精确关键词匹配。例如:型号、代码片段、人名、精确数值。

Hybrid = 语义 + 关键词

  • Dense(向量):理解语义意图
  • Sparse(BM25/TF-IDF):精确词项匹配
  • RRF 融合:倒数排名融合
    综合两种检索结果去重排序

实现代码示例

# Hybrid Search 伪代码
query_vec = embed(query)
query_terms = tokenize(query)

# 1. 向量检索 Top-K
vec_results = vector_db.search(
    query_vec, k=20)

# 2. BM25 关键词检索
bm25_results = bm25_index.search(
    query_terms, k=20)

# 3. RRF 融合(k=60)
def rrf(results, k=60):
    scores = defaultdict(0)
    for rank, doc in enumerate(results):
        scores[doc.id] += 1 / (k + rank)
    return sorted(scores, key=scores.get, reverse=True)
07 / 16
优化四

策略四:查询变换(Query Transformation)

Query 改写

用 LLM 将口语化问题改写为检索友好的表达,提升检索命中率。

  • 口语:"怎么让电脑跑快点"
  • → 检索:"系统性能优化 方法"

子查询分解

复杂问题拆分为多个简单子查询,分别检索后合并结果。

  • "苹果公司近三年营收和研发投入对比"
  • → 3 个独立检索 + 结果合并

HyDE / Step Back

让 LLM 先生成"假设性答案"再检索,或先提炼高层概念再细化。

  • HyDE:生成伪文档 → 向量检索
  • Step Back:抽象问题 → 具体检索
08 / 16
优化五

策略五:重排序(Reranking)

两阶段检索架构

向量数据库做 粗筛(召回快),Cross-Encoder 做 精排(质量高)。

阶段 1:向量检索 Top-Kk=50~100
阶段 2:Cross-Encoder 重排k=5~10

常用 Reranker 模型

  • bge-reranker-v2-m3(阿里,中文强)
  • bge-reranker-large
  • Cohere Rerank-3(API)
  • jina-reranker-v2(开源)

重排序输出示例

✓ Doc_042score: 0.94

RAG 评估指标与优化策略 — 包含 RAGAS、Trulens 等主流评估框架对比...

△ Doc_017score: 0.71

全文检索系统的评估方法 — BM25 评估指标与调参技巧...

✗ Doc_089score: 0.38

NLP 预训练模型综述 — BERT、GPT 系列模型架构对比...

重排后 Doc_042 从第 3 位升至第 1 位,显著提升最终答案质量。

09 / 16
优化六

策略六:上下文压缩与过滤

为什么需要压缩?

  • 检索结果包含大量 无关噪声
  • LLM 上下文窗口有限,成本随 token 增长
  • 无关内容会 稀释 正确答案的注意力
  • 压缩后保留 关键信息 + 来源引用

技术方案

  • LLMChainFilter:逐段判断相关性
  • EmbeddingsFilter:向量相似度过滤
  • ContextualCompression:LLM 摘要压缩
  • SentenceWindow:窗口扩展(前后各一句)

压缩效果对比

原始检索(3 docs)~2400 tokens

噪声多,上下文长

过滤后(3 docs)~1200 tokens

去除了低相关片段

LLMChainFilter(3 docs)~600 tokens

核心信息保留 95%+

10 / 16
优化七

策略七:自适应检索(Self-RAG / CRAG)

传统 RAG 的问题

无论问题难易,一律检索。简单问题不需要外部知识,复杂问题可能检索不足。

Self-RAG 思路

让 LLM 自主判断 是否需要检索,以及检索多少。

QUERY
问题输入
用户查询
IS_RELEVANT?
是否相关
LLM 判断需要检索吗?
RETRIEVE
检索文档
Top-K 向量检索
IS_SUPPORTED?
是否支撑
文档是否支撑答案?
OUTPUT
生成答案
综合输出

CRAG(Corrective RAG):当检索结果质量低时,自动触发网络搜索补充,或降级为纯 LLM 回答。

11 / 16
优化八

策略八:元数据过滤与索引结构

元数据过滤

在向量检索前,用元数据(时间、来源、类型等)预过滤,减少检索空间,提升精度。

  • 时间过滤:仅检索近 6 个月文档
  • 来源过滤:仅查内部知识库
  • 类型过滤:仅查技术文档
  • 层级过滤:章节 > 段落 > 句子

索引结构优化

  • 层次索引:Chunk → Section → Doc
  • 知识图谱索引:实体关系 + 向量混合
  • LCES:LLM → Chunk → Entity → Schema

多级检索策略

层级
索引方式
召回率
精度
文档级
关键词 / 摘要
段落级
向量检索
句子级
向量 + BM25
知识图谱
Graph DB

组合策略:先文档级粗筛 → 段落级精排 → 句子级提取答案

12 / 16
评估

RAG 评估体系

Context
Relevance
检索质量
Answer
Faithfulness
答案忠诚度
Answer
Relevance
答案相关性
Hallucination
Rate
幻觉率

主流评估框架

  • RAGAS(RAG Assessment)
    无参考答案的端到端评估
  • Trulens
    可追踪、可解释的评估仪表盘
  • ARES
    LLM 辅助的自动化评分
  • RAGTriad(DeepMind)
    检索 · 整洁度 · 生成 三维度

评估流程

  • 准备 测试集:Query + Ground Truth + Context
  • 运行 RAG Pipeline,收集输出
  • 计算 RAGAS / Trulens 指标
  • 分析失败案例 → 定位瓶颈 → 优化
  • 持续 回归测试,监控质量趋势
13 / 16
总结

RAG 优化全景图

📄

数据层

  • 语义化文档切分
  • 元数据丰富化
  • 数据清洗与去重
  • 层级索引结构
🔍

检索层

  • 领域适配 Embedding
  • 混合搜索(向量+BM25)
  • 查询变换与分解
  • 元数据预过滤
🎯

重排层

  • Cross-Encoder 精排
  • 上下文压缩
  • 去噪与摘要
  • 自适用检索决策
数据质量决定上限
检索能力决定召回
重排能力决定精度
14 / 16
工具链

主流框架与工具选型

编排框架

  • LangChain / LangGraph
    生态最全,灵活度高
  • LlamaIndex
    数据连接更强,RAG 专用
  • DSPy
    声明式编程,自动化 Prompt

向量数据库

  • Pinecone(云服务)
  • Milvus / Zilliz(开源)
  • Qdrant(Rust,高性能)
  • ChromaDB(轻量,开发用)
  • pgvector(PostgreSQL 扩展)

Embedding + Rerank

  • OpenAI(text-embedding-3)
  • Cohere(Embed + Rerank)
  • BGE(阿里开源)
  • Jina AI(Embedding + Reranker)
  • Mistral(开源模型)
15 / 16
最佳实践

生产环境 RAG 检查清单

数据准备

  • 文档预处理:去重、去噪、结构化
  • chunk 大小:A/B 测试找到最优值
  • 保留元数据:来源、时间、标题
  • 建立 Ground Truth 测试集

检索优化

  • Embedding 模型:领域微调
  • 混合搜索:向量 + BM25 + RRF
  • 查询改写:提升检索命中率
  • Top-K:A/B 测试确定最优值

生成控制

  • 上下文压缩:去除噪声
  • Prompt 工程:引用格式、角色设定
  • 来源标注:增强可追溯性
  • Self-RAG:自适应检索决策

评估与迭代

  • RAGAS / Trulens 持续监控
  • 失败案例分析 → 根因定位
  • 渐进式优化:每次改一个变量
  • 回归测试:防止质量退化
16 / 16
1 / 16