使用说明
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: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",
"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 << 'EOF'
from sentence_transformers import SentenceTransformer
print("Downloading embedding model...")
model = SentenceTransformer('all-MiniLM-L6-v2')
print(f"✓ Model downloaded")
EOF
步骤3:将模型转移到离线主机
将下载的模型从连接互联网的计算机复制到离线主机:
scp -r ~/rag_model_cache/* username@offline_host:/path/to/your/data/.rag_data/
替换:
username使用您的SSH用户名offline_host使用您的实际主机名或IP地址/path/to/your/data/使用您在步骤1中创建的相同路径
例子:
scp -r ~/rag_model_cache/* brownjer@192.168.1.100:/data/models/.rag_data/
步骤4:在MCP配置中挂载目录
在您的离线主机上 ~/.jbrsh-mcp-servers.json,配置RAG服务器以将此目录装载为 /data:
{
"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"
],
"description": "RAG server for document vectorization and semantic search",
"tool_prefix": "rag"
}
}
替换 /path/to/your/data/ 使用脱机主机上的实际目录路径。
它是如何工作的:
- 模型文件存储在
/path/to/your/data/.rag_data在您的主机上 - 当容器运行时,此目录被挂载在
/data集装箱内 - 服务器在装载的卷中找到预下载的模型并直接使用它
- 集装箱内不需要互联网连接
- 模型缓存在容器重新启动后仍然存在
优点:
- 完全离线工作
- 无重复模型下载
- 更快的容器启动(型号已可用)
- 可以设置一次并无限期重复使用
选项2:本地Python
安装依赖项:
pip install -r requirements.txt
配置
Jibberish集成
添加到 ~/.jbrsh-mcp-servers.json:
{
"rag": {
"enabled": true,
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v", "`/path/to/your/data/:`/path/to/your/data/:ro",
"-v", "`/path/to/your/data/.rag_data:/data",
"rag-server:latest"
],
"description": "RAG server for document vectorization and semantic search",
"tool_prefix": "rag"
}
}
或者对于本地Python安装:
{
"rag": {
"enabled": true,
"command": "python",
"args": [
"`/path/to/your/rag-server/mcp_rag_server.py"
],
"env": {
"RAG_DATA_DIR": "`/path/to/your/data/.rag_data"
},
"description": "RAG server for document vectorization and semantic search",
"tool_prefix": "rag"
}
}
用法示例
从文件系统添加文件
# Using jibberish with MCP - must use full absolute path
?add file /localdata/brownjer/documents/kubernetes-guide.txt to the RAG database
# With custom document ID and metadata
?add file /localdata/brownjer/notes/python-tutorial.md with id "python_basics" to the RAG database
重要:包含文件的目录(例如。, /localdata/brownjer/documents/)必须安装在Docker容器配置中。
搜索文档
?search for information about container orchestration
列出所有文档
?list all documents in the RAG database
删除文档
?delete document with id "k8s_intro"
数据存储
文档以持久方式存储在ChromaDB中:
- 码头工人:
/data卷(映射到主机目录) - 本地:
$RAG_DATA_DIR环境变量(默认值:/tmp/rag_data)
技术细节
- 嵌入模型:
all-MiniLM-L6-v2(384个维度) - 分块策略:递归字符分割,500个字符块,50个字符重叠
- 矢量数据库:具有持久存储的ChromaDB
- 相似性度量:余弦相似性
故障排除
问题:服务器无法启动
- 检查Docker日志:
docker logs <container_id> - 验证数据目录权限
问题:搜索不返回任何结果
- 确保文件已添加
list_documents - 尝试增加
n_results
问题:嵌入生成缓慢
- 第一次运行下载嵌入模型(~80MB)
- 后续运行使用缓存模型