ollama_pdf_rag
基于 Ollama + LangChain 的本地 PDF 问答 RAG 系统,支持 Next.js 和 Streamlit 双界面
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于 Ollama + LangChain 的本地 PDF 问答 RAG 系统,支持 Next.js 和 Streamlit 双界面
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你下载了一篇 300 页的学术论文,急着找某个具体问题的答案。传统做法是 Ctrl+F 逐页搜索,但论文结构松散,关键词散落各处,效率极低。ollama_pdf_rag 解决的就是这个问题——它让你像跟人对话一样跟 PDF 聊天,问"这篇论文的主要贡献是什么",AI 会从文档中检索相关内容并给出带出处的回答。整个过程完全本地运行,数据不会上传到任何服务器。
这个项目由独立开发者 Tony Kipkemboi 创建和维护,在 GitHub 上已获得 500+ Stars。它将 Ollama 本地大模型、LangChain RAG 框架和 ChromaDB 向量数据库结合在一起,提供了一个完整的多文档问答 pipeline。
项目采用典型的三层架构:数据层负责 PDF 解析和向量化存储,推理层基于 LangChain 构建 RAG chain 调用 Ollama,交互层同时提供 Next.js 和 Streamlit 两种 Web 界面。
数据层的核心在 src/core/document.py,使用 pdfplumber 和 pdfminer.six 解析 PDF 文本,通过 LangChain 的 RecursiveCharacterTextSplitter 将长文档切分为重叠的 chunk(默认 chunk_size=1000, overlap=200),再用 Ollama 的 nomic-embed-text 模型生成向量,最后存入 ChromaDB 向量数据库。推理层由 src/core/rag.py 实现,构建了包含 retriever、context 注入和 LLM 调用三步的标准 RAG chain,支持多查询(multi-query)策略从不同角度检索相关内容并汇总,提升答案覆盖率。交互层则分两条路线:Next.js Web UI(web-ui/ 目录,基于 Next.js App Router + Vercel AI SDK + Drizzle ORM,端口 3000)和 Streamlit 界面(src/app/,端口 8501),另有 FastAPI 纯后端服务(src/api/,端口 8001)供程序化调用。
项目的核心技术栈围绕"本地运行"这一核心理念展开:
| 组件 | 技术选型 | 作用 |
|---|---|---|
| LLM 引擎 | Ollama | 本地运行 llama3.2 等模型,无需 API key |
| Embedding | nomic-embed-text | Ollama 内置,高质量开源 embedding |
| RAG 框架 | LangChain 1.0 | 标准化 RAG pipeline |
| 向量数据库 | ChromaDB | 轻量级本地向量存储 |
| 前端框架 | Next.js 15 (App Router) | 现代 React Web UI |
| 后端框架 | FastAPI | 高性能 REST API |
| ORM | Drizzle | TypeScript 端数据库管理 |
| 可视化界面 | Streamlit | 备选 Python 原生界面 |
项目采用 MIT 许可证,完全开源,无商业化依赖。所有数据(PDF 文件、向量数据库)默认存储在本地 data/ 目录,不存在隐私泄露风险。topics 标签明确包含 langchain、ollama、rag、pdf 等关键词,质量较高。
部署流程对有开发经验的用户来说非常友好,但存在一个前提门槛:必须先安装 Ollama 并手动 pull 所需模型。首次部署约需 10-15 分钟,主要时间花在安装 Ollama 和下载模型文件(通常 2-10GB 不等)。
标准部署步骤:
# 1. 安装 Ollama 后,pull 模型
ollama pull llama3.2
ollama pull nomic-embed-text
# 2. 克隆并安装依赖
git clone https://github.com/tonykipkemboi/ollama_pdf_rag.git
cd ollama_pdf_rag
pip install -r requirements.txt
cd web-ui && pnpm install && pnpm db:migrate && cd ..
# 3. 启动服务(一键脚本)
./start_all.sh
启动后三个服务同时运行:Next.js 前端 (localhost:3000)、FastAPI 后端 (localhost:8001) 和 Streamlit (localhost:8501)。FastAPI 提供完整的 REST API 端点,包括 PDF 上传 (/api/v1/pdfs/upload)、查询 (/api/v1/query)、模型列表 (/api/v1/models) 和健康检查 (/api/v1/health),可通过 Swagger UI (localhost:8001/docs) 调试。
这个项目并非没有缺点。首先,没有 Docker 支持意味着跨平台部署需要手动配置 Python 环境、Node.js 依赖和 Ollama,Windows 用户还可能遇到 ONNX DLL 兼容性问题。其次,CPU 性能瓶颈明显——在无 GPU 的机器上,embedding 生成和 LLM 推理都会很慢,文档超过 50 页时等待时间难以接受。再者,Ollama 模型管理依赖命令行(ollama pull、ollama list),对于不熟悉终端的用户有一定学习成本。最后,项目没有提供增量更新机制——同一 PDF 更新后需要重新上传并重建向量库。
尽管存在上述局限,ollama_pdf_rag 的价值在于提供了一个真实可运行的本地 RAG 完整范例。它涵盖了 RAG pipeline 的所有关键环节:文档解析 → chunk 切分 → embedding → 向量存储 → 检索 → 生成,每个环节的参数都可以在代码中直接调整学习。对于想理解 RAG 工作原理的开发者,这个项目比任何教程文章都更直接。
结合 GitHub Stars 增长趋势和社区反馈(YouTube 视频 2.3 万播放量),可以判断这是一个处于活跃维护期的教育型项目,值得作为 RAG 技术栈的学习参考。