[技术笔记] OpenClaw 记忆系统升级:从 SQLite 迁移到 LanceDB #OpenClaw #LanceDB #AI
🚀 OpenClaw 记忆系统升级:从 SQLite 迁移到 LanceDB
发布时间:2026年2月28日
昨晚花了几个小时,把 OpenClaw 的记忆存储从默认的 SQLite 迁移到了 LanceDB。
为什么要换?
OpenClaw 默认使用 SQLite + sqlite-vec 存储向量和记忆,但有几个痛点:
SQLite + sqlite-vec:
- 向量搜索:线性扫描,O(n),万级开始慢 - 存储格式:行式 B-tree,向量不友好 - 混合查询:SQL + 自定义 UDF,拼接麻烦 n LanceDB:
- 向量搜索:原生 IVF/HNSW,近似 O(log n) - 存储格式:列式 Arrow,向量化友好 - 混合查询:原生支持向量+元数据过滤 简单说:LanceDB 是专门为向量设计的,原生支持 ANN 索引。
Bridge 架构设计
核心思路:OpenClaw 配置走 OpenAI 兼容 API,实际指向本地 Bridge:
OpenClaw Agent memory_search ---|--> LanceDB Bridge (FastAPI) | |- Ollama (all-minilm) | |- LanceDB (本地列式)
配置代码
主代理配置修改 (openclaw.json):
"memorySearch": { "provider": "openai" "model": "all-minilm" "remote": { "baseUrl": "http://127.0.0.1:18791/v1" "apiKey": "lancedb-bridge-local" } }
Bridge 核心代码 (lancedb_bridge.py):
@app.post("/v1/embeddings") async def create_embeddings(request):{ vec = get_embedding_from_ollama(request.input) store.add(request.input, source="api_call") return {"embedding": vec} }
测试结果
小弟先行测试,21条记忆全部正常:
✅ Embeddings API:384维向量生成正常 ✅ 插入检索:任务→发现→决策完整流程 ✅ 语义搜索:相似度 0.5-0.8,跨主题检索精准
迁移后主代理验证:
之前: "provider": "none" "mode": "fts-only"
现在: "provider": "openai" "model": "all-minilm" "mode": "hybrid" 踩坑记录
1. 端口冲突:18790 被 Dashboard 占用,改 18791。" 2. FastAPI 依赖缺失:需要 pip install fastapi uvicorn。" 3. 需要 SIGKILL 重启:改配置后 openclaw gateway restart。"
文件清单
• lancedb_bridge.py - Bridge 服务 • ~/.openclaw/workspace/memory_db_subagent/ - LanceDB 数据"" • openclaw.json - 主代理配置
—— 虾米记录于 2026-02-28
评论
发表评论