easy-local-rag
零配置本地 RAG 工具,用 Ollama + PyTorch 打造私有知识库问答
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
零配置本地 RAG 工具,用 Ollama + PyTorch 打造私有知识库问答
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样的场景:你在企业内部积累了大量技术文档、产品手册、会议记录,想要构建一个私有知识库,让 AI 能基于这些资料回答问题。
市面上的方案要么需要付费 API(数据出境风险、费用累积),要么部署复杂到让普通开发者望而却步(需要懂 Docker、K8s、微服务)。更让人头疼的是,很多 RAG 教程要么只讲概念不贴代码,要么代码跑不通还要调试三五天。
easy-local-rag 就是为了解决这个痛点诞生的。它把本地 RAG 的门槛降到「下载即用」级别——不需要懂 Docker,不需要 GPU 满血版,一个 Python 脚本加上 Ollama,就能让 llama3 基于你自己的文档回答问题。
easy-local-rag 由 YouTube 频道 AllAboutAI 的作者维护,该频道专注于用通俗易懂的方式讲解 AI 实战技能。作者是一个坚定的本地化 AI 倡导者,主张「数据主权」——你的文档、你的邮件、你的对话记录,不应该因为用了 AI 就必须上传到别人的服务器。
项目目前积累 1222 颗星,MIT 开源许可,代码可以自由修改和商业使用。
这是项目的默认推荐流程。用户提出问题后,系统会先用 LLM 将问题「翻译」成更适合检索的形式——这就是 Query Rewrite 的作用。
举个例子:用户问「那个关于性能优化的文档说了什么?」,Rewrite 后可能变成「性能优化文档内容摘要」。这样检索时匹配命中率更高,对模糊问题尤其有效。
Rewrite 后的查询向量与 vault 中的文档向量做 余弦相似度(Cosine Similarity) 匹配,取 top-k 条最相关内容作为上下文注入 LLM prompt,最终生成回答。
整个流程如下:
用户提问 → Query Rewrite → 向量化(mxbai-embed-large)→
向量数据库检索(vault_embeddings.json)→ 提取相关上下文 →
组装 prompt(system_message + context + conversation_history)→ Ollama LLM → 回答
值得注意的是,对话历史(conversation_history)会被保留下来,用户可以连续追问,而不是每次都是孤立的新问题。
对于意图明确的问题(如「总结第三段的内容」),Rewrite 反而可能改偏原意。这个脚本跳过了 Rewrite 步骤,直接用原始问题做检索,响应更快,适合简单查询场景。
这是项目 v1.3 新增的功能模块,也是最具差异化的一点。用户可以用自己的 Gmail 或 Outlook 账号拉取历史邮件,构建一个本地邮件知识库。
collect_emails.py 会通过 IMAP 协议连接邮箱,执行以下清洗流程:
然后 emailrag2.py 用相同的 RAG 流程,让用户可以对自己的邮件提问:「上周客户关于那个 bug 反馈的邮件说了什么?」
项目没有引入 Milvus、ChromaDB 等专门的向量数据库,而是用 JSON 文件存储向量(vault_embeddings.json),用 PyTorch 计算余弦相似度。
这种设计的优点是零依赖、无需额外部署,缺点是向量数量达到数万条后查询性能会明显下降。代码中 vault_embeddings.nelement() == 0 的空向量检查说明作者考虑到了初始化边界情况,但大文档集场景并未做专门优化。
项目使用 Ollama 官方维护的 mxbai-embed-large 模型进行文本向量化。这是一个专门针对检索任务优化的 embedding 模型,在 Ollama 平台可以直接通过 ollama pull mxbai-embed-large 获取。
对于中文文档,mxbai-embed-large 的表现一般(该模型主要基于英文训练),如果你的 vault 以中文为主,建议替换成中文 embedding 模型。
代码中 from openai import OpenAI 配合 base_url: http://localhost:11434/v1(Ollama 的 OpenAI 兼容端点),实现了对 OpenAI SDK 的兼容。
这意味着:如果你日后想从 Ollama 切换到其他 OpenAI 兼容后端(如 vLLM、LocalAI),只需修改 config.yaml 中的 base_url 和 api_key,无需改动业务代码。这种设计属于典型的 依赖抽象,值得肯定。
config.yaml 存放 RAG 核心配置(vault 文件路径、模型名、top_k、system_message)。.env 文件存放邮箱认证信息。分离策略确保了敏感信息不会随代码提交泄露。
| 步骤 | 操作 | 预计时间 |
|---|---|---|
| 1 | git clone + pip install | 5分钟 |
| 2 | 安装 Ollama + 启动服务 | 10分钟 |
| 3 | ollama pull llama3 + mxbai-embed-large | 10-30分钟 |
| 4 | 上传 PDF/TXT(upload.py) | 2分钟 |
| 5 | 运行 localrag.py 开始对话 | 即时 |
常见坑:
ollama serve,否则会报连接错误ollama pull llama3,如果没有 GPU 会用 CPU 推理,速度较慢easy-local-rag 代表了 RAG 民主化的一个重要方向——把复杂的 AI 能力封装成普通人能跑通的脚本。随着 Ollama 的生态越来越完善,这类本地 RAG 工具的上手门槛还在持续降低。
从 GitHub 1222 星的数据来看,这个项目在个人开发者和小型团队中有稳定受众。它的成功在于找到了一个清晰的定位:不做企业级 RAG 平台,而是做「第一个本地 RAG 脚本就能跑通」的最小化产品。