PDF处理工具

一个基于MCP架构的PDF处理工具,能够向量化内容并与AI API集成。

  • by gmontinny
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 gmontinny/ia_mcp

使用说明

MCP PDF处理器

利用模型上下文协议 (MCP) 架构来处理 PDF、向量化内容并与 AI API 集成的应用程序。

建筑

  • MCP 服务器处理PDF和管理矢量库(本地运行)
  • MCP 客户端与服务器通信的接口
  • API FastAPI用于外部交互的 REST 端点
  • Qdrant语义搜索的矢量银行
  • 人工智能与OpenAI GPT-4o-mini和Gemini Pro集成

配置

  1. 在文件中配置 API 密钥 .env:
OPENAI_API_KEY=sua-chave-openai
GEMINI_API_KEY=sua-chave-gemini
QDRANT_URL=http://localhost:6333
API_PORT=8000
  1. 参考问题:
docker-compose up -d
  1. 安装依赖关系 :
pip install -r requirements.txt

背板如果有版本冲突,请强制重新安装:

pip install -r requirements.txt --force-reinstall
docker-compose down && docker-compose up -d

使用

启动应用程序

python main.py

自动应用 :

  • 处理文件夹中的所有 PDF dados/
  • 在 Qdrant 中检视并储存
  • 在端口 8000 上启动 REST API

API的终点

GET / API信息

curl http://localhost:8000/
{"message": "MCP PDF Processor API", "version": "1.0.0"}

GET /health 应用程序状态

curl http://localhost:8000/health
{"status": "healthy", "qdrant_url": "http://localhost:6333"}

POST /process-pdf - 特定的PDF过程

curl -X POST "http://localhost:8000/process-pdf?pdf_path=dados/documento.pdf"
{"status": "success", "message": "Processado 45 chunks"}

POST /extract-text -从PDF中提取文本

curl -X POST "http://localhost:8000/extract-text?pdf_path=dados/documento.pdf"
{"status": "success", "text": "Texto completo do PDF..."}

POST /search -搜索文件

curl -X POST http://localhost:8000/search \
  -H "Content-Type: application/json" \
  -d '{"query": "RASEAM 2025", "limit": 3}'
{
  "results": [
    {
      "id": "uuid",
      "score": 0.95,
      "text": "Texto do documento...",
      "metadata": {"source": "dados/doc.pdf", "chunk_id": 0}
    }
  ]
}

POST /search 用AI搜索

curl -X POST http://localhost:8000/search \
  -H "Content-Type: application/json" \
  -d '{"query": "RASEAM 2025", "limit": 3, "use_ai": "both"}'
{
  "results": [...],
  "ai_response": {
    "openai": "Resposta do GPT-4o-mini...",
    "gemini": "Resposta do Gemini Pro..."
  }
}

POST /ai-query - 具有上下文的AI查询

curl -X POST http://localhost:8000/ai-query \
  -H "Content-Type: application/json" \
  -d '{"prompt": "Qual o tema principal?", "use_context": true, "model": "openai"}'
{
  "response": {
    "openai": "O tema principal é..."
  }
}

Python 示例

import requests

# 1. Verificar status
response = requests.get("http://localhost:8000/health")
print(response.json())

# 2. Processar PDF
response = requests.post(
    "http://localhost:8000/process-pdf",
    params={"pdf_path": "dados/documento.pdf"}
)
print(response.json())

# 3. Buscar documentos
response = requests.post("http://localhost:8000/search", json={
    "query": "RASEAM 2025",
    "limit": 5
})
results = response.json()["results"]
print(f"Encontrados {len(results)} documentos")

# 4. Buscar com IA
response = requests.post("http://localhost:8000/search", json={
    "query": "principais tópicos",
    "limit": 3,
    "use_ai": "both"
})
ai_responses = response.json()["ai_response"]
print(f"OpenAI: {ai_responses['openai']}")
print(f"Gemini: {ai_responses['gemini']}")

# 5. Consulta direta IA
response = requests.post("http://localhost:8000/ai-query", json={
    "prompt": "Resuma os pontos principais",
    "use_context": True,
    "model": "both"
})
print(response.json()["response"])

直接使用 MCP 客户端

# exemplo_client_mcp.py
import asyncio
from src.mcp_client import MCPClient

async def main():
    async with MCPClient() as client:
        # Processar PDF
        result = await client.process_and_store_pdf("dados/documento.pdf")
        print(result)
        
        # Buscar documentos
        docs = await client.search_documents("sua consulta", limit=5)
        print(f"Encontrados {len(docs)} documentos")
        
        # Extrair texto
        text = await client.extract_pdf_text("dados/documento.pdf")
        print(f"Texto: {len(text)} caracteres")

asyncio.run(main())

测试API

python test_api.py

完整的 MCP 客户端示例

python exemplo_client_mcp.py

项目结构

ia_mcp/
├── dados/                  # PDFs para processamento automático
├── src/
│   ├── api.py             # FastAPI endpoints
│   ├── mcp_server.py      # Servidor MCP (local)
│   ├── mcp_client.py      # Cliente MCP
│   ├── ai_clients.py      # Clientes OpenAI/Gemini
│   ├── pdf_processor.py   # Processamento de PDF
│   ├── vector_store.py    # Gerenciamento Qdrant
│   └── config.py          # Configurações
├── docker-compose.yml     # Qdrant v1.7.0 container
├── main.py               # Ponto de entrada
├── test_api.py           # Testes da API
├── exemplo_client_mcp.py  # Exemplo cliente MCP
├── requirements.txt      # Dependências (compatíveis)
└── .env                  # Variáveis de ambiente

测试版本

  • Qdrant:v1.7.0(Docker+客户端)
  • 快速API: ≥ 0.110.0
  • 开放人工智能: ≥ 1.12.0
  • 双子座: ≥ 0.4.0
  • 主控程序: ≥ 1.0.0

故障排除

Qdrant 兼容错误

如果出现错误,如 'QdrantClient' object has no attribute 'search':

  1. 重新安装依赖关系:
pip install -r requirements.txt --force-reinstall
  1. 重新定义Qdrant:
docker-compose down
docker-compose up -d
  1. 重新启动应用程序:
python main.py

API 密钥错误

如果遇到认证错误 :

  • 检查文件是否 .env 存在
  • 设置您的真实 OpenAI 和 Gemini 密钥
  • 应用程序在没有密钥的情况下工作(带有信息消息)

PDF 处理错误

如果 PDF 无法处理:

  • 检查文件是否存在于文件夹中 dados/
  • 请确定 Qdrant 正在运行(docker ps)
  • 测试端点 /health 第一

功能

✅ 自动处理 启动时的 PDF ✅ 矢量化 com句子转换器 ✅ 语义搜索 com Qdrant ✅ 双 AI 集成 -OpenAI+双子座 ✅ 完整的 REST API com快速API ✅ MCP 架构 本地服务器/客户端 ✅ Chunking inteligente 来自文件 ✅ 上下文响应 达IA