PDF文档处理与聊天工具

一款基于本地LLM的PDF文本提取与聊天工具,支持PDF上传、文本提取、RAG增强检索和本地模型对话,无需API密钥或互联网连接。

  • by dakshp26
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 dakshp26/PDFDashboardWithMCP

使用说明

带MCP的PDF仪表板

上传PDF,使用PyMuPDF或GLM-OCR(Ollama)提取文本,并使用Ollama本地模型对文档提问。没有API密钥。

特性

  • PDF提取:PyMuPDF用于文本层;扫描PDF或仅扫描图像时的GLM-OCR
  • 根据RAG文件:每次上传都有自己的Chroma收藏
  • 本地聊天:带有内联引用的LangChain代理;从下拉列表中选择任何已安装的Ollama型号
  • Markdown查看器:阅读提取的文本,预览块,下载markdown

先决条件

设置

1.克隆存储库

git clone https://github.com/dakshp26/PDFDashboardWithMCP.git
cd PDFDashboardWithMCP

2.安装依赖项

uv sync

3.拉动Olama车型

ollama pull qwen2.5:3b       # chat (or another chat model)
ollama pull nomic-embed-text # embeddings
ollama pull glm-ocr          # OCR for scanned PDFs

4.运行应用程序

uv run streamlit run app/main.py

打开 http://localhost:8501 在您的浏览器中。

用法

  1. 上传PDF:打开上传PDF,选择一个文件,等待提取完成
  2. 聊天:打开聊天,选择PDF和Ollama模型,提问

项目结构

app/
├── main.py                       # Entry point, page navigation
├── app_pages/
│   ├── landing.py                # Home page
│   ├── process_pdf_upload.py     # Upload + pipeline UI
│   ├── pdf_library.py            # Browse uploaded PDFs (read-only viewer)
│   └── process_pdf.py            # Viewer + chat UI
└── process_pdf/
    ├── extract.py                 # PDF → Markdown (pymupdf4llm + GLM-OCR)
    ├── pipeline.py                # Extraction pipeline with live progress
    ├── rag.py                     # Chunking, embeddings, Chroma persistence
    └── agent.py                   # LangChain agent with retriever tool
mcp_server/
└── server.py                     # MCP server (list_documents, get_document)
data/                             # Runtime data (gitignored)
├── process_pdf/                  # Saved PDFs and extracted markdown
└── process_chroma/               # Chroma vector collections (one per PDF)

[!注意] 按文件细分、执行顺序和数据流: APP_STRUCTURE.md.

页面

Page 它的作用
家 链接和设置摘要
上传PDF 运行提取(文本层、OCR回退、分块、嵌入);下载markdown
PDF库 打开过去的上传;查看标记和块预览,而无需重新运行提取
聊天 查询带有引用的索引PDF

提取进度显示在 st.status 块。经过处理后,Chroma系列得以保留 data/process_chroma/ 并在下次运行时加载,而无需重新提取。

MCP服务器

MCP客户端的两个工具(Claude Desktop、Cursor、Claude Code):

  • list_documents:索引文档集合
  • get_document(document, query):对集合进行语义搜索
Claude Desktop

添加 claude_desktop_config.json (Windows: %APPDATA%\Claude\claude_desktop_config.json)或使用 .mcp.json 在项目根目录中:

{
  "mcpServers": {
    "PDFDashboardWithMCP": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/PDFDashboardWithMCP", "mcp_server/server.py"]
    }
  }
}
Cursor

添加 .cursor/mcp.json 在项目根目录或全局目录中 ~/.cursor/mcp.json:

{
  "mcpServers": {
    "PDFDashboardWithMCP": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/PDFDashboardWithMCP", "mcp_server/server.py"]
    }
  }
}
Claude Code

项目范围 .mcp.json 在repo根目录中,服务器与此repo绑定:

{
  "mcpServers": {
    "PDFDashboardWithMCP": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/PDFDashboardWithMCP", "mcp_server/server.py"]
    }
  }
}

克劳德代码读取 .mcp.json 当你打开项目时。

替换 /absolute/path/to/PDFDashboardWithMCP 使用您的克隆路径。

Ollama一定和他一起跑 nomic-embed-text 在MCP服务器加载集合之前拉取。

技术栈

组件 库
UI 流光显示
PDF提取 langchain-pymupdf4llm,PyMuPDF
OCR回退 Ollama glm-OCR
嵌入 Ollama nomic嵌入文本
矢量存储 色度(langchain色度)
LLM/代理 Ollama聊天模型(例如qwen2.5:3b),LangChain
包管理器 uv
MCP服务器 MCP[cli]