📚 RAG 技术完全指?2025

检索增强生?(Retrieval-Augmented Generation) 技术详?/p>

什么是 RAG?/h2>

RAG(检索增强生成)是一种将大语言模型(LLM)与外部知识库结合的技术。它通过在生成回答前先检索相关文档,? AI 能够基于最新、准确的信息回答问题,有效解?LLM 的知识截止日期问题和"幻觉"问题。RAG 已成为企业级 AI 应用的核心技术?

80%+
准确率提?/div>
90%
幻觉减少
实时
知识更新
10x
开发效?/div>

🔄 RAG 工作流程

📄
文档加载
PDF/网页/数据?/div>
✂️
文本分块
Chunking
🔢
向量?/div>
Embedding
💾
存储索引
Vector DB
🔍
相似检?/div>
Retrieval
🤖
LLM 生成
Generation

🛠?RAG 开发框?/h2>
LangChain
最流行
全栈 RAG 框架
最流行?LLM 应用开发框架,提供完整?RAG 工具链,文档加载器、分割器、向量存储、检索器一应俱全?
Python/JS 100+ 集成 LangSmith LangGraph
访问官网
LlamaIndex
RAG 专精
数据索引框架
专注?RAG 的数据框架,特别擅长复杂数据结构的索引和查询,支持图索引、树索引等高级检索?
数据连接?/span> 高级索引 查询引擎 Agent
访问官网
Haystack
企业?/span>
端到?NLP 框架
deepset 出品的企业级 NLP 框架,Pipeline 设计灵活,支持混合检索,生产环境稳定?
Pipeline 混合检?/span> 企业支持 评估工具
访问官网
RAGFlow
开?/span>
开?RAG 引擎
国产开?RAG 引擎,深度文档理解能力强,支持复杂格式解析,可视化知识库管理?
深度解析 可视?/span> 多格?/span> 本地部署
GitHub
Dify
开?/span>
LLMOps 平台
开源的 LLM 应用开发平台,可视化编?RAG 流程,支持多种模型,内置知识库管理?
可视化编?/span> 知识?/span> 多模?/span> API 部署
访问官网
FastGPT
开?/span>
知识库问答平?/div>
国产开源知识库问答系统,开箱即用,支持可视化流程编排,适合快速搭建企业知识库?
开箱即?/span> 流程编排 多租?/span> 插件系统
访问官网

💾 向量数据?/h2>
Pinecone
云服?/span>
托管向量数据?/div>
最流行的托管向量数据库,无需运维,性能优秀,企业级可靠性?/div>
Serverless 高性能 混合搜索
访问官网
Milvus
开?/span>
分布式向量数据库
云原生向量数据库,支持万亿级向量,性能卓越,Zilliz 提供云服务?
万亿?/span> 云原?/span> GPU 加?/span>
访问官网
Weaviate
开?/span>
AI 原生向量数据?/div>
AI 原生设计,支持多模态,内置向量化模块,GraphQL 接口友好?/div>
多模?/span> 内置向量?/span> GraphQL
访问官网
Qdrant
开?/span>
高性能向量数据?/div>
Rust 编写的高性能向量数据库,过滤功能强大,资源占用低?/div>
Rust 高性能 过滤?/span>
访问官网
Chroma
开?/span>
轻量向量数据?/div>
开发者友好的嵌入式向量数据库,API 简洁,适合快速原型开发?/div>
嵌入?/span> 简单易?/span> 开发友?/span>
访问官网
pgvector
开?/span>
PostgreSQL 扩展
PostgreSQL 的向量搜索扩展,无需额外数据库,适合已有 PG 基础设施的团队?
PostgreSQL SQL 兼容 易集?/span>
GitHub

🔢 Embedding 模型

模型 维度 提供?/th> 特点 开?/th>
text-embedding-3-large 3072 OpenAI 性能最佳,支持维度缩减 ?/td>
voyage-3 1024 Voyage AI 检索优化,MTEB 领先 ?/td>
bge-m3 1024 BAAI (智源) 多语言,稀?稠密 ?/td>
e5-mistral-7b 4096 Microsoft 基于 LLM,效果优秀 ?/td>
jina-embeddings-v3 1024 Jina AI 8K 上下文,多任?/td> ?/td>
mxbai-embed-large 1024 Mixedbread Matryoshka,二进制量化 ?/td>

📖 核心概念

📄 Chunking 分块策略

将长文档切分为适合检索的小块。常用策略:固定大小、语义分块、递归分块。块大小通常 200-1000 tokens,需考虑重叠?

🔍 Hybrid Search 混合检?/h4>

结合向量相似度搜索(语义)和关键词搜索(BM25),兼顾语义理解和精确匹配,效果优于单一检索?

📊 Reranking 重排?/h4>

使用 Cross-Encoder 对初检结果重新排序,提升召回质量。常用模型:Cohere Rerank、bge-reranker?

🔄 Query Transformation

改写用户查询以提升检索效果。技术包括:HyDE(假设文档)、Query Expansion、Multi-Query?

🧠 Contextual Retrieval

Anthropic 提出,为每个 chunk 添加上下文说明,显著提升检索准确率,减?49% 检索失败?

📈 Evaluation 评估

关键指标:召回率、精确率、MRR、NDCG。评估框架:RAGAS、TruLens。需要构建标注数据集?

💻 代码示例

# 使用 LangChain 构建简?RAG 系统 from langchain_community.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings, ChatOpenAI from langchain_community.vectorstores import Chroma from langchain.chains import RetrievalQA # 1. 加载文档 loader = PyPDFLoader ( "document.pdf" ) documents = loader. load () # 2. 文本分块 text_splitter = RecursiveCharacterTextSplitter ( chunk_size= 500 , chunk_overlap= 50 ) chunks = text_splitter. split_documents (documents) # 3. 创建向量存储 embeddings = OpenAIEmbeddings () vectorstore = Chroma. from_documents (chunks, embeddings) # 4. 构建 RAG ?/span> llm = ChatOpenAI (model= "gpt-4o" ) qa_chain = RetrievalQA.from_chain_type ( llm=llm, retriever=vectorstore. as_retriever (search_kwargs={ "k" : 3 }) ) # 5. 查询 response = qa_chain. invoke ( "这份文档的主要内容是什么?" )

?高级 RAG 技?/h2>

🌲 Graph RAG

结合知识图谱,捕获实体间关系。适合需要推理的复杂查询,Microsoft 已开?GraphRAG?/p>

🔄 Agentic RAG

使用 AI Agent 动态规划检索策略,可以迭代检索、多跳推理,处理复杂问题?/p>

📝 Self-RAG

模型自我反思检索需求和结果质量,决定是否需要检索、评估检索结果是否相关?/p>

🎯 CRAG (Corrective RAG)

评估检索文档相关性,触发网络搜索补充,自动纠正低质量检索结果?/p>

💡 RAG 最佳实?/h4>
  • 分块策略?/strong> 根据文档类型选择分块方式,代码用语法树,文章用语义分?
  • Embedding 选择?/strong> 多语言?bge-m3,英文用 voyage-3 ?OpenAI
  • 混合检索: 向量检?+ BM25 通常比单一检索效果提?10-20%
  • Reranking?/strong> 初检 top-20,重排后?top-5,平衡召回和精度
  • Prompt 工程?/strong> 明确指示模型只基于检索内容回答,承认不知?
  • 评估先行?/strong> 先构建评估数据集,用数据驱动优化,避免盲目调?
  • 监控上线?/strong> 记录检索日志,追踪低质量回答,持续迭代改进

🚀 开始构建你?RAG 应用

选择合适的工具栈,快速搭建智能问答系?/p>