智能体记忆
Notarium 中的智能体记忆并非隐藏的魔法,也不是一个独立的数据库:它就是 agent-memory 类的普通笔记,由智能体根据观察写入,你可以随时阅读、修正和删除。智能体通过 remember_about_user 和 remember_about_project 记录事实,通过 recall 取回上下文。关键的纪律是先搜索再写入,以免产生重复。
两条轴:关于用户与关于项目
记忆存在于两条正交的轴上:
- 关于用户——
remember_about_user把关于你的长期事实(偏好、上下文、当前工作)写入你个人域的私有记忆。无论你在哪个空间工作,它都是同一份记忆——不会掺入到每个空间里。 - 关于项目——
remember_about_project把关于某个具体项目的记忆写入它的子目录。与写入关于用户的记忆对称,但绑定到项目。
两条轴都使用 agent-memory 类。智能体不选择类、文件夹或空间:这一切都由工具本身强制执行。应当作为 user-doc 存在于项目树中的共享知识,由另一个工具 create_note 写入,而不是由「remember」写入。
每个类别一个文件,而非每条观察一个文件
remember_about_user(observation, category) 把观察追加到该类别的文件,而不是为每条事实生成一个微文件。category 是一个标签(「preferences」),不是路径。新类别意味着新文件。可选的 summary 是该类别的单行摘要,用于喂给派生的档案索引。
修正或删除某一条已记录的事实,就是编辑一篇普通笔记:用 edit_note,按记忆笔记的 id(由 remember_* 返回),以 findReplace 模式(空的 content 会移除该片段)或对整个类别用 replace 模式。没有单独的「按观察寻址」——记忆与任何笔记一样,用相同的基于词语的模式来编辑。
recall ≠ search
两个工具都读取,但解决的问题不同:
search | recall | |
|---|---|---|
| 返回什么 | 带 score 和 path 的排序片段 | 在 token 预算内的连贯上下文包 |
| 范围 | 相关笔记 | 相关笔记外加它们的图谱邻居(沿图谱 depth 跳) |
| 记忆 | 能看到记忆(用于去重) | 从知识和个人记忆中取用 |
| 何时调用 | 查找具体内容、写入前检查 | 围绕某个主题组装上下文以便工作 |
recall 更丰富:它围绕找到的内容遍历图谱,并把结果打包在 budgetTokens 之内,而 maxPerSource 则防止某一篇大笔记吃掉整个包。search 更精准:它正是「先搜索再写入」背后的机制。
先搜索再写入
记忆是唯一没有基于标题的重复保护的类,所以 search 刻意也覆盖智能体的记忆。永远先搜索再写入:这会同时对知识和记忆去重。
在 remember_* 之前,就该事实的主题调用 search。如果类别已经存在,就通过同一个 remember_*(它会追加)追加进去,或用 edit_note 修正,而不是创建一个同义项。
所有者能看到什么
记忆在常规导航中是隐藏的(树、文档流、普通搜索),但对你并不隐藏:它可以通过资源管理器树中专门的 Memory 透镜看到(笔记像其他任何笔记一样打开,地址为 /m/<id>),你可以在 Agents → Context 中静音某个类别。修订日志中的条目会精确显示智能体记录了什么——这就是你捕捉注入可能夹带进来的任何东西的方式。你无法重新组织记忆:这一部分归智能体所有(一个扁平集合外加一个派生索引),但移动它在技术上是安全的——身份标识依托于笔记的 id。