](https://github.com/hensing/searchless-ngx/actions/workflows/ci.yml)
🪄 无搜索ngx
停止搜索您的文档。开始问他们。 无纸化ngx的代理RAG MCP服务器。
少搜索。更多发现。 无搜索ngx将您的无纸ngx实例从基于关键字的静态存档转换为智能的会话代理。通过利用模型上下文协议(MCP)和代理RAG,它允许现代LLM原生地理解、搜索、过滤和推理您的文档。
🤔 关于名字
如果 无纸化 把你从纸质纸的负担中解放出来, 无搜索 将您从手动搜索的负担中解放出来。
- 无服务器 意味着你不管理服务器。
- 无密码 意味着你不输入密码。
- 无搜索 意味着您不再点击过滤器或浏览20页的PDF。你只要问你的助手一个问题,它就会帮你完成繁重的工作。这
-ngx向使这一切成为可能的不可思议的Paperless ngx项目致敬。
*(注:在引擎盖下,技术服务被命名为 paperless-mcp-server 为AI提供最佳的上下文基础)。*
\[!重要\] 此项目假设您的文档已正确解析(OCR),并在Paperless ngx中分配了高质量的标签。无搜索ngx是一个检索和推理层,而不是一个组织工具。如果您的库需要更好的元数据或自动标记,请查看 无纸化GPT.
✨ 主要特点
- 代理式检索增强生成:为您的法学硕士配备查询、筛选和汇总个人文档的工具。
- 混合搜索策略:
- 精确元数据API:利用Paperless ngx强大的过滤功能(标签、通讯员、日期)进行精确检索。 - 语义向量搜索:使用ChromaDB和Gemini嵌入来查找基于以下内容的文档 *意义* 和 *上下文* (例如,“软件订阅”、“食品收据”)。
- 针对开放式WebUI进行了优化:
- 严格的JSON模式:零 anyOf 或 null 确保与实验性MCP解析器100%兼容。 - 交互式卡片:搜索结果以漂亮的Markdown卡片形式呈现,带有可点击的标题和元数据。
- 只读:零破坏性行动。它使用现有的OCR文本,从不下载二进制PDF。
- 智能同步:启动同步使用水印在几秒钟内仅从Paperless获取新的/更改的文档。定期后台同步(默认值:每15分钟一次,可配置)使索引保持最新。Webhook支持实时摄取单个文档。通过手动完全同步
POST /sync/all. - 搜索弹性:主动回退策略可确保LLM即使在初始过滤器限制过大的情况下也能找到文档。
🏗️ 建筑
graph TD
User([User]) -->|Chat| OWUI(Open WebUI)
OWUI -->|MCP Streamable HTTP| MCP(FastAPI MCP Server)
MCP -->|Gemini Embeddings| Chroma[(ChromaDB)]
MCP -->|"Read-Only API (metadata, content, sync)"| Paperless(Paperless-ngx)
MCP -->|Paginated Cache| Cache[(In-Memory Metadata)]
External([Paperless Workflow / External]) -->|POST /webhook/sync| MCP
Timer([Periodic Sync\nevery 15 min]) -->|bulk_sync_documents| MCP🚀 设置和安装
1.先决条件
- Docker&Docker编写
- 无纸化ngx实例
- Google Gemini API密钥(用于嵌入和/或LLM)
2.环境配置
复制 .env.example 到 .env 并配置:
cp .env.example .env| 变量 | 描述 |
|---|---|
PAPERLESS_URL | 您的无纸ngx基本URL |
PAPERLESS_TOKEN | 来自无纸设置的API令牌。 |
GEMINI_API_KEY | 用于嵌入的Google GenAI密钥。 |
PAPERLESS_PUBLIC_URL | (可选)聊天中用于可点击链接的URL。默认为 PAPERLESS_URL. |
LOG_LEVEL | (可选)日志详细程度: INFO (默认)或 DEBUG. |
MAX_CHUNKS_PER_DOC | (可选)限制每个文档的段数(默认值:100≈25页)。 |
BULK_SYNC_LIMIT | (可选)将初始摄入限制在X个最新文档。 |
SYNC_INTERVAL_MINUTES | (可选)周期性后台同步间隔(分钟)(默认值:15)。吃起来 0 禁用。 |
3.Docker编写
启动代理并打开WebUI:
docker compose up -d4.连接到Open WebUI
- 打开
http://localhost:8080. - 首选 设置>连接>MCP服务器.
- 首选方法:单击导入按钮并选择
scripts/webui-connection.json. - 手动方法:添加类型为的新服务器
MCP Streamable HTTP和URLhttp://mcp-server:8001/mcp.
有关Open WebUI的详细说明,请参阅 WEBUI_SETUP.md.
💡 使用示例
列出文档
- *“列出亚马逊的最后5个文档。”* (使用精确的元数据搜索)
- *“显示我最近的发票。”* (使用空查询按日期提取)
概念搜索(语义)
- *“查找我拥有的所有软件订阅。”* (即使标题中没有“订阅”,也会找到“Netflix”、“Adobe”、“Microsoft”)
- *“我上次去柏林的食物收据在哪里?”* (将位置上下文与文档含义相结合)
数据提取
- *“2024年2月,我在出行方面花了多少钱?”* (LLM迭代搜索/火车发票并计算总和)
- *“总结一下我的健身房合同的取消条款。”* (LLM使用
get_document_details阅读完整的OCR文本)
🛠️ 开发与测试
诊断工具
使用原始协议检查器验证服务器的输出:
docker exec paperless-mcp-server python scripts/test_mcp_raw.py测试覆盖率
使用以下命令运行测试套件 uv:
uv run pytest👤 作者
⚖️ 许可证
根据GPLv3许可。
