Qdrant内存知识库
通过使用 Qdrant 促进知识图谱的语义搜索表示,支持 OpenAI 的嵌入用于语义相似性,并通过文件基于图形持久化实现强大的 HTTPS 集成。
服务介绍
MCP Memory Server with Qdrant Persistence
该MCP服务器提供了一个基于Qdrant向量数据库的知识图谱实现,具有语义搜索功能。
特性
- 基于图的知识表示,包含实体和关系
- 基于文件的持久化(memory.json)
- 使用Qdrant向量数据库进行语义搜索
- 使用OpenAI嵌入计算语义相似度
- 支持HTTPS并通过反向代理兼容
- 支持Docker,便于部署
环境变量
需要以下环境变量:
# OpenAI API key for generating embeddings
OPENAI_API_KEY=your-openai-api-key
# Qdrant server URL (supports both HTTP and HTTPS)
QDRANT_URL=https://your-qdrant-server
# Qdrant API key (if authentication is enabled)
QDRANT_API_KEY=your-qdrant-api-key
# Name of the Qdrant collection to use
QDRANT_COLLECTION_NAME=your-collection-name
设置
本地设置
- 安装依赖项:
npm install
- 构建服务器:
npm run build
Docker设置
- 构建Docker镜像:
docker build -t mcp-qdrant-memory .
- 使用所需的环境变量运行Docker容器:
docker run -d \
-e OPENAI_API_KEY=your-openai-api-key \
-e QDRANT_URL=http://your-qdrant-server:6333 \
-e QDRANT_COLLECTION_NAME=your-collection-name \
-e QDRANT_API_KEY=your-qdrant-api-key \
--name mcp-qdrant-memory \
mcp-qdrant-memory
添加到MCP设置中:
{
"mcpServers": {
"memory": {
"command": "/bin/zsh",
"args": ["-c", "cd /path/to/server && node dist/index.js"],
"env": {
"OPENAI_API_KEY": "your-openai-api-key",
"QDRANT_API_KEY": "your-qdrant-api-key",
"QDRANT_URL": "http://your-qdrant-server:6333",
"QDRANT_COLLECTION_NAME": "your-collection-name"
},
"alwaysAllow": [
"create_entities",
"create_relations",
"add_observations",
"delete_entities",
"delete_observations",
"delete_relations",
"read_graph",
"search_similar"
]
}
}
}
工具
实体管理
create_entities: 创建多个新实体create_relations: 在实体之间创建关系add_observations: 向实体添加观察delete_entities: 删除实体及其关系delete_observations: 删除特定观察delete_relations: 删除特定关系read_graph: 获取完整的知识图谱
语义搜索
search_similar: 搜索语义相似的实体和关系interface SearchParams { query: string; // 搜索查询文本 limit?: number; // 最大结果数(默认:10) }
实现细节
服务器维护两种形式的持久化:
-
文件式(memory.json):
- 完整的知识图谱结构
- 快速访问完整图
- 用于图操作
-
Qdrant向量数据库:
- 实体和关系的语义嵌入
- 支持相似性搜索
- 自动与文件存储同步
同步
当实体或关系被修改时:
- 更改写入memory.json
- 使用OpenAI生成嵌入
- 向量存储在Qdrant中
- 两个存储系统保持一致
搜索过程
当搜索时:
- 查询文本转换为嵌入
- Qdrant执行相似性搜索
- 结果包括实体和关系
- 结果按语义相似度排序
示例用法
// Create entities
await client.callTool("create_entities", {
entities: [{
name: "Project",
entityType: "Task",
observations: ["A new development project"]
}]
});
// Search similar concepts
const results = await client.callTool("search_similar", {
query: "development tasks",
limit: 5
});
HTTPS和反向代理配置
服务器支持通过HTTPS和反向代理连接到Qdrant。这在以下情况下特别有用:
- 在Nginx或Apache等反向代理后运行Qdrant
- 使用自签名证书
- 需要自定义SSL/TLS配置
通过反向代理设置
- 配置您的反向代理(使用Nginx示例):
server {
listen 443 ssl;
server_name qdrant.yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:6333;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
- 更新您的环境变量:
QDRANT_URL=https://qdrant.yourdomain.com
安全注意事项
服务器实现了强大的HTTPS处理,包括:
- 自定义 SSL/TLS 配置
- 适当的证书验证选项
- 连接池和长连接
- 带指数退避的自动重试
- 可配置的超时时间
故障排查 HTTPS 连接
如果您遇到连接问题:
- 验证您的证书:
openssl s_client -connect qdrant.yourdomain.com:443
- 测试直接连接:
curl -v https://qdrant.yourdomain.com/collections
- 检查代理设置:
env | grep -i proxy
贡献
- Fork 仓库
- 创建一个功能分支
- 进行更改
- 提交一个拉取请求
许可证
MIT