ruflo-rag-memory 插件深度解析:基于 HNSW 向量检索与 AgentDB 的跨会话语义记忆系统
ruflo-rag-memory 是 ruflo(原 Claude Flow)生态中负责"长期语义记忆"的核心插件:它以 AgentDB(SQLite + vector_indexes)为持久化底座,以 HNSW 近似最近邻索引提供高速向量检索,并把 Claude Code 原生自动记忆桥接进统一的语义检索空间。读完本文,你将掌握该插件的安装、CLI/MCP 双通道操作、六类命名空间的语义划分、五阶段 SmartRetrieval 检索流水线、静态加密开关以及"smoke-as-contract"的验证机制,并能在自己的 Agent 工作流中实现跨会话、跨项目的模式复用与知识召回。
插件定位与核心能力
ruflo-rag-memory 提供的是典型的 Retrieval-Augmented Generation(RAG)记忆能力:对 AgentDB 执行语义写入(store)、语义搜索(search)与语义召回(recall),底层依赖 HNSW 索引的向量搜索,并桥接 Claude Code 的原生自动记忆(auto-memory)进入 AgentDB,使用 384 维 ONNX 嵌入(all-MiniLM-L6-v2)实现统一的跨会话语义检索。插件本身是"消费方":它不拥有底层存储实现,而是站在 ruflo-agentdb 的 AgentDB 后端与 ruflo-ruvector 高级向量算子之上,面向用户暴露一套简洁的记忆操作面。
按照 ADR-0001 插件契约 的定义,该插件由 1 个 Agent(memory-specialist)、2 个技能(memory-bridge、memory-search)和 2 个命令(/recall、/ruflo-memory)构成,插件元数据版本为 0.2.1,关键字包含 mcp、claude-memories、bridged-memory。
快速上手:跨会话存储与召回
存储一条"想记住的模式",然后在任意会话(甚至跨项目)里用语义去搜它——这是该插件最核心的使用闭环:
# 存下一条要记住的模式
npx ruflo memory store --key "oauth-flow" --value "OAuth2 with pkce for SPAs, use refresh tokens" --namespace patterns
# 之后(甚至跨项目)用语义召回
npx ruflo recall "oauth single page app"
# 按 key 精确取回条目
npx ruflo memory retrieve --key "oauth-flow" --namespace patterns
在 Agent 提示词(Prompt)中使用 MCP 工具做上下文注入:
# In your Claude Code agent prompt:
const context = await memory_search({ query: "authentication patterns", limit: 3 });
# Returns top 3 semantic matches from all sessions
完整的多会话示例参见 EXAMPLES.md:例如第一天存入 pattern-concurrent-queue("使用带信号量的有界队列做并发任务处理"),第二天在另一个项目里执行 npx ruflo recall "concurrent queue safe processing",即可直接命中该模式;修复竞态条件后存入 solutions 命名空间并打上 --tags "async,cleanup,race",再次遇到相似问题时可立即召回修复方案。
安装与依赖
通过 Claude Code 插件目录安装:
claude --plugin-dir plugins/ruflo-rag-memory
依赖要求:
ruflo-core插件(提供 MCP 服务器,所有memory_*/agentdb_*MCP 工具均由它对外暴露);- CLI 兼容性:固定钉在
@claude-flow/cliv3.6 的 major+minor 版本线上; - 验证契约:
bash plugins/ruflo-rag-memory/scripts/smoke.sh是插件通过门槛(见下文"验证"一节)。
命令体系详解
插件的命令定义在 commands/ruflo-memory.md 与 commands/recall.md 中,操作面覆盖 store / search / retrieve / list / delete / consolidate / bridge:
# 存储一条记忆条目
memory store --key "pattern-auth" --value "JWT with refresh tokens" --namespace patterns
# 语义搜索(HNSW 索引)
memory search --query "authentication patterns" --namespace patterns --limit 5
# 按 key 取回
memory retrieve --key "pattern-auth" --namespace patterns
# 列出条目
memory list --namespace patterns --limit 10
# 删除
memory delete --key "old-entry" --namespace patterns
# 跨所有命名空间快速语义召回
recall "how did we handle rate limiting?"
各子命令的参数形态与默认行为:
| 操作 | 参数 | 说明 |
|---|---|---|
store | --key KEY --value VALUE [--namespace NS] | 写入记忆条目,默认命名空间 default |
search | --query QUERY [--namespace NS] [--limit N] [--hybrid] [--graph-rag] | 默认走稠密向量检索;--hybrid 走 ruvector 稀疏+稠密融合;--graph-rag 走多跳检索 |
retrieve | --key KEY [--namespace NS] | 按 key 精确取回 |
list | [--namespace NS] [--limit N] | 列出条目,默认 limit 10 |
delete | --key KEY [--namespace NS] | 删除条目 |
consolidate | [--namespace NS] | 去重(余弦相似度 > 0.92 合并)、剪枝(>30 天未触碰且零检索命中)、重建 HNSW 索引;经 hooks worker dispatch --trigger consolidate 触发 |
bridge | [--all-projects] | 导入 Claude Code 自动记忆到 AgentDB,细节见 memory-bridge 技能 |
无参数时默认执行 memory list。常用命名空间为 patterns、tasks、solutions、feedback、security、claude-memories。其中 consolidate 与 Agent 侧的"记忆整合工作流"(审计 → 去重 → 剪枝 → 压缩 → 重建索引)一一对应,见 memory-specialist.md。
架构与数据流
插件在 README.md 中给出了完整的端到端数据流:
Claude Code Auto-Memory (~/.claude/projects/*/memory/*.md)
│
▼ (ONNX all-MiniLM-L6-v2, 384-dim)
Memory Bridge
│
▼
AgentDB (SQLite + vector_indexes)
│
├── patterns namespace
├── tasks namespace
├── solutions namespace
├── feedback namespace
├── security namespace
└── claude-memories namespace
│
▼ (HNSW ANN index)
Semantic Search (HNSW ANN — measured ~1.9x at N=20k vs brute force)
从源码结构看,整条链路的关键节点是:Claude Code 的 SessionStart 钩子在会话启动时把本地 markdown 记忆文件读入 → memory_import_claude(MCP)将文件内容用 ONNX 384 维嵌入向量化 → 写入 AgentDB 的 claude-memories 保留命名空间 → 查询时经 HNSW ANN 索引做语义搜索。Agent 侧 memory-specialist 的检索流水线(见 agents/memory-specialist.md)可概括为:
Query → [Embedding (ONNX 384d)] → [HNSW ANN search]
↓
[Optional: BM25 sparse search]
↓
[RRF Fusion (k=60)]
↓
[MMR Reranking (λ=0.7)]
↓
[Recency Boost (decay=0.95/day)]
↓
Top-K Results
其中 RRF 融合常数 k=60、MMR 的 λ=0.7、recency 衰减 0.95/天,均为实现中采用的默认参数。
命名空间体系:语义分桶
不同意图的内容写入不同命名空间,是保证召回精度的第一道关卡:
| 命名空间 | 用途 | 示例 Key |
|---|---|---|
patterns | 成功过的代码/设计模式 | pattern-auth-jwt |
tasks | 任务上下文与结果 | task-refactor-api |
solutions | Bug 修复与解决方案 | fix-race-condition |
feedback | 用户反馈与纠正 | feedback-test-style |
security | 漏洞模式 | vuln-sql-injection |
claude-memories | 桥接进来的 Claude Code 记忆 | auto-imported |
memory-search 技能给出了命名空间选型建议(见 skills/memory-search/SKILL.md):patterns 回答"How did we handle X?",tasks 回答"What was the context for Y?",solutions 回答"How did we fix Z?",feedback 回答"What did the user prefer?",security 面向"Known vulnerabilities in...",省略命名空间参数则搜索全部命名空间。Agent 侧还定义了各命名空间的保留策略:patterns/solutions/feedback/security 永久保留,tasks 保留 90 天,claude-memories 随会话启动同步。
Claude Memory Bridge:把 Claude Code 自动记忆搬进 AgentDB
Claude Code 会把会话记忆以 markdown 文件形式保存在 ~/.claude/projects/*/memory/*.md。memory-bridge 技能(见 skills/memory-bridge/SKILL.md)负责把它们自动导入 AgentDB:
- 读取全部记忆文件(当前项目或全部项目);
- 用 ONNX all-MiniLM-L6-v2 生成 384 维嵌入;
- 存入 AgentDB 的
claude-memories命名空间并建立 HNSW 索引; - 与已有条目去重(余弦相似度 > 0.95);
- 使统一语义搜索覆盖全部记忆来源。
# 手动导入(当前项目)
/memory-bridge
# 导入所有项目
/memory-bridge --all-projects
# 检查桥接健康状态
# Via MCP: memory_bridge_status({})
完整操作流程分为五步:先调 memory_bridge_status({}) 检查 Claude 文件数、AgentDB 条目数、SONA 状态与连接状态;再执行 memory_import_claude({}) 或 memory_import_claude({ allProjects: true })(CLI 备选为 node .claude/helpers/auto-memory-hook.mjs import-all);导入后再次用 memory_bridge_status 核对条目数与文件数一致;需要时执行 --dedupe 合并近重复项;最后用 memory_search_unified 验证跨源检索。检索结果带来源归属:claude-code、auto-memory 或 agentdb。
自动导入通过 SessionStart 钩子触发,手动调用仅用于三种场景:首次全量导入所有项目、正常会话之外的批量记忆变更、模型更新后强制重新向量化。
SmartRetrieval:五阶段检索流水线(ADR-090)
--smart 模式启用一套五阶段检索流水线,目标是提升跨会话召回的"回忆质量":
- Query expansion(查询扩展)——基于模板生成查询变体,不依赖 LLM;
- Multi-query fan-out + RRF(多查询扇出 + 倒数秩融合)——对各变体的检索结果做 Reciprocal Rank Fusion;
- Recency boost(时新性加权)——从元数据时间戳做指数衰减;
- MMR diversity(最大边界相关去重)——基于 token-Jaccard 的 MMR 重排;
- Session round-robin(会话轮询交错)——把来自不同会话的结果交错排列。
# CLI
npx @claude-flow/cli@latest memory search --query "auth patterns" --smart --limit 10
# MCP
mcp__plugin_ruflo-core_ruflo__memory_search({ query: "auth patterns", smart: true, limit: 10 })
最适合多会话召回、时间类查询("上周我们是怎么决策的?")以及需要多样化结果集的场景。按 commands/recall.md 的说明,/recall 命令本质上是跨全部命名空间(patterns/tasks/solutions/feedback/security/claude-memories)的语义召回,结果按复合分排序:余弦相似度 × MMR 多样性 × 时新性衰减;无参数时退化为 memory list --limit 10 显示最近条目。
统一检索与检索策略选型
memory_search_unified 同时查询所有命名空间并做 MMR 多样性重排:
# Via MCP: memory_search_unified({ query: "auth security", limit: 5 })
# Via CLI:
npx @claude-flow/cli@latest memory search --query "auth security" --limit 5
memory-search 技能按查询类型给出了策略选型表:
| 查询类型 | 策略 | 理由 |
|---|---|---|
| 事实型查找 | 稠密检索(HNSW) | 快、单跳、精确语义匹配 |
| 多跳推理 | Graph RAG | 沿文档间实体关系追踪 |
| 关键词 + 语义 | 混合(稀疏 + 稠密 + RRF) | 融合 BM25 精确性与嵌入召回率 |
| 需要多样化结果 | 稠密 + MMR 重排 | 去除近重复,最大化覆盖面 |
| 近期上下文 | 稠密 + 时新性加权 | 优先时间上相关的条目 |
| 探索性查询 | Graph RAG + 社区发现 | 发现聚类与潜在关联 |
技能内对策略收益给出量化说明:混合检索对"关键词+语义"型查询提升 20–49%,Graph RAG 对推理型查询提升 30–60%(这些为该插件技能文档中声明的经验数据,来自其 ruvector 集成路径)。复杂查询还可通过 agentdb_context-synthesize 把多个命名空间的结果合成上下文。
HNSW 性能数据:与暴力检索的对比
插件 README 引用 docs/reviews/intelligence-system-audit-2026-05-29.md 与 scripts/benchmark-intelligence.mjs 中的实测结果:
| 操作 | 相对暴力检索 | 说明 |
|---|---|---|
| 向量检索(N=5k) | 快约 3.2x–4.7x | ruvector NAPI,recall@10 约 0.99 |
| 向量检索(N=20k) | 快约 1.9x | ANN 在超过交叉点后胜出 |
| 向量检索(交叉点以下) | 打平或更慢 | 小数据量下暴力检索更优 |
文档特别澄清:此前流传的"150x–12,500x"数据是暴力检索回退路径的伪影(artifact),在审计测试台(audit harness)下无法复现——这提醒使用者:ANN 的收益存在"索引规模交叉点",HNSW 在 N 较大时才有显著优势,小规模数据集不必强上 ANN。该性能测量方法可复现,对应基准脚本位于 scripts/benchmark-intelligence.mjs。
与 ruvector 的高级算子集成
当同时加载 ruflo-ruvector 插件时,rag-memory 把高级检索委托给 ruvector 后端:
- FlashAttention-3——O(N) 内存复杂度的注意力实现;
- Graph RAG——多跳知识检索;
- 混合检索(稀疏 + 稠密)——RRF 融合;
- DiskANN——大规模持久化索引。
对应的 CLI 形态(来自 commands/ruflo-memory.md 与 memory-search 技能):
# 混合检索(稀疏 + 稠密)
npx ruvector search "QUERY" --hybrid --limit 5
# Graph RAG(多跳)
npx ruvector search "QUERY" --graph-rag --limit 5
# 大脑知识检索
npx ruvector brain search "query"
桥接进 AgentDB 的记忆在 ruvector 加载后也会被其索引,从而支持跨会话的混合检索与多跳查询。
静态加密:opt-in 的 AES-256-GCM 落盘加密(ruflo 3.6.25+)
插件写入的 .swarm/memory.db(SQLite blob)支持按 ADR-096-encryption-at-rest 实现的 opt-in 静态加密。启用条件为同时设置 CLAUDE_FLOW_ENCRYPT_AT_REST=1 与 CLAUDE_FLOW_ENCRYPTION_KEY:
- 每次写入
.swarm/memory.db时以新的 12 字节 IV 加密(writeFileRestricted({encrypt:true})); - 读取走
readFileMaybeEncrypted(path, null)——通过魔数RFE1嗅探,使迁移窗口期内遗留的明文 memory.db 文件保持可用; - 嵌入向量随 SQLite blob 一并加密,Phase 1 无需单独的列级加密;
- 任何一比特翻转都会导致 GCM 认证失败并产生解密错误,而非静默损坏。
用 ruflo doctor -c encryption 可验证门控状态。默认关闭;开启不需要迁移步骤(读取时嗅探明文字节,开启后的首次写入会把 DB 重写为加密格式)。密钥来源按优先级为:CLAUDE_FLOW_ENCRYPTION_KEY(base64 编码的 32 字节)→ OS 钥匙串(keytar:macOS Keychain / Windows DPAPI / Linux libsecret)→ 交互式口令 + scrypt KDF(派生密钥仅驻留进程内存,salt 存于 ~/.claude-flow/.kdf-salt,0600 权限);若开启开关但无任何密钥来源可用,CLI 会立即报错而非静默写明文(fail-closed 姿态)。加密格式为 magic(4B "RFE1") + iv(12B) + ciphertext + tag(16B)。
命名空间协调:claude-memories 保留命名空间消费者契约
该插件是 claude-memories 保留命名空间的权威用户侧消费者(canonical consumer)。保留命名空间契约由 ruflo-agentdb ADR-0001 的 "Namespace convention" 一节定义:AgentDB 插件自己拥有三个**不可被遮蔽(MUST NOT be shadowed)**的保留命名空间——pattern(ReasoningBank 回退写入处)、claude-memories(Claude Code 自动记忆桥接目标)、default(memory_store 默认值);其余下游插件按 <plugin-stem>-<intent> 的 kebab-case 规则命名自己的命名空间。
本插件的自动导入流程严格遵循该契约:
Claude Code SessionStart hook
→ memory_import_claude (MCP)
→ claude-memories namespace (reserved, ruflo-agentdb owned)
→ exposed by this plugin's memory-bridge skill + memory_search_unified
要点是:本插件消费 claude-memories,但不拥有它;patterns/tasks/solutions/feedback/security 等非保留命名空间全部经由 memory_*(namespace-routed)工具访问,全程不做错误的命名空间路由(无 agentdb_hierarchical-* 或带命名空间参数的 agentdb_pattern-store 调用)。这一契约关系在 ADR-0001-rag-memory-contract 中被正式文档化。
验证:smoke-as-contract
插件的"通过即契约"验证脚本是 scripts/smoke.sh,执行方式:
bash plugins/ruflo-rag-memory/scripts/smoke.sh
# Expected: "10 passed, 0 failed"
脚本内含 10 项结构化检查,覆盖:① plugin.json 声明 0.2.1 且含 mcp/claude-memories/bridged-memory 关键字;② 两个技能 + 1 个 Agent + 2 个命令存在且 frontmatter 合法;③ README 钉死 @claude-flow/cli v3.6;④ README 引用 ruflo-agentdb 命名空间约定;⑤ claude-memories 消费者契约(命名空间名、memory_import_claude、SessionStart 均被文档化);⑥ 引用 memory_search_unified;⑦ 静态加密块完整(ADR-096、AES-256-GCM、RFE1 魔数);⑧ ADR-0001 存在且状态为 Accepted;⑨ 无"19 AgentDB controllers"过期表述回归;⑩ 技能中无通配符 allowed-tools 授权。
相关插件与生态定位
- ruflo-agentdb——完整的 AgentDB 控制器桥(15 个
agentdb_*MCP 工具),命名空间约定的所有者,持有claude-memories保留命名空间; - ruflo-ruvector——高级向量运算(FlashAttention-3、Graph RAG、混合检索),本插件的高级检索后端;
- ruflo-rvf——便携 RVF 记忆格式,支持跨机器导出/导入;
- ruflo-knowledge-graph——对记忆做实体抽取与图遍历;
- ruflo-intelligence——从检索模式中学习轨迹(SONA)。
License
MIT。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



