Streamlit + Ollama Ollama+ LangChain LangChain+ Next.js Next.js+ FastAPI FastAPI + llama3.2+ nomic-embed-text+ Jupyter Notebook+ ChromaDB

本地 RAG 方案,用 Ollama+LangChain 实现与 PDF 文档对话问答

Ollama 提供本地 LLM 与嵌入模型,LangChain 编排 RAG 流水线,ChromaDB 存向量,多前端提供界面与 API

✓ 100% 本地运行,数据不出机器✓ 多界面可选,含 REST API ✕ CPU 环境可能有内存压力✕ 需自建 Ollama 与多服务环境

方案简介

本方案是一个完全本地化的 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 - 用于实验与学习

前置要求

  1. 安装 Ollama,并拉取所需模型:

bash
ollama pull llama3.2 # or your preferred chat model
ollama pull nomic-embed-text # for embeddings

  1. 克隆仓库:

bash
git clone https://github.com/tonykipkemboi/ollama_pdf_rag.git
cd ollama_pdf_rag

  1. 设置 Python 环境:

bash
python -m venv venv
source venv/bin/activate # On Windows: .\venv\Scripts\activate
pip install -r requirements.txt

  1. 设置 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 界面

  1. 上传 PDF - 点击 📎 按钮或拖放文件
  2. 查看 PDF - 上传的 PDF 显示在侧边栏并带分块数
  3. 选择模型 - 从本地可用的 Ollama 模型中选择
  4. 提问 - 输入问题并获得带来源引用的回答
  5. 查看推理 - 查看 AI 的思考过程与检索到的分块

Streamlit 界面

  1. 通过文件上传器上传 PDF 或切换 "Use sample PDF"
  2. 选择可用的 Ollama 模型
  3. 通过界面与 PDF 对话
  4. 使用缩放滑块调整 PDF 可见性
  5. 切换文档时删除集合以清理

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 原文。

方案出处
tonykipkemboi/ollama_pdf_rag:A full-stack demo showcasing a local RAG (Retrieval Augmented Generation) pipeli
540 star A full-stack demo showcasing a local RAG (Retrieval Augmented Generation) pipeline to chat with your PDFs.

本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。