内存系统¶
ZeroClaw 实现了一个全栈搜索引擎作为内存系统,无外部依赖。
架构概览¶
┌────────────────────────────────────┐
│ 用户查询(自然语言) │
└──────────────┬─────────────────────┘
│
┌──────────────▼─────────────────────┐
│ 混合搜索引擎 │
├────────────────────────────────────┤
│ 向量搜索 (70%) + 关键词搜索 (30%) │
└──────────────┬─────────────────────┘
│
┌──────────┼──────────┐
│ │ │
┌───▼───┐ ┌───▼───┐ ┌────▼────┐
│ 向量 │ │ 关键 │ │ 合并 │
│ 数据库│ │ 搜索 │ │ 排序 │
└───────┘ └───────┘ └─────────┘
内存后端¶
SQLite(推荐)¶
[memory]
backend = "sqlite"
auto_save = true
vector_weight = 0.7
keyword_weight = 0.3
embedding_provider = "openai"
优势: - ✅ 快速、可靠 - ✅ 支持向量搜索 - ✅ 支持关键词搜索 - ✅ 混合搜索
Lucid¶
优势: - ✅ 分层记忆 - ✅ 云同步 - ✅ CLI 集成 - ✅ SQLite 回退
Markdown¶
优势: - ✅ 人类可读 - ✅ 易于编辑 - ✅ 版本控制友好
None(无记忆)¶
优势: - ✅ 零存储 - ✅ 隐私保护 - ✅ 最快性能
搜索机制¶
向量搜索(语义)¶
关键词搜索(BM25)¶
混合合并¶
// 加权合并
score = vector_score * vector_weight + keyword_score * keyword_weight
// 示例:0.85 * 0.7 + 0.72 * 0.3 = 0.811
Embeddings¶
OpenAI Embeddings¶
自定义端点¶
无 Embeddings¶
配置选项¶
[memory]
# 后端类型
backend = "sqlite"
# 自动保存
auto_save = true
# 搜索权重
vector_weight = 0.7
keyword_weight = 0.3
# 嵌入配置
embedding_provider = "openai"
embedding_model = "text-embedding-3-small"
# 缓存
cache_enabled = true
cache_max_size = 1000
工具集成¶
ZeroClaw 自动管理内存:
# 保存记忆(自动)
$ zeroclaw agent -m "记住我喜欢 Rust"
[INFO] Memory saved: "用户喜欢 Rust"
# 检索记忆(自动)
$ zeroclaw agent -m "我喜欢什么语言?"
# 代理会自动检索并回复:你喜欢 Rust 语言
手动工具¶
性能优化¶
索引优化¶
# FTS5 全文搜索索引(自动创建)
CREATE VIRTUAL TABLE memory_fts USING fts5(content, tokenize='porter');
# 向量索引(自动创建)
CREATE INDEX memory_embedding_idx ON memory(cosine_similarity);
缓存机制¶
// LRU 缓存
struct Cache {
capacity: usize,
map: HashMap<String, Embedding>,
list: LinkedList<String>,
}
批量操作¶
迁移¶
从 Markdown 到 SQLite¶
从 SQLite 到 Markdown¶
故障排查¶
搜索不返回结果¶
# 检查索引
$ zeroclaw doctor
[INFO] Memory index: ✅ OK
[INFO] FTS5: ✅ Active
[INFO] Vector search: ✅ OK
# 搜索测试
$ zeroclaw agent -m "搜索: API 密钥"
内存占用过高¶
最佳实践¶
- 定期清理 - 删除过时的记忆
- 使用标签 - 添加上下文标签
- 选择权重 - 根据场景调整混合权重
- 监控性能 - 使用
zeroclaw doctor检查