NirDiamant/RAG_Techniques · 上手攻略

  • 仓库:NirDiamant/RAG_Techniques
  • 链接:https://github.com/NirDiamant/RAG_Techniques
  • 分类:ai
  • 作者:Jay
  • 更新:2026-07-12

这是什么

RAG_Techniques 是一个专注于 Retrieval-Augmented Generation(检索增强生成) 高级技术的开源教程仓库,由 Nir Diamant 维护。目前收录 42+ 个可运行的 Jupyter Notebook,覆盖从基础 RAG 到最新前沿技术的完整知识体系,每个技术都配有详细原理解析、代码实现和论文引用。截至 2026 年 7 月 Stars 超过 2.8 万,是 AI 开发者学习 RAG 的标杆资源。

解决什么问题

  • RAG 准确率瓶颈:基础 RAG 在复杂查询、多跳推理、模糊表述等场景下效果不佳,本仓库系统梳理了解决方案
  • 学习曲线陡峭:RAG 涉及嵌入、检索、排序、生成多个环节,官方资料分散,本仓库一站式覆盖
  • 工程落地参考:每个技术都有可直接运行的 Notebook,方便嫁接到实际项目
  • 跟上前沿:持续更新最新 RAG 技术(如 Self-RAG、CRAG、MemoRAG、Open-RAG-Eval)

快速安装

本仓库无需安装,直接在浏览器中运行:

# 方式一:直接用 Google Colab 打开(推荐,无需本地配置)
# 访问 GitHub 页面,点击任意 Notebook 的 Colab 按钮

# 方式二:本地运行
git clone https://github.com/NirDiamant/RAG_Techniques.git
cd RAG_Techniques

# 创建 Python 环境(建议 3.10+)
python3 -m venv rag-env
source rag-env/bin/activate  # Windows: rag-env\Scripts\activate

# 安装依赖(Notebook 内通常已注明具体依赖)
pip install -r requirements.txt  # 若有
pip install jupyterlab
jupyter lab

⚠️ 注意:不同 Notebook 所需依赖不同,通常需要 langchainllama-indexchromadbopenaianthropic 等。首次运行按 Notebook 内的 !pip install 说明安装即可。

核心用法

技术全景图(42+Notebook 分类)

仓库将技术分为以下类别(从基础到高级):

类别 代表技术
Foundational 🌱 Basic RAG、CSV RAG、Chunk Size 优化、Proposition Chunking
Query Enhancement 🔍 Query Transformations、HyDE、HyPE、Step-back Prompting
Retrieval Enhancement 📂 Parent Document Retrieval、Sentence Window Retrieval、Semantic Chunking
Reranking & Filtering 🎯 Contextual Compression、Rerankers、Similarity Cutoff
Knowledge Graph RAG 🧠 Graph RAG、HyDE-GR、Concept Graph
Hybrid Search 🔀 BM25 + Vector 混合、Multi-representation RAG
Agentic RAG 🤖 Self-RAG、Adaptive RAG、Agent-driven Retrieval
Multimodal RAG 🖼️ Image/Table RAG、BLIP-VQA
Evaluation 📊 RAGAS、Trulens、LLM-as-Judge

基础 RAG 快速跑通

# 最简 RAG 流程(以 simple_rag.ipynb 为核心)
from langchain.document_loaders import TextLoader
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 = TextLoader("your_doc.txt")
documents = loader.load()

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

# 3. 向量化存储
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(chunks, embeddings)

# 4. 构建 RAG chain
llm = ChatOpenAI(model="gpt-4o")
qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=vectorstore.as_retriever())

# 5. 查询
result = qa_chain.run("你的问题是什么?")
print(result)

HyDE(Hypothetical Document Embedding)

HyDE 不直接用用户查询检索,而是先生成假设性回答,再将其向量化检索,能显著提升检索相关性:

# 示例核心逻辑(详见 HyDE notebook)
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

hyde_prompt = PromptTemplate(
    input_variables=["question"],
    template="生成一个简短、准确的回答来回答问题:{question}"
)

hyde_chain = LLMChain(llm=llm, prompt=hyde_prompt)
hypothetical_doc = hyde_chain.run(question)  # 生成假设性回答

# 用假设性回答检索,而不是原始问题
hyde_vectorstore = Chroma.from_texts(
    texts=[hypothetical_doc],
    embedding=embeddings
)

Query Transformations(查询改写)

当用户问题表述模糊或需要多步推理时,先改写再检索:

# Multi-Query Retrieval:用 LLM 生成多个相似查询,平行检索增加召回
from langchain.retrievers import MultiQueryRetriever

retriever = MultiQueryRetriever.from_llm(
    retriever=vectorstore.as_retriever(),
    llm=llm
)
results = retriever.get_relevant_documents("你的复杂问题")

Contextual Compression(上下文压缩)

检索回来的上下文通常过长,用压缩器只保留与问题最相关的部分:

from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainExtractor

compressor = LLMChainExtractor.from_llm(llm)
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=vectorstore.as_retriever()
)
compressed_docs = compression_retriever.get_relevant_documents("查询")

评估 RAG 系统

# 使用 RAGAS 评估(详见 RAGAS notebook)
from ragas import EvaluationDataset
from ragas.metrics import ResponseRelevancy, ContextPrecision

# 准备含 ground truth 的评估集
eval_dataset = EvaluationDataset(...)

# 运行评估
evaluator = ResponseRelevancy(llm=llm)
score = evaluator.score(eval_dataset)

典型适用场景

场景 推荐优先学习的技术
客服机器人准确率低 HyDE + Reranking + Query Transformations
文档问答(法务/医疗) Parent Document Retrieval + Contextual Compression
多跳推理问答 Graph RAG + Agentic RAG
实时搜索系统 Hybrid Search (BM25+Vector) + SSE
知识库更新频繁 Self-RAG(自适应检索)
表格/图片密集型文档 Multimodal RAG + Table Chunking

坑与注意

  1. Notebook 环境差异:部分 Notebook 依赖特定版本的 LangChain/LlamaIndex,运行前建议查看文件头部的版本说明,版本过旧可能导致 API 不兼容
  2. API 费用:高级 RAG 流程往往多次调用 LLM(如 HyDE 要生成假设文档),生产环境需注意 Token 消耗和成本控制
  3. 评估数据集构建:RAGAS 等评估工具需要高质量的 ground truth 数据,数据质量直接决定评估结果的可信度
  4. 中文文档处理:大部分示例以英文为主,中文需注意分词器和嵌入模型的选择(如 m3e 或 OpenAI 的 text-embedding-3-large
  5. Notebook 数量庞大:42+ 个 Notebook 不必全部学完,建议先明确自己的场景,从对应类别挑 2-3 个重点突破
  6. RAG 与微调的边界:本仓库专注 RAG 技术栈,实际项目中需判断是优化 RAG 还是微调模型更合适

与同类对比

资源 类型 特点 适合人群
RAG_Techniques(本文) Notebook 合集 42+ 可运行示例,代码+理论结合 需要工程落地的开发者
LangChain 官方文档 框架文档 API 详细但缺深入案例 刚学 LangChain 的新手
LlamaIndex 官方文档 框架文档 数据摄取流程讲解详细 刚学 LlamaIndex 的新手
paperswithcode RAG 论文汇总 学术前沿,但无工程代码 研究人员追新

一句话推荐结论

RAG_Techniques 是目前最实用的 RAG 进阶学习资源,42+ 可运行 Notebook 覆盖从基础分块到前沿 Agentic RAG 的全链路,每个技术都有代码有理论,工程落地必备。