乐于分享
好东西不私藏

OpenClaw.NET 技术解读(第二篇):MemPalace 内存与知识图谱插件

OpenClaw.NET 技术解读(第二篇):MemPalace 内存与知识图谱插件

摘要:第一篇梳理了网关与插件总览。本篇聚焦官方仓库中的 OpenClaw.Plugins.Mempalace:它如何在 JIT 动态原生插件链路下替换默认内存后端,如何用 无 API 的哈希向量 做笔记检索,以及如何暴露 mempalace_kg 工具 维护带时间窗的三元组知识图谱


一、MemPalace 在 OpenClaw 里是什么角色

MemPalace是一套 .NET 侧的记忆与知识图谱能力(NuGet:MemPalace.Core、MemPalace.Backends.Sqlite、MemPalace.KnowledgeGraph)。OpenClaw 通过动态原生插件把它接进来:

向运行时注册mempalace内存 Provider,与配置项OpenClaw:Memory:Provider对齐。

额外注册原生工具mempalace_kg,供 Agent 直接读写时态知识图谱

插件清单openclaw.native-plugin.json标明jitOnly: true,工程IsAotCompatible=false。因此:NativeAOT 发布的主网关不会加载该程序集路径下的动态能力;需要JIT 网关 +Plugins:DynamicNative开启并正确配置加载路径。


二、启用条件(避免踩坑)

OpenClaw:Memory:Provider=mempalace

OpenClaw:Plugins:DynamicNative:Enabled= true

Plugins:DynamicNative:Load:Paths(或等价配置)中指向OpenClaw.Plugins.Mempalace.dll所在目录,使NativeDynamicPluginHost能加载并执行MempalaceMemoryPlugin.Register。

若只改 Provider 而未开 DynamicNative,网关会在创建内存存储时抛出明确异常,提示改用file/sqlite或开启动态插件。

三、MempalaceMemoryStore:一块存储,三重职责

实现类MempalaceMemoryStore同时满足 OpenClaw 的会话、笔记检索与后台管理相关接口,内部可理解为三条持久化支线

支线
技术
用途
会话与笔记兼容面
SqliteMemoryStore

(独立 SessionDbPath,可开 FTS)
会话/分支/笔记与原有 sqlite 行为对齐,便于回退与列表
向量笔记集合
MemPalace SqliteBackend + PalaceRef + Collection(BasePath 下 collections.db
笔记内容的 向量 upsert/query
知识图谱
SqliteKnowledgeGraph

KnowledgeGraphDbPath,默认 kg.db
显式三元组与时间有效性

笔记写入时:根据 key 解析wing / room / drawer(支持a:b:c等分段规则),用哈希嵌入器生成向量,写入 collection;同时写入 session sqlite;并向 KG 写入「记忆存放在某 drawer → room → wing」的TemporalTriple,把「存放位置」也变成可查询的图结构。

笔记搜索:对查询句做同样嵌入,在 collection 上做近邻检索,可按 key 前缀过滤;若无命中则回退到 session sqlite 的搜索实现。


四、HashingEmbedder:不调用大模型的向量

与「用 OpenAI embedding」不同,本插件内置HashingEmbedder:对文本分词后,用SHA256将 token 映射到固定维度索引并带符号累加,再L2 归一化。特点:

无外部 API、无密钥、可复现

维度由Memory:Mempalace:EmbeddingDimensions控制(默认 384),标识字符串默认为openclaw:mempalace:hash-v1。

语义检索质量不如大模型向量,但适合离线、低成本、确定性场景;若需要更强语义,通常应对比sqlite+ LLM embedding那条内置路径。


五、工具 mempalace_kg

名称

:mempalace_kg

动作

:add|query|timeline

实体格式

:type:id(由 MemPalace 的EntityRef解析)

Memory.Provider尚未切到mempalace或存储未初始化时,工具会返回插件内预设的错误提示,避免静默失败。


六、配置速查(MemoryMempalaceConfig)

常用字段包括:BasePath、PalaceId、Namespace、CollectionName、EmbeddingDimensions、EmbedderIdentifier、DefaultWing/DefaultRoom、SessionDbPath、KnowledgeGraphDbPath、MaxSearchCandidates。详细默认值见GatewayConfig中MemoryMempalaceConfig定义;产品向说明可参考仓库docs/mempalace-memory.md


七、与第一篇的衔接

第一篇强调Bridge / Native 副本 / MCP / Dynamic .NET四类插件边界;MemPalace 属于 Dynamic .NET + memory capability,且仅 JIT。部署在AOT 网关时,应使用file/sqlite内存后端,或接受「不加载本插件」的架构取舍。


延伸阅读

docs/mempalace-memory.md

src/OpenClaw.Plugins.Mempalace/

源码

src/OpenClaw.Gateway/Composition/CoreServicesExtensions.cs

(CreateDynamicNativeMemoryStore)


版权声明:基于开源仓库整理,仅供技术交流。