RAG MCP服务器
使用RAG(检索增强生成)进行文档矢量化和语义搜索的模型上下文协议(MCP)服务器。
特性
- 文件摄入:添加具有自动分块和矢量化功能的文档
- 语义搜索:使用自然语言查询查找相关信息
- 元数据支持:使用自定义元数据标记文档并过滤搜索
- 持久化存储:基于ChromaDB的具有持久性的矢量存储
- 高效嵌入:使用句子变换器进行快速本地嵌入
提供的工具
1. add_file
从文件系统中添加并矢量化文件以进行RAG搜索。
参数:
file_path(字符串,必填): 完全绝对路径 到文件系统上的文件doc_id(字符串,可选):文档的唯一标识符(默认为文件名)metadata(对象,可选):文档元数据(标题、作者、来源、日期)
重要要求:
- 必须使用完整的绝对路径:文件路径必须完整(例如。,
/localdata/brownjer/docs/readme.txt) - 必须装载目录:文件的父目录必须通过MCP配置JSON作为卷挂载到Docker容器中
- 容器用户必须能够读取该文件
例子:
{
"file_path": "/localdata/brownjer/documents/python_guide.txt",
"doc_id": "python_intro",
"metadata": {
"title": "Introduction to Python",
"author": "John Doe"
}
}MCP配置要求:
对于 add_file 要访问文件系统,您必须在MCP配置中挂载相应的目录。在 mcp.json:
{
"mcpServers": {
"rag": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v", "/localdata/brownjer:/localdata/brownjer:ro",
"-v", "/localdata/brownjer/.rag_data:/data",
"rag-server:latest"
],
"disabled": false
}
}
}备注:
- 这
--rm标志在容器退出时自动删除容器 - 这
:ro建议源目录使用(只读)标志,以防止意外修改 - 每个jibberish会话都会创建新的容器
2. search
在所有矢量化文档中执行语义搜索。
参数:
query(字符串,必填):搜索查询n_results(整数,可选):要返回的结果数(默认值:5,最大值:20)filter_metadata(object,可选):按元数据过滤(例如。,{"author": "John Doe"})
例子:
{
"query": "How do I use Python lists?",
"n_results": 3
}3. delete_document
从矢量数据库中删除文档及其所有块。
参数:
doc_id(字符串,必填):要删除的文档ID
例子:
{
"doc_id": "python_intro"
}4. list_documents
列出矢量数据库中的所有文档及其元数据。
参数: 无
安装
选项1:Docker(推荐)
使用GitHub容器注册表中的预构建映像
最简单的开始方法是使用预构建的映像:
# In your ~/.jbrsh-mcp-servers.json or docker run command, use:
ghcr.io/bjeremy23/rag-server:latestMCP配置示例:
{
"rag": {
"enabled": true,
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "/path/to/your/data:/localdata:ro",
"-v", "/path/to/your/data/.rag_data:/data",
"ghcr.io/bjeremy23/rag-server:latest"
]
}
}如果您无法提取图像 (例如,由于网络限制或VPN策略),请在本地构建。
在当地建立形象
如果你没有从GitHub容器注册表中提取的权限,或者更喜欢在本地构建:
git clone https://github.com/bjeremy23/rag-server.git
cd rag-server
docker build -t rag-server:latest .然后使用 rag-server:latest 在MCP配置中:
{
"rag": {
"enabled": true,
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "/path/to/your/data:/localdata:ro",
"-v", "/path/to/your/data/.rag_data:/data",
"rag-server:latest"
]
}
}带本地模型缓存的Docker(离线环境)
如果你的Docker容器内没有互联网接入,或者想避免在每次容器启动时重新下载模型,你可以将嵌入模型预下载到一个持久挂载的目录中。
脱机安装设置
步骤1:在离线主机上创建数据目录
mkdir -p /path/to/your/data/.rag_data替换 /path/to/your/data/ 使用您要存储模型缓存的实际路径。
步骤2:在可上网的机器上下载模型
在任何可以上网的机器上,下载Hugging Face模型:
mkdir -p ~/rag_model_cache
TRANSFORMERS_CACHE=~/rag_model_cache python3 `
- 验证数据目录权限
**问题**:搜索不返回任何结果
- 确保文件已添加 `list_documents`
- 尝试增加 `n_results`
**问题**:嵌入生成缓慢
- 第一次运行下载嵌入模型(~80MB)
- 后续运行使用缓存模型