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 所需依赖不同,通常需要
langchain、llama-index、chromadb、openai、anthropic等。首次运行按 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 |
坑与注意
- Notebook 环境差异:部分 Notebook 依赖特定版本的 LangChain/LlamaIndex,运行前建议查看文件头部的版本说明,版本过旧可能导致 API 不兼容
- API 费用:高级 RAG 流程往往多次调用 LLM(如 HyDE 要生成假设文档),生产环境需注意 Token 消耗和成本控制
- 评估数据集构建:RAGAS 等评估工具需要高质量的 ground truth 数据,数据质量直接决定评估结果的可信度
- 中文文档处理:大部分示例以英文为主,中文需注意分词器和嵌入模型的选择(如
m3e或 OpenAI 的text-embedding-3-large) - Notebook 数量庞大:42+ 个 Notebook 不必全部学完,建议先明确自己的场景,从对应类别挑 2-3 个重点突破
- RAG 与微调的边界:本仓库专注 RAG 技术栈,实际项目中需判断是优化 RAG 还是微调模型更合适
与同类对比
| 资源 | 类型 | 特点 | 适合人群 |
|---|---|---|---|
| RAG_Techniques(本文) | Notebook 合集 | 42+ 可运行示例,代码+理论结合 | 需要工程落地的开发者 |
| LangChain 官方文档 | 框架文档 | API 详细但缺深入案例 | 刚学 LangChain 的新手 |
| LlamaIndex 官方文档 | 框架文档 | 数据摄取流程讲解详细 | 刚学 LlamaIndex 的新手 |
| paperswithcode RAG | 论文汇总 | 学术前沿,但无工程代码 | 研究人员追新 |
一句话推荐结论
RAG_Techniques 是目前最实用的 RAG 进阶学习资源,42+ 可运行 Notebook 覆盖从基础分块到前沿 Agentic RAG 的全链路,每个技术都有代码有理论,工程落地必备。