检索增强生成RAG系统优化:从基础到高级

🎙️ 语音朗读 当前: 晓晓 (温柔女声)

概述

RAG(Retrieval-Augmented Generation)是构建知识密集型AI应用的核心技术。本文系统介绍RAG从基础到高级优化的完整技术栈。

RAG核心流程

flowchart TB
    subgraph 索引阶段
        DOCS[文档] --> SPLIT[分块]
        SPLIT --> EMBED[向量化]
        EMBED --> INDEX[向量索引]
    end
    
    subgraph 检索阶段
        QUERY[用户查询] --> RETRIEVE[向量检索]
        RETRIEVE --> RERANK[重排序]
        RERANK --> CONTEXT[上下文构建]
    end
    
    subgraph 生成阶段
        CONTEXT --> PROMPT[提示构建]
        PROMPT --> LLM[大语言模型]
        LLM --> RESPONSE[生成回答]
    end
    
    INDEX -.->|相似度计算| RETRIEVE

高级RAG架构

完整RAG Pipeline

flowchart TB
    subgraph 预处理
        QUERY --> HYDE[HyDE查询扩展]
        QUERY --> QUERY_TRANS[查询变换]
    end
    
    subgraph 多路检索
        HYDE --> VECTOR[向量检索]
        QUERY_TRANS --> KEYWORD[关键词检索]
        QUERY_TRANS --> GRAPH[知识图谱]
    end
    
    subgraph 融合排序
        VECTOR --> FUSION[结果融合]
        KEYWORD --> FUSION
        GRAPH --> FUSION
    end
    
    FUSION --> RERANK[Cross-Encoder重排]
    RERANK --> CONTEXT[上下文组装]
    CONTEXT --> LLM

实现代码

高级RAG Pipeline

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from sentence_transformers import CrossEncoder

class AdvancedRAG:
"""高级RAG系统"""

def __init__(self, model_name="gpt-4o"):
self.embeddings = OpenAIEmbeddings()
self.vectorstore = Chroma(
persist_directory="./chroma_db",
embedding_function=self.embeddings
)
self.reranker = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')
self.llm = model_name

def retrieve(self, query, top_k=10):
"""多路检索"""
# 向量检索
vector_results = self.vectorstore.similarity_search(query, k=top_k)

# BM25关键词检索
bm25_results = self.bm25_search(query, top_k)

# 知识图谱检索
kg_results = self.kg_search(query, top_k)

# 融合结果
fused_results = self Reciprocal_Rank_Fusion(
[vector_results, bm25_results, kg_results],
k=60
)

return fused_results

def rerank(self, query, documents):
"""Cross-Encoder重排"""
pairs = [(query, doc.page_content) for doc in documents]
scores = self.reranker.predict(pairs)

ranked_indices = sorted(range(len(scores)),
key=lambda i: scores[i],
reverse=True)

return [documents[i] for i in ranked_indices[:5]]

def generate(self, query, context):
"""生成回答"""
prompt = f"""
你是一个专业的AI助手。以下是相关的背景信息:

{context}

用户问题:{query}

请基于以上信息,给出准确、详细的回答。
"""
return self.llm.generate(prompt)

RAG优化技术

查询优化

技术 说明 效果
HyDE 生成假设性答案再检索 +15%
Query Decomposition 分解复杂查询 +12%
Step-back 抽象化再检索 +10%
Query Expansion 同义词扩展 +8%

索引优化

技术 说明 适用场景
Parent Document 保留父文档上下文 复杂问题
Sentence Window 句子窗口检索 精确匹配
Auto-merging 自动合并相关块 连贯性要求高

总结

mindmap
  root((RAG优化))
    索引优化
      分块策略
      向量模型
      索引结构
    检索优化
      多路召回
      重排序
      查询变换
    生成优化
      提示工程
      上下文压缩
      引用追踪

RAG是构建企业级AI应用的核心技术,需要根据具体场景不断优化。

© 2019-2026 ovo$^{mc^2}$ All Rights Reserved. | 站点总访问 28969 次 | 访客 19045
Theme by hiero