Raspberry Pi 5上的Qdrant MCP
  
人工智能代理的持久语义记忆——本地、私有,成本为0美元。
给你的AI代理一个真正的内存,它可以在重启、按意义(而不是关键字)搜索时幸存下来,并且完全在Raspberry Pi 5上运行,不依赖于云。
新 包括 OpenClaw强制执行插件 它在每次响应之前自动注入内存,不需要LLM决策。
注(2026-03-19): 漂移存储器在2026年2月被弃用——所有105个条目都迁移到了Qdrant中。这个回购现在是独立的。从全MiniLM-L6-v2(384d)迁移的嵌入→ 双子座双子座嵌入-001(3072d)通过OpenClaw的memorySearch配置。
______________________________________________________________________
问题
AI代理会忘记。在会话之间,上下文压缩会丢失细节,基于文本的内存搜索只会找到精确的关键字匹配。一个典型的代理人可以 第一周出现10+个内存错误 --错误的日期、陈旧的数据、将旧主题呈现为新主题。
解决方案
本地向量数据库(Qdrant)与MCP(模型上下文协议)集成。事实被存储为384维嵌入,并通过以下方式检索 语义相似度 --基于意义,而不是基于关键字。
"What's the wifi password?" → finds "Office wifi: network 'Workspace5G', password is 'correct-horse-battery'"单词不匹配,但意思匹配。这就是区别。
______________________________________________________________________
堆栈
| 组件 | 版本 | 目的 |
|---|---|---|
| 树莓派5 | 8GB RAM | 硬件 |
| Qdrant MCP服务器 | v0.8.1 | 矢量存储+搜索 |
| 双子座宝石镶嵌-001 | 3072-dim | 嵌入模型(API,从MiniLM迁移) |
| 麦波特 | v0.7.3 | MCP客户端/网桥 |
| 开爪 | 2026.3.13 | 代理框架(可选) |
性能(Pi 5,ARM64)
| 操作 | 时间 | 备注 |
|---|---|---|
| 存储(嵌入+写入) | ~3s | 包括模型加载 |
| 搜索(嵌入+余弦) | ~3s | 包括模型加载 |
| RAM峰值 | ~200MB | 在推理过程中,然后下降 |
| 存储 | ~KB/条 | SQLite支持,可忽略不计 |
______________________________________________________________________
快速入门(5分钟)
1.安装依赖项
# Qdrant MCP Server
pip3 install mcp-server-qdrant
# mcporter (MCP client)
npm install -g mcporter2.创建mcporter配置
mkdir -p ~/.mcporter创建 ~/.mcporter/mcporter.json:
{
"mcpServers": {
"qdrant-memory": {
"command": "mcp-server-qdrant",
"description": "Persistent vector memory using local Qdrant storage",
"env": {
"QDRANT_LOCAL_PATH": "/home/pi/.qdrant-data",
"COLLECTION_NAME": "agent-memory"
}
}
}
}注: 使用绝对路径QDRANT_LOCAL_PATH.Tilde(~)不会在mcporter传递的环境变量中展开。如果mcporter list找不到服务器,请尝试使用的完整路径command(例如。/home/pi/.local/bin/mcp-server-qdrant).
3.验证其是否正常工作
# Check server is registered
mcporter list
# Store a memory
mcporter call qdrant-memory.qdrant-store \
information="The project runs on a Raspberry Pi 5 in my office"
# Search by meaning
mcporter call qdrant-memory.qdrant-find \
query="Where does the project run?"就是这样。没有Docker,没有云帐户,没有GPU。
______________________________________________________________________
运作原理
Agent wants to remember something
↓
mcporter call qdrant-memory.qdrant-store information="..."
↓
mcp-server-qdrant spawns (STDIO)
↓
all-MiniLM-L6-v2 creates 384-dim embedding (ONNX, CPU)
↓
Qdrant stores vector + text in local SQLite
↓
Process exits cleanly
Agent wants to recall something
↓
mcporter call qdrant-memory.qdrant-find query="..."
↓
Query embedded with same model
↓
Cosine similarity search over stored vectors
↓
Top results returned by semantic relevance关键见解:MCP服务器 无状态 --每次呼叫它都会生成,完成它的工作,然后退出。没有守护进程占用RAM。Qdrant的本地模式使用SQLite,因此数据在没有运行服务器的情况下仍然存在。
______________________________________________________________________
种子脚本
使用 seed-memory.sh 要批量加载内存:
./seed-memory.sh或存储个人事实:
mcporter call qdrant-memory.qdrant-store \
information="Weekly standup is every Monday at 09:00 in the main conference room" \
metadata='{"type": "recurring", "day": "monday"}'可选 metadata 字段接受任何JSON,这对过滤或分类很有用。
______________________________________________________________________
用例
AI代理内存
存储决策、更正和事实。在生成响应之前,搜索内存以验证声明。防止闲聊。
个人知识库
“我把备用钥匙放在哪里了?”/“那家餐馆叫什么名字?”——对你的生活笔记进行语义搜索。
共享内存
家庭或团队信息的第二个集合——日程、约会、决定。通过聊天机器人或语音助手查询。
项目背景
存储架构决策、会议记录、需求。新团队成员可以问:“为什么我们选择Postgres而不是MongoDB?”
______________________________________________________________________
配置
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
QDRANT_LOCAL_PATH | 必需 | 本地存储目录的绝对路径 |
COLLECTION_NAME | 必填 | Qdrant集合名称 |
EMBEDDING_MODEL | sentence-transformers/all-MiniLM-L6-v2 | 拥抱脸部模型ID |
多个收藏
{
"mcpServers": {
"work-memory": {
"command": "mcp-server-qdrant",
"env": {
"QDRANT_LOCAL_PATH": "/home/pi/.qdrant-data",
"COLLECTION_NAME": "work"
}
},
"personal-memory": {
"command": "mcp-server-qdrant",
"env": {
"QDRANT_LOCAL_PATH": "/home/pi/.qdrant-data",
"COLLECTION_NAME": "personal"
}
}
}
}在k3s/Docker上运行
如果您更喜欢容器化Qdrant而不是本地SQLite模式:
# k3s / Kubernetes deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: qdrant
spec:
replicas: 1
selector:
matchLabels:
app: qdrant
template:
metadata:
labels:
app: qdrant
spec:
containers:
- name: qdrant
image: qdrant/qdrant:latest
ports:
- containerPort: 6333
volumeMounts:
- name: qdrant-storage
mountPath: /qdrant/storage
volumes:
- name: qdrant-storage
persistentVolumeClaim:
claimName: qdrant-pvc
---
apiVersion: v1
kind: Service
metadata:
name: qdrant
spec:
selector:
app: qdrant
ports:
- port: 6333
targetPort: 6333然后将mcporter指向服务器,而不是使用本地模式:
{
"mcpServers": {
"qdrant-memory": {
"command": "mcp-server-qdrant",
"env": {
"QDRANT_URL": "http://qdrant:6333",
"COLLECTION_NAME": "agent-memory"
}
}
}
}注: 你不能两者都用QDRANT_URL和QDRANT_LOCAL_PATH同时。使用QDRANT_URL对于服务器模式(Docker/k3s),QDRANT_LOCAL_PATH用于嵌入式本地模式(不需要服务器)。
______________________________________________________________________
重要提示
- OpenClaw v2026.1.30 不支持
mcpServers在其配置模式中(网关崩溃循环)。使用mcporter作为桥梁——它通过捆绑的mcporter技能无缝工作。 - 第一次通话速度较慢 (~3-5s),因为ONNX模型加载。后续的快速连续调用重用了该流程。
- 嵌入模型在CPU上运行 --不需要GPU。全MiniLM-L6-v2型号针对ARM64上的ONNX运行时间进行了优化。
- 数据是本地的 --没有任何东西离开你的设备。矢量数据库不需要API键。
______________________________________________________________________
硬执行插件(OpenClaw)
上述基本设置要求LLM *决定* 查询Qdrant。在实践中,代理“忘记”使用内存工具——它们是可选的,LLM在急于回答时会跳过它们。
严厉执法 解决了这个问题:一个OpenClaw插件,在每次响应之前自动查询Qdrant,并将相关内存注入提示中。不需要LLM决定。
运作原理
User message arrives
↓
before_agent_start hook fires
↓
Plugin extracts user query
↓
mcporter calls qdrant-find
↓
Top 5 results injected as prependContext
↓
LLM sees memories BEFORE generating response安装
cd openclaw-plugin
npm install
npm run build
# Copy to OpenClaw extensions
sudo cp -r . /usr/lib/node_modules/openclaw/extensions/nox-memory-qdrant/
# Restart OpenClaw
sudo systemctl restart openclaw-gateway插件结构
openclaw-plugin/
├── package.json # @nox/memory-qdrant
├── openclaw.plugin.json # Plugin manifest
├── tsconfig.json
└── src/
├── index.ts # Plugin entry + register()
├── qdrant-client.ts # mcporter CLI wrapper
└── auto-recall.ts # before_agent_start hook注射什么
当用户问“谁是马丁·格里斯?”时,插件:
- 呼叫
mcporter run qdrant-memory qdrant-find --query "Wer ist Martin Grieß?" - 从Qdrant(语义搜索)获取结果
- 将它们注射为:
## QDRANT MEMORY RECALL (automatisch, Hard Enforcement)
Relevante Informationen aus der Vektordatenbank:
1. [87%] Martin Grieß ist Head of Data bei H. & J. Brüggen KG (Quelle: people.md)
2. [72%] Martin arbeitet eng mit dem CDO Rocky Wüst zusammen (Quelle: org.md)
---
Diese Informationen wurden automatisch abgerufen.法学硕士看到了这一背景 之前 它开始生成——不需要做出“使用内存”的决定。
配置
该插件具有最小的配置:
{
"enabled": true
}跳过模式(如“hi”、“ok”、“danke”等短信)会自动处理,以避免不必要的查询。
演出
| 度量 | 值 |
|---|---|
| 每次查询的延迟 | ~100-500ms |
| 健康检查缓存 | 30秒 |
| 最大结果 | 5(可配置) |
软执法vs硬执法
| 方法 | 工作原理 | 可靠性 |
|---|---|---|
| 柔软 (AGENTS.md规则) | LLM指示使用Qdrant | ~60-70% |
| 困难 (此插件) | Hook自动注入内存 | ~99% |
两者结合使用以获得最大的覆盖范围:硬执法抓住一切,软执法教会法学硕士正确引用来源。
______________________________________________________________________
混合架构:Qdrant+漂移存储器
Qdrant擅长 语义检索 --通过意义发现事实。但它不跟踪 *怎么* 代理随着时间的推移使用知识。
漂移存储器 与Qdrant相辅相成 共现追踪:
| 系统 | 擅长 | 示例查询 |
|---|---|---|
| Qdrant | 事实、实体、语义相似性 | “马丁·格里斯是谁?” |
| 漂移存储器 | 行为模式、偏好 | “哪种沟通方式最有效?” |
他们如何协同工作
┌─────────────────────────────────────────────────────────────┐
│ HYBRID MEMORY STACK │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ Qdrant │ │ drift-memory │ │
│ │ (WHAT) │ │ (HOW) │ │
│ │ │ │ │ │
│ │ • 384-dim vectors │ │ • YAML files │ │
│ │ • Cosine similarity│ │ • Co-occurrence │ │
│ │ • Hard enforcement │ │ • Biological decay │ │
│ │ • ~3s latency │ │ • “Co-occurrence告诉你代理如何使用它的知识。向量嵌入告诉你什么是语义相似的。它们有不同的用途。”
回忆在一起变得相互联系。在会话过程中,模式会有机地出现——不需要手动关系标记。
### 整合
1. 使用Qdrant **事实检索** (此回购)
1. 使用漂移存储器 **行为模式** ([漂移存储器仓库](https://github.com/driftcornwall/drift-memory))
1. 两者都可以在Pi 5上运行,资源冲突最小
______________________________________________________________________
## 链接
- [Qdrant MCP服务器](https://github.com/qdrant/mcp-server-qdrant)
- [麦波特](https://github.com/steipete/mcporter)
- [开爪](https://github.com/openclaw/openclaw)
- [漂移存储器](https://github.com/driftcornwall/drift-memory) --具有共现追踪的生物风格记忆
- [全迷你LM-L6-v2](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2)
- [MCP规范](https://modelcontextprotocol.io)
______________________________________________________________________
## 许可证
麻省理工学院