simple-local-rag
从零构建本地 RAG 流水线,PDF 文档智能问答,100% 本地运行无 API 依赖,适合 AI
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
从零构建本地 RAG 流水线,PDF 文档智能问答,100% 本地运行无 API 依赖,适合 AI
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象你是一名营养学学生,面对一本 1200 页的英文营养学教材。传统做法是逐页翻阅、做笔记;现在,你可以把整本书喂给 AI,然后问它:"蛋白质和碳水化合物有什么区别?它们分别有什么功能?"——AI 不仅会回答,还会标注答案来自哪一页的哪一段。
这就是 Simple Local RAG 正在演示的场景。

图1:Simple Local RAG 完整工作流:从 PDF 文档到 LLM 回答的全链路流程
该项目由 YouTube 频道 Mr. Bourke(mrdbourke)创建并维护,作者是一位专注于 PyTorch 教学的资深工程师,常年活跃于机器学习教育社区。项目于 2024 年 3 月上线 GitHub,迅速在 NLP/AI 学习者中传播——这并非偶然:在 RAG 技术从实验室走向生产环境的关键窗口期,一份干净、透明、可本地运行的 RAG 全流程代码,比任何商业产品都更有教育价值。
RAG = Retrieval Augmented Generation(检索增强生成),由 Meta AI 研究团队在 2020 年论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》中首次提出。核心思想朴素但深刻:
这解决了 LLM 的两大痼疾:幻觉(hallucination) 和 知识过时。LLM 是用历史数据训练的,它不知道自己不知道什么。RAG 让它"带着答案卷子进考场",减少胡编乱造。
主流 RAG 方案依赖 OpenAI API 或云端服务,存在三重隐患:
| 维度 | 云端方案 | 本地方案(本项目) |
|---|---|---|
| 隐私 | 医疗/法律/财务文档需上传第三方 | 数据永远在本地 |
| 速度 | 受 API 队列和限速影响 | GPU 在跑就能响应 |
| 成本 | token 计费,大文档处理费用累积 | 一次性硬件成本,无边际费用 |
作者 mrdbourke 在项目中明确指出:本地运行意味着你使用自己的硬件,数据不会离开你的机器。对于处理敏感企业文档或受监管行业数据,这是不容妥协的优势。
RAG 是当前企业 AI 落地的主流架构之一。Klarna 等金融科技公司通过 RAG 驱动的客服系统,每年节省数千万美元运营成本。本地化 RAG 方案则在中小企业和个人开发者中填补了云端方案的空白——无需 API Key,无需订阅,按自己的节奏学习、实验、部署。
项目以一本 1200 页开源营养学教材(PressBooks Hawaii Human Nutrition 2)作为演示数据,但整个处理流程适用于任何 PDF 文档:
PDF → 文本提取 → 文本分块 → 向量化 → 存储
关键技术点:
sentence_transformers 将文本块编码为稠密向量,支持语义相似度检索from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')
embeddings = model.encode(chunks) # shape: (N, 384)
检索是 RAG 的核心环节。项目实现了基于向量相似度的语义检索:
生成阶段使用本地运行的 LLM:
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-7b-it",
device_map="auto",
load_in_4bit=True # 4-bit 量化降低显存需求
)
完整的 NutriChat 对话流程:
这种"可溯源回答"是 RAG 相比普通 LLM 的独特优势:用户不仅得到答案,还能验证答案的出处。
| 组件 | 用途 | 关键版本 |
|---|---|---|
| PyTorch | 深度学习基础框架 | 2.1.1+ |
| Transformers | LLM 加载与推理 | 4.38.2+ |
| sentence_transformers | 文本向量化 | 2.5.1 |
| PyMuPDF | PDF 解析 | 1.23.26 |
| Accelerate | 分布式推理 | - |
| BitsAndBytes | 4/8-bit 量化 | - |
| spaCy | NLP 预处理 | - |
纯 Python 实现,无外部服务依赖。整个 RAG 链路可以在一台带 NVIDIA GPU 的电脑上独立运行,无需互联网连接(下载模型后的首次运行)。这种设计非常适合:
Jupyter Notebook 优先。项目以 .ipynb 格式提供完整代码,每一段代码块配有详细注释和输出示例,适合边学边练。配套有 YouTube 视频教程(可在 README 中找到链接),Mr. Bourke 频道的 PyTorch 教学风格深受好评。
README 列出的未来扩展方向包括:流式输出(Streaming)、多文档支持、Web UI(Gradio/Streamlit)、不同嵌入模型切换等。项目结构清晰,每个功能模块都有独立代码块,便于读者裁剪和替换。
| 要求 | 最低配置 | 推荐配置 |
|---|---|---|
| GPU | NVIDIA 5GB+ VRAM | RTX 4090 24GB |
| 内存 | 8GB RAM | 16GB+ |
| 磁盘 | 10GB 可用空间 | 20GB+(含模型权重) |
| CUDA | 11.8+ | 12.1+ |
| Python | 3.10+ | 3.11 |
# 1. 克隆仓库
git clone https://github.com/mrdbourke/simple-local-rag.git
cd simple-local-rag
# 2. 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/macOS
# .\venv\Scripts\activate # Windows
# 3. 安装依赖
pip install -r requirements.txt
# 4. 安装 PyTorch(CUDA 版本,必须先装!)
pip3 install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# 5. 申请 Gemma 模型权限
# 访问 https://huggingface.co/google/gemma-7b-it 同意条款
huggingface-cli login
# 6. 启动 Jupyter
jupyter notebook
Q: 安装 flash-attn 编译失败?
A: 作者已在 requirements.txt 中注释掉 flash-attn。如需启用,参考 GitHub Issue #595(Windows 平台特别说明)。不安装不影响核心功能,但推理速度会稍慢。
Q: Gemma 模型下载失败?
A: 必须在 Hugging Face 官网同意 Gemma 使用条款,并在本地执行 huggingface-cli login 完成认证。
Q: 显存不够怎么办?
A: 使用 4-bit 量化(load_in_4bit=True)可将 7B 模型显存需求从 ~14GB 降至 ~5GB,或换用更小的模型(如 Qwen-1.8B)。
这是一个教学项目,而非生产级 RAG 系统。README 中明确标注了多个 TODO 项(设置说明未完善、扩展文档待补充),且代码未经过充分工程化验证,在生产环境直接使用需要额外加固。
项目最近更新(2026-06-13)表明作者仍在维护,但以单人或小团队维护教育项目,响应速度和功能迭代有限。对生产系统有更高要求的用户,建议参考 LangChain、LlamaIndex 等成熟框架的实现。
Simple Local RAG 是 2024 年前后本地化 AI 热潮的一个缩影。RAG 技术的核心价值——让 LLM"知道"它原本不知道的东西——正在从云端向边缘下沉:
本项目以其零门槛、透明、教育导向的特点,成为 RAG 学习路径上的标杆资源。随着 RAG 技术在企业 AI 落地中的持续普及,这类教育项目的价值将进一步凸显——它们不只是代码,更是一扇通向 AI 工程实践的门。
| 维度 | 评分 | 说明 |
|---|---|---|
| 教育价值 | ⭐⭐⭐⭐⭐ | 5/5 顶级教学资源,代码+文档+视频三位一体 |
| 技术深度 | ⭐⭐⭐⭐ | 4/5 覆盖完整 RAG 链路,细节丰富 |
| 生产适用性 | ⭐⭐ | 2/5 适合学习,不适合直接生产部署 |
| 隐私友好度 | ⭐⭐⭐⭐⭐ | 5/5 完全本地运行,数据零泄露 |
| 活跃度 | ⭐⭐⭐⭐ | 4/5 持续维护,近期有更新 |
一句话评价:Simple Local RAG 是目前最适合初学者理解 RAG 全流程的开源教程,代码透明、无 API 依赖、学习曲线平缓。它不是最好的生产 RAG 系统,但绝对是最适合入门的 RAG 项目之一。