1814 字
9 分钟
- 次浏览
为本地记忆系统引入命名空间隔离
读前导览

云端机器人、本地助手、项目索引和日常记录混在一起后,按命名空间隔离,避免检索时串项目。

正文
1814 字
阅读
9 分钟
结构
8 节
来源线索

windows-bot-memory/memory-hub-architecture

windows-bot-memory:architecture windows-bot-memory:maintenance-2026-05-29

本地机器人记忆一开始很容易做成“能存就行”。

每天落一个文件,收到消息就追加,项目里扫到什么就记录下来。短期看这很方便:信息没有丢,文件也能打开,人也能读。

但来源一多,问题很快就变成了“记混了”。

云端机器人、本地助手、项目工作区、日常提醒、公开仓库、私有聊天,这些东西如果进入同一个没有隔离的记忆池,检索结果看起来会更丰富,实际却更不可靠。

所以后来更合理的做法是把本地记忆系统理解成一个小型数据管道,而不是一个大笔记本。

记忆要先问来源#

一个长期记忆系统至少要回答四个问题:

  • 这条信息来自哪里。
  • 它属于哪个工作区。
  • 它是原始记录、整理结果,还是已确认规则。
  • 它能不能被公开复用。

如果没有这些字段,所有内容都会被压成同一种文本。

这会带来很具体的问题:一个群聊里的临时结论可能被当成全局偏好;一个本地实验项目的路径可能被误用到另一个项目;一个云端部署故障的处理经验可能被套到静态博客发布上;一段私聊里的背景信息可能误进公开草稿。

关键词检索解决不了这个问题。因为关键词只知道“像不像”,不知道“该不该”。

命名空间就是先告诉系统这条记忆属于哪里。

source namespace -> workspace namespace -> topic -> evidence

先缩小来源,再谈召回。这个顺序比直接全局搜索更慢一点点,但结果可信得多。

原始层要保留,结论要另写#

更倾向于保留原始层。

原始记录最有用的地方是可追溯:以后发现总结错了,还能回头看证据。它也让系统具备恢复能力:索引坏了可以重建,结构化结果错了可以重新整理。

但原始层不适合直接当成最后的记忆结果。

原始聊天、运行日志、收件箱、临时任务和中间输出,里面有大量过程噪声。它们适合作为证据,默认召回答案应该来自整理后的记录。

更稳的形态是分层:

raw snapshots
-> normalized records
-> searchable index
-> curated facts / rules / projects / tasks

原始层负责“发生过什么”,整理层负责“以后应该怎么用”。

这两个问题分开以后,后面的维护会清楚很多。

可重建比高级更重要#

本地机器的约束很现实:网络可能抽风,远端同步可能失败,某些依赖可能装不上,服务器也不适合长期跑很重的服务。

所以记忆检索不能押在一种高级方案上。

一个可用的本地方案应该至少有三层:

  • 普通文件作为源证据。
  • SQLite/FTS 这类确定性全文检索作为基础入口。
  • 可选的向量或字符特征索引作为增强入口。

高级索引可以提升召回体验,但它不该变成唯一入口。最差情况下,只要源文件还在,全文索引能重建,系统就还有退路。

这也是为什么我不喜欢把“记忆系统”做成一个不可解释的黑盒服务。它可以有服务,但重点状态最好仍然能被普通脚本检查和重建。

证据要分强弱#

不是所有记录都应该拥有同样的权重。

可以把记忆大致分成强证据和弱证据。

强证据包括:

  • 明确整理过的事实。
  • 用户稳定偏好。
  • 项目根目录、验证命令、发布范围。
  • 已经回看确认的规则。
  • 人工筛过的日常摘要。

弱证据包括:

  • 原始聊天片段。
  • 运行日志。
  • 未处理收件箱。
  • 自动生成的候选项。
  • 一次性任务过程。

召回时可以先看强证据,强证据不足再回到弱证据找上下文。这样既不会丢掉细节,也不会让临时噪声压过长期规则。

这和写博客也很像。草稿可以来自工作记录,正文还要重新组织成别人能读懂的设计取舍、验证方法和说明。

项目索引先把路由做清楚#

本地磁盘里项目一多,第一步应该是把项目索引列清楚,搜索能力可以后面再加。

每个项目至少要知道:

  • 这个项目解决什么问题。
  • 哪些内容不能跨项目使用。
  • 哪些记忆只对这个项目有效。
  • 哪些经验可以抽象到全局。
  • 它和其他项目有没有容易混淆的名字或主题。

这样检索时就能先做路由,而不是直接把所有历史都倒给模型。

例如同样叫“发布”,静态博客、机器人服务、实验报告和公开仓库发布的验证流程完全不同。先路由到项目,再看关键词,错误率会低很多。

健康检查别停在文件存在#

记忆维护最后要有健康检查。

文件存在只能证明没有被删,证明不了系统真的能用。

更有用的检查应该覆盖:

  • 原始文件是否仍可读。
  • 规范化记录能否生成。
  • 全文索引能否重建。
  • 搜索能否命中最近整理的内容。
  • 项目索引是否还能按工作区区分。
  • 生命周期检查是否能跑完。
  • 外部同步失败时,本地缓存是否仍可用。

这类检查不需要很重,但要固定进入维护流程。否则系统会进入一种很危险的状态:日志看起来一直在写,等真的要召回时才发现索引坏了、来源混了、结果过期了。

对写作系统的启发#

这套记忆设计最后也反过来影响了博客写作。

更倾向于让博客自动化做三件事:

  • 从本地和公开来源发现候选主题。
  • 用来源别名标记“这篇草稿已经覆盖了哪个素材”。
  • 让草稿默认隐藏,直到人工决定是否发布。

这样博客会更像本地工作流对外公开的一小段出口。

但这个出口必须很窄。

它只应该放出公开安全、经过抽象、别人能拿去参考的部分。原始路径、账号、私聊、内部标识、临时故障细节,都应该停在记忆系统内部。

先隔离,再召回#

本地记忆的核心目标是减少串项目、减少误用旧结论。

先补上命名空间、强弱记录、可重建索引和健康检查,后续文件越积越多时,系统才不容易把临时记录当成长期规则,也不容易把一个项目里的经验错误地搬到另一个项目。

为本地记忆系统引入命名空间隔离
https://blog.sunmmyapi.xyz/posts/memory-namespaces-before-recall/
作者
Sun
发布于
2026-05-29
许可协议
CC BY-NC-SA 4.0

继续读

相关内容