Ollama+
LangChain+
Next.js+
FastAPI + llama3.2+ nomic-embed-text+ Jupyter Notebook+ ChromaDB本地 RAG 方案,用 Ollama+LangChain 实现与 PDF 文档对话问答
Ollama 提供本地 LLM 与嵌入模型,LangChain 编排 RAG 流水线,ChromaDB 存向量,多前端提供界面与 API
方案简介
本方案是一个完全本地化的 RAG(检索增强生成)应用:使用 Ollama 在本地运行大语言模型与嵌入模型,借助 LangChain 构建 RAG 流水线,并以 ChromaDB 作为向量数据库,实现对 PDF 文档的自然语言问答与对话。项目提供三种使用形态:推荐使用的 Next.js 现代聊天界面(配合 FastAPI 后端)、经典的 Streamlit 界面,以及用于实验学习的 Jupyter Notebook。适合希望在本地机器上私密处理 PDF 文档、不希望数据离开本机的开发者与用户。
亮点与能力
- 🔒 100% Local - 所有处理均在本地完成,数据不离开机器
- 📄 Multi-PDF Support - 上传并跨多份文档查询
- 🧠 Multi-Query RAG - 智能检索并带来源引用
- 🎯 Advanced RAG - LangChain 驱动的流水线配合 ChromaDB
- 🖥️ Two Modern UIs - Next.js(主推)与 Streamlit 界面
- 🔌 REST API - FastAPI 后端支持编程访问
- 📓 Jupyter Notebooks - 用于实验与学习
前置要求
- 安装 Ollama,并拉取所需模型:
bash
ollama pull llama3.2 # or your preferred chat model
ollama pull nomic-embed-text # for embeddings
- 克隆仓库:
bash
git clone https://github.com/tonykipkemboi/ollama_pdf_rag.git
cd ollama_pdf_rag
- 设置 Python 环境:
bash
python -m venv venv
source venv/bin/activate # On Windows: .\venv\Scripts\activate
pip install -r requirements.txt
- 设置 Next.js 前端:
bash
cd web-ui
pnpm install
pnpm db:migrate
cd ..
实施步骤
1. 启动 Next.js + FastAPI(推荐)
启动两个服务:
bash
Terminal 1: Start the FastAPI backend
python run_api.py
Runs on http://localhost:8001
Terminal 2: Start the Next.js frontend
cd web-ui && pnpm dev
Runs on http://localhost:3000
或使用便捷脚本:
bash
./start_all.sh
2. 启动 Streamlit 界面
bash
python run.py
Runs on http://localhost:8501
3. 使用 Jupyter Notebook
bash
jupyter notebook
打开 notebooks/experiments/updated_rag_notebook.ipynb 进行实验。
使用与配置要点
Next.js 界面
- 上传 PDF - 点击 📎 按钮或拖放文件
- 查看 PDF - 上传的 PDF 显示在侧边栏并带分块数
- 选择模型 - 从本地可用的 Ollama 模型中选择
- 提问 - 输入问题并获得带来源引用的回答
- 查看推理 - 查看 AI 的思考过程与检索到的分块
Streamlit 界面
- 通过文件上传器上传 PDF 或切换 "Use sample PDF"
- 选择可用的 Ollama 模型
- 通过界面与 PDF 对话
- 使用缩放滑块调整 PDF 可见性
- 切换文档时删除集合以清理
API 验证
后端提供的关键端点:POST /api/v1/pdfs/upload(上传处理 PDF)、POST /api/v1/query(RAG 查询)、GET /api/v1/models(列出可用 Ollama 模型)、GET /api/v1/health(健康检查)。完整文档见运行时的 http://localhost:8001/docs。
注意事项与常见问题
- Ollama 未响应:确保 Ollama 正在运行(
ollama serve) - 模型未找到:使用
ollama pull拉取模型 - 未检索到分块:重新上传 PDF 以重建向量数据库
- 端口冲突:检查 3000、8001 或 8501 端口是否被占用
常见错误
Windows 上的 ONNX DLL 错误
DLL load failed while importing onnx_copy2py_export
安装 Microsoft Visual C++ Redistributable 并重启。
仅 CPU 系统
如遇内存问题,减小分块大小:修改 src/core/document.py 中的 chunk_size 为 500-1000。
优缺点
- ✓ 100% 本地运行,数据不出机器
- ✓ 多界面可选,含 REST API
- ✕ CPU 环境可能有内存压力
- ✕ 需自建 Ollama 与多服务环境
出处
本方案挖掘自开源项目 tonykipkemboi/ollama_pdf_rag,方案内容与实施命令均来自其 README 原文。
本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。