huangjia2019/rag-in-action

End-to-end RAG system design, evaluation, and optimization. 极客时间RAG训练营,RAG 10大组件全面拆解,4个实操项目吃透 RAG 全流程。RAG的落地,往往是面向业务做RAG,而不是反过来面向RAG做业务。这就是为什么我们需要针对不同场景、不同问题做针对性的调整、优化和定制化。魔鬼全在细节中,我们深入进去探究。

项目概览

这是一个代码仓库,配套一门在线实战课程(极客时间上的《RAG系统研发实战》)。它教你从零构建一个基于DeepSeek的RAG系统——即检索增强生成系统。简单说,RAG是一种让AI大模型能参考外部知识库来回答问题的技术,本仓库提供了完整实现代码和教学模块。

核心内容:模块化设计

仓库被划分成11个模块,每个模块对应RAG流水线中的一个步骤,按顺序学习即可:

模块 功能 主要技术(粗略)
00-简单RAG 最基础的RAG示例 LangChain/LlamaIndex
01-数据导入 加载和处理文档 pandas, PyPDF2
02-文本切块 把长文切成小块 LangChain Splitters
03-向量嵌入 把文本转成向量 HuggingFace, BGE
04-向量存储 存储和检索向量 Milvus, Chroma
05-检索前处理 优化检索问题的质量 Query Expansion
06-索引优化 构建更好的索引 层次索引、关键词索引
07-检索后处理 重排和过滤检索结果 重排序模型等
08-响应生成 根据检索结果生成回答 LLM集成(如DeepSeek)
09-系统评估 评估系统效果 RAGAS, TruLens
10-高级RAG 更复杂的RAG变体 Graph RAG, Multi-Agent

每个模块都有独立示例和说明文档,建议按编号顺序逐步实践。

运行环境和依赖

  • 硬件:
    • GPU版:NVIDIA GPU(建议≥8GB显存),CUDA 11.8+,cuDNN 8+。
    • CPU版:推荐16GB+内存,4核以上处理器。
  • 操作系统:Ubuntu 22.04、macOS(Intel / Apple Silicon)、Windows(建议用WSL2+Ubuntu)。
  • Python:3.10或更高。
  • 框架:支持LangChain和LlamaIndex两个主流框架,提供了对应的requirements文件,按GPU/CPU分别安装。

环境配置示例

以LangChain + GPU(Ubuntu)为例:

# 创建虚拟环境(建议使用)
python -m venv venv-rag-langchain
source venv-rag-langchain/bin/activate
# 或使用conda
conda create -n venv-rag-langchain python=3.10.12
conda activate venv-rag-langchain

# 安装依赖
pip install -r 91-环境-Environment/requirements_langchain_20250413_Ubuntu-with-GPU.txt

README中给出了所有组合(CPU/GPU × LangChain/LlamaIndex × 不同OS)的完整安装命令。

特殊依赖

  • PDF处理:需额外安装requirements_camelot,以及系统级依赖(Ubuntu需ghostscript和python3-tk;macOS需brew install ghostscript tcl-tk;Windows需手动装Ghostscript)。
  • 标注工具:用requirements_marker安装。

使用步骤

  1. 选择与你的环境匹配的requirements文件,创建虚拟环境并安装依赖。
  2. 从00-简单RAG开始,按模块顺序学习。
  3. 每个模块有独立示例脚本和说明。

注意事项

  • GPU版要确保CUDA驱动正确。
  • 不同系统可能需要额外系统库。
  • 强烈建议使用虚拟环境,避免依赖冲突。
  • 部分模块可能需要额外下载模型或配置API密钥。

常见问题(README中指出)

  • CUDA错误:检查NVIDIA驱动和CUDA版本。
  • 内存不足:减小批处理或改用CPU版。
  • 依赖冲突:严格按requirements文件装,用虚拟环境隔离。

开源与许可证

项目采用MIT许可证,欢迎提交Issue或Pull Request。


以上内容完全基于README原文,未添加任何未提及的信息。

Related

  • Project
  • Project
  • Project
  • Project