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) |
|
|
|
SqliteBackend + PalaceRef + Collection(BasePath 下 collections.db) |
|
|
|
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)
版权声明:基于开源仓库整理,仅供技术交流。
夜雨聆风