带ChromaDB的MCP RAG-多格式文档支持
_通过 BINATI A分析_
一个强大的MCP(模型上下文协议)服务器,提供RAG(检索增强生成)功能,支持多种文档格式。由LangChain、ChromaDB提供技术支持 OpenAI或Ollama嵌入.
截图
UI Screenshot 1 UI Screenshot 2 UI Screenshot 3 UI Screenshot 4 UI Screenshot 5 UI Screenshot 6 UI Screenshot 7 UI Screenshot 8
嵌入选项
选择您的嵌入提供商:
- 开放人工智能 (推荐用于Claude Desktop/MCP)-可靠、快速、基于云。看 OPENAI_SETUP.md
- 奥拉玛 (免费,本地)-免费,本地运行,可能存在MCP连接问题
OpenAI快速入门:
- 从获取API密钥https://platform.openai.com/api-keys
- 复制
.env.example到.env - 集
OPENAI_API_KEY=sk-your-key-here - 跑
python server.py
看 OPENAI_SETUP.md 详细说明。
支持的文档格式
- PDF (.pdf)-通过PyPDF2
- 微软Word (.docx、.doc)-通过python-docx
- 幻灯片 (.pptx、.ppt)-通过python pptx
- Excel (.xlsx,.xls)-通过openpyxl
- OpenDocument文本 (.DT)-通过odfy
- 超文本标记语言 (.html,.htm)-通过BeautifulSoup4
- 纯文本 (.txt)
- 降价 (.md,.markdown)
- CSV文件 (.csv)
- JSON (.json)
- XML (.xml)
- 富文本格式 (.rtf)
特性
- 具有自动格式检测功能的多格式文档摄取
- 使用具有持久存储的ChromaDB进行矢量存储
- 双重嵌入支持: OpenAI(推荐用于MCP)或Ollama(免费,本地)
- 并行文档处理以提高性能
- 批量数据库写入以提高效率(OpenAI处理100个文档/批)
- 支持URL、单个文件和整个目录
- 基于相似性评分的语义搜索与检索
- 当可选依赖项缺失时,出现优雅的回退
- 通过.env文件进行基于环境的配置
安装
- 克隆或下载此存储库
- 安装Python依赖项:
pip install -r requirements.txt或
uv pip install -r requirements.txt- 选择您的嵌入提供商:
选项A:OpenAI(推荐)
# Copy environment file
cp .env.example .env
# Edit .env and add your API key
# Get key from: https://platform.openai.com/api-keys
OPENAI_API_KEY=sk-your-key-here选项B:Ollama(免费,当地)
# Download from https://ollama.ai
# Pull the embedding model
ollama pull nomic-embed-text
# Edit .env
EMBEDDING_PROVIDER=ollama注意:Ollama在MCP/Claude Desktop环境中可能存在连接问题。
用法
运行服务器
python server.py与Claude Desktop集成
要将此MCP服务器与Claude Desktop一起使用,请将以下配置添加到您的Claude Desktop配置文件中:
适用于MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json 对于Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"mcp-rag-chroma": {
"command": "uv",
"args": [
"--directory",
"/path/to/mcp_rag_server",
"run",
"server.py"
]
}
}
}替换 /path/to/mcp_rag_server 带有安装目录的实际路径。
或者,您也可以通过更新claude桌面直接从Github集成它,如下所示:
"mcp-rag-chroma": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/CyprianFusi/MCP-rag-with-Chromadb.git",
"server.py"
]
}如果这是您的第一台MCP服务器,请使用以下内容:
{
"mcpServers": {
"mcp-rag-chroma": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/CyprianFusi/MCP-rag-with-Chromadb.git",
"server.py"
]
}
}
}可用的MCP工具
1. ingest_document
从各种来源和格式获取文档。
参数:
source(str):URL、文件路径或目录路径
示例:
- 从URL摄取:
ingest_document("https://example.com/document.pdf") - 摄入单个文件:
ingest_document("/path/to/document.docx") - 占用整个目录:
ingest_document("/path/to/documents/")
支持的来源:
- HTTP/HTTPS URL(先下载文件)
- 本地文件路径(任何支持的格式)
- 目录路径(处理所有支持的文件)
2. retrieve
根据查询搜索相关文档块。
参数:
query(str):搜索查询n(int,可选):要返回的结果数(默认值:5,最大值:100)
退货: 包含文本、元数据和相似性得分的块列表
3. db_info
获取有关数据库及其内容的信息。
退货: 数据库统计信息、配置和唯一来源
4. clear_db
清除数据库中的所有数据。
退货: 状态消息
5. ingest_pdf (遗产)
向后兼容的PDF摄取工具。重定向到 ingest_document.
配置
在中编辑配置部分 server.py 和 .env:
server.py设置:
CHROMA_PATH = "chroma_db" # Vector database storage path
CHUNK_SIZE = 4096 # Text chunk size
CHUNK_OVERLAP = 409 # Overlap between chunks
COLLECTION_NAME = "documents" # ChromaDB collection name
DOWNLOAD_DIR = "downloads" # Directory for downloaded files.env设置:
# Embedding Provider (openai or ollama)
EMBEDDING_PROVIDER=openai
# OpenAI settings (if using OpenAI)
OPENAI_API_KEY=sk-your-key-here
# Ollama settings (if using Ollama)
EMBED_MODEL=nomic-embed-text
OLLAMA_BASE_URL=http://localhost:11434建筑
文档处理管道
- 源检测:确定源是URL、文件还是目录
- 下载 (如果是URL):将文件下载到本地存储
- 格式检测:按扩展名标识文档格式
- 文本提取:对格式使用适当的提取器
- 文本组块:将文本分割成重叠的块
- 嵌入:使用OpenAI或Ollama生成向量嵌入(可配置)
- 存储:在ChromaDB中存储块和嵌入
提取方法
每种格式都有专门的提取功能:
extract_text_from_pdf()-从PDF页面提取文本extract_text_from_docx()-从Word文档中提取段落和表格extract_text_from_pptx()-从PowerPoint幻灯片中提取文本extract_text_from_xlsx()-从Excel工作表中提取数据extract_text_from_odt()-从OpenDocument文件中提取文本extract_text_from_html()-解析HTML并提取干净的文本extract_text_from_markdown()-处理Markdown文件- 还有更多。..
主要的 extract_text() 函数根据文件扩展名路由到适当的提取器。
依赖项
必需
langchain-chroma-ChromaDB集成langchain-ollama-奥利玛嵌入物langchain-core-核心LangChain功能langchain-text-splitters-文本分块requests-HTTP下载fastmcp-MCP服务器框架
文档格式支持
PyPDF2-PDF提取python-docx-DOCX提取beautifulsoup4+lxml-HTML/XML解析python-pptx-PowerPoint提取openpyxl-Excel提取odfpy-OpenDocument提取markdown-Markdown处理(可选)
错误处理
服务器包括全面的错误处理:
- 当缺少可选依赖项时,性能会下降
- 记录提取失败,而不会使整个过程崩溃
- 不支持的文件类型的信息性错误消息
- 回退到未知格式的文本提取
性能优化
- 并发处理:使用ThreadPoolExecutor并行处理多个文档
- 批量写入:在单个操作中写入数据库的所有块
- 异步/等待:非阻塞I/O操作
- 只读模式:以只读模式打开Excel文件以获得更好的性能
- 流媒体下载:大块下载的大文件
局限性
.doc(旧Word格式)支持有限-需要python-docx哪种方法最有效.docx.ppt(旧PowerPoint格式)支持有限-最适合与.pptx.xls(旧Excel格式)支持有限-最适合.xlsx- RTF文件使用基本文本提取
- 没有OCR的扫描PDF将无法提取文本
- 某些复杂的文档布局可能无法保留格式
故障排除
Ollama连接问题
确保Ollama正在运行且可访问:
curl http://localhost:11434/api/tags空文本提取
- 对于PDF:可能是扫描图像-考虑OCR工具
- 对于其他格式:检查文件是否损坏或密码保护
许可证
该项目是开源的,可在 MIT许可证.
致谢
该项目基于多种优秀的开源技术构建:
核心框架和基础设施:
嵌入提供者:
文档处理:
- PyPDF2 -PDF文本提取
- python docx -微软文字处理
- python pptx -PowerPoint处理
- openpyxl -Excel电子表格处理
- 美味汤 -HTML/XML解析
- odfpy -OpenDocument格式支持
特别感谢这些项目的开发人员和维护人员使RAG服务器成为可能。
贡献
欢迎投稿!要添加对新格式的支持,请执行以下操作:
- 按照模式添加提取功能
extract_text_from_[format]() - 添加格式扩展名
SUPPORTED_EXTENSIONS - 在中添加映射
extract_text()函数 - 更新文档
