ollama-rag
基于Ollama的本地RAG实现,让本地大模型能翻书回答私有文档问题
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于Ollama的本地RAG实现,让本地大模型能翻书回答私有文档问题
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有过这种体验:和一个只记住了最近 10 句话的 AI 对话,问它半小时前的 PDF 内容,它一脸茫然?本地部署的大语言模型受限于上下文窗口,处理长文档时往往力不从心——这是让很多开发者头疼的问题。
Ollama RAG 解决的就是这件事:它用检索增强生成(RAG)技术,让本地运行的 AI 能够"翻书"回答你的问题,而且完全不依赖云端,数据完全私有。
digithree/ollama-rag 是一个基于 Ollama 的可定制化 RAG 实现,由独立开发者维护,GitHub 获星 130, fork 34。虽然 star 数不高,但它代表了一种明确的工程思路:用主流框架做本地 AI 知识库,而不是重复造轮子。
项目使用 LangChain 作为 RAG 编排框架,ChromaDB 作为向量数据库,FastEmbed 做文本嵌入,Streamlit 构建 Web 界面。所有组件均可本地运行,不依赖任何云服务,数据全程留在本地机器上。

RAG 流水线是这个项目的核心,由 converse.py 实现,主要分为三个阶段:
1. 检索阶段(Retrieval)
ChromaDB 负责向量存储与相似度搜索。当用户提问时,系统从本地知识库(PDF、文档等)中检索最相关的片段。默认每次检索 6 条记忆条目(阈值 0.5)和 2 本书籍(阈值 0.6),这些参数在代码中以常量形式暴露,方便用户按需调整。
2. 生成阶段(Generation)
检索到的相关片段与用户问题拼接成增强 prompt,发送给本地 Ollama 运行的 LLM(如 Llama2)。Ollama 提供与 OpenAI 兼容的 API,项目通过 LangChain 的 ChatOllama 接口接入,换模型只需改配置。
3. 记忆管理(Memory)
项目同时实现了静态记忆(PDF 摄入后的持久化向量数据)和动态记忆(对话历史,按日期组织)。动态记忆利用对话时间戳在向量数据库中做日期范围检索,让 AI 能"记住"特定日期附近的上下文。
Streamlit 构建的界面简洁直接:聊天窗口 + 历史开关 + 用户/AI 名称配置。界面代码 (app.py) 不到 60 行,核心逻辑委托给 Converse 类。这是典型的"薄前端 + 厚后端"架构,界面工程师可以专注 UI,不触及 RAG 逻辑。
会话历史默认关闭,开启后可查看完整对话记录。配置信息(用户名、AI 名、模型选择)存储在 TinyDB 的 JSON 文件中,轻量且易读。
ingest-pdf.py 负责将 PDF 文档摄入向量数据库:PyPDFLoader 加载 PDF → RecursiveCharacterTextSplitter 按 512 token 分块 → FastEmbedEmbeddings 向量化 → 存入 ChromaDB,持久化到本地 ./chroma_db_pdfs/ 目录。
这套流程与主流 RAG 实现一致,文档可替换为网页抓取(scrape-pdf-list.sh)或其他格式,扩展成本低。
| 组件 | 技术选型 | 作用 |
|---|---|---|
| RAG框架 | LangChain 0.2.6 | 流水线编排、Prompt模板、LCEL |
| 向量数据库 | ChromaDB | 本地向量存储与检索 |
| 嵌入模型 | FastEmbed | 轻量快速文本向量化 |
| LLM运行时 | Ollama | 本地模型部署(OpenAI兼容API) |
| Web界面 | Streamlit 1.32.2 | 交互式聊天界面 |
| 配置存储 | TinyDB | 轻量JSON数据库 |
优点:
限制:
硬件建议: 基础运行(CPU)需要 4GB+ RAM;运行 7B 参数模型建议 8GB+ RAM;运行更大模型(13B+)建议 NVIDIA GPU + 8GB+ 显存。
随着 AI 落地进入深水区,本地 RAG 正成为企业内网文档助手的主流选择。相比云端方案,本地 RAG 避免了 API 调用成本和数据合规风险。Ollama 的崛起进一步降低了本地 LLM 的门槛——过去需要复杂的模型管理,现在一条命令 ollama run llama2 即可搞定。
ollama-rag 的价值在于将 Ollama 与 LangChain RAG 能力结合,为个人开发者和小型团队提供了一个可改造的知识库原型。它的工程实现不完美,但对于理解 RAG 全链路工作原理,是一个值得动手实验的好起点。
# 1. 安装依赖
pip install -r requirements.txt
# 2. 配置 Ollama(安装模型)
ollama pull llama2
# 3. 启动 Web 界面
bash run.sh
# 或直接
streamlit run app.py
# 4. 摄入 PDF 文档
# 编辑 pdf-files.txt 填入 PDF 路径,然后:
python ingest-pdf.py
打开浏览器访问 http://localhost:8501,即可开始与本地 AI 对话。