一个涵盖30+种高级检索增强生成(RAG)技术的开源教程与代码库,包含Graph RAG、Agentic RAG及各类检索优化策略,提供基于LangChain的可运行脚本和Jupyter Notebook实现。
RAG_Techniques 项目详解#
项目定位#
RAG_Techniques 是由 Nir Diamant 发起并维护的开源项目,致力于成为 RAG 领域的「技术百科全书」。项目不仅提供理论解释,还提供了基于 Jupyter Notebook 的可执行代码和独立 Python 脚本。内容涵盖从简单的向量检索到复杂的图结构 RAG(Graph RAG)和代理式 RAG(Agentic RAG)。
解决的核心问题#
- 准确性不足:解决传统简单 RAG 在处理复杂查询时检索不准确的问题
- 上下文丢失:解决长文档分块后上下文割裂的问题
- 评估困难:提供标准化的评估方法(如 DeepEval, GroUSE)来衡量 RAG 系统性能
- 落地门槛高:通过模块化的 Notebook 和通用助手函数,降低将高级 RAG 技术集成到生产环境的难度
技术分类(34种技术)#
基础RAG技术#
- Simple RAG - 适合新手的基于检索查询的问答系统
- Reliable RAG - 增加验证和精细化机制确保检索信息的准确性和相关性
- Optimizing Chunk Sizes - 平衡上下文保留和检索效率的文本分块优化
- Proposition Chunking - 将文本分解为简洁、完整、有意义的句子
查询增强技术#
- Query Transformations - 查询改写、回退提示、子查询分解
- HyDE (Hypothetical Document Embedding) - 生成假设性问题改进查询与数据的匹配
- HyPE (Hypothetical Prompt Embeddings) - 预计算假设提示,提升检索精度高达42%
上下文增强技术#
- Contextual Chunk Headers - 创建文档级和段落级上下文头
- Relevant Segment Extraction - 动态构建多块文本段
- Semantic Chunking - 基于语义一致性而非固定大小分割文档
- Contextual Compression - 压缩检索信息同时保留查询相关内容
高级检索方法#
- Fusion Retrieval - 结合关键词搜索和向量搜索
- Reranking - LLM评分、交叉编码器、元数据增强排序
- Hierarchical Indices - 文档摘要和详细块的双层系统
- Multi-modal RAG - 多模态检索(字幕生成和Colpali方法)
高级架构#
- Graph RAG with LangChain - 知识图谱集成
- Microsoft GraphRAG - 微软开源GraphRAG系统
- RAPTOR - 树状组织的递归抽象处理检索
- Self-RAG - 自适应决定是否使用检索信息
- Corrective RAG (CRAG) - 动态评估和纠正检索过程
- Agentic RAG with Contextual AI - 构建生产级代理RAG管道
应用场景#
- 金融文档分析:Agentic RAG用于复杂查询解决
- 知识库问答:企业级文档检索和问答系统
- 多模态内容处理:PDF、PPT等多媒体数据处理
- 复杂推理任务:多跳问题和复杂查询处理
项目结构#
RAG_Techniques/
├── all_rag_techniques/ # Jupyter notebook实现
├── all_rag_techniques_runnable_scripts/ # 可运行的Python脚本
├── data/ # 示例数据
├── evaluation/ # 评估方法
├── images/ # 技术图解
├── helper_functions.py # 核心助手函数
└── CONTRIBUTING.md # 贡献指南
核心助手函数#
encode_pdf(): PDF文档编码为向量存储retrieve_context_per_question(): 问题检索bm25_retrieval(): BM25检索exponential_backoff(): 指数退避重试机制
快速开始#
# 克隆仓库
git clone https://github.com/NirDiamant/RAG_Techniques.git
# 导航到感兴趣的技术
cd all_rag_techniques/[technique-name]
# 配置环境变量
export OPENAI_API_KEY="your_key_here"
核心依赖#
- langchain-community
- langchain-text-splitters
- langchain-openai
- langchain-core
- pydantic
- rank_bm25
- PyMuPDF (fitz)
- numpy
- faiss-cpu
配置能力#
嵌入提供商#
class EmbeddingProvider(Enum):
OPENAI = "openai"
COHERE = "cohere"
AMAZON_BEDROCK = "bedrock"
模型提供商#
class ModelProvider(Enum):
OPENAI = "openai"
GROQ = "groq"
ANTHROPIC = "anthropic"
AMAZON_BEDROCK = "bedrock"
Notebook结构标准#
每个技术Notebook包含:标题和概述、详细解释、可视化表示(Mermaid图)、实现步骤、使用示例、比较分析、参考资源。
相关项目#
- Agents Towards Production: 生产级GenAI代理构建
- GenAI Agents Repository: AI代理实现集合
- Prompt Engineering Techniques: 提示工程策略