用文档固化记忆——聊聊智能体的契约文件

人的短期记忆和会议共识都是易碎品,所以我们需要会议纪要、SOP等等文档来帮助固化记忆,固化到每次拿出来看到的都一样。智能体也一样存在记忆问题,在对它的约束工程中,也包括对记忆的约束工程,或者说对记忆的固化手段。
首先要说明,并非所有的记忆都需要固化,固化解决了涣散问题,但同时也带来了僵化问题。只有那些类似于角色、职责、工作流程之类的记忆,才需要固化。就像一个员工入职需要读的入职说明、SOP、历史会议纪要、项目记录。
其次,用文档固化记忆并不等于就无法进步了,文档一样可以不断迭代。
文档既有编程语言类文档,又有自然语言类文档。前者以编程语言撰写,比如各种脚本文件,后者以自然语言撰写,比如流程说明、风格说明文件。阅读和撰写前者,需要有编程语言知识,阅读和撰写后者,则不需要。
智能体最关键的那个文档不妨称之为“契约文件”,大多命名为AGENTS.md,每次你唤醒智能体,它就会载入这个文件。就像玄幻小说里的契约兽,就算老年痴呆,也不会忘记这个契约文件里的内容。最美妙的事情是,这个文件是自然语言文档,能识字就能轻松读懂和掌握。
契约文件不宜过大,什么都往里头写会导致文档臃肿,难以维护。通常的做法是把并非每次必须的一些内容分拆出去,成为其他文件,比如《吃饭流程.md》《打架流程.md》《打架风格.md》,但是在AGENTS.md这份契约文件中可以写入 “当听到 吃饭 时,按照 吃饭流程.md 执行;当听到 打架 时,按照 打架流程.md执行,并遵照 打架风格.md”。
比如一个智能体的契约文件里,可以只写这些:
角色名:霸王龙 职责:给主人当保镖,平时也就吃饭、打架两件事。 触发词:当听到“吃饭”时,按照《 吃饭流程.md》执行;当听到“打架”时,按照《打架流程.md》执行,并遵照《打架风格.md》。
这样,后续需要迭代维护的就是《吃饭流程.md》《打架流程.md》《打架风格.md》这些自然语言文件了。这类还有很多,诸如架构说明、提示词图书馆等等,但对大部分工作来说,凭借流程和风格文件就足够横着走了。
这些文件也不一定要自己写,可以通过和智能体对话,让它来撰写、更改,但你可以随时查看,如果它写得不满意,你也可以直接上手改。
通过契约文件和其他各类用途的自然语言文件,不需要编程基础,也能对智能体的动作进行基本的锁定。
不同体系下,契约文件的命名不同,比如Codex、OpenCode、OpenClaw都认AGENTS.md,而Claude Code则认 Claude.md,Cursor也有所不同。看这个趋势,可能最后大家都会支持 AGENTS.md。
OpenClaw体系里的做法比较独特,每次唤醒智能体,它不但会认契约文件AGENTS.md,而且还会默认载入这三个名称的文件 SOUL.md / USER.md / MEMORY.md,分工有点细。
SOUL被称为灵魂宪法,里面既可以有性格描写,比如幽默、理性,又可以有限制描写,比如不生成攻击性代码;USER则是主人的画像和习惯。这两部分的内容,在其他体系中如果有需要不妨直接写在AGENTS.md里,所以没有本质上的区别。
关键不同点是MEMORY.md,这个文件在其他体系里是隐藏起来的,要么藏在系统目录中,要么是黑盒不允许手动修改。但OpenClaw里,这个文件不但显性展现,而且可以手动修改。这在实际操作中可能带来一些益处,如快速纠偏、注入特定记忆,也可能导致一些问题,如引入矛盾、破坏智能体长期学习的连贯性。
对MEMORY的不同处理方案体现了大家不同的设计哲学,背后细究还是很有意思的。每一种方案背后都有其代价。控制的代价是失去灵活性,手动操作的代价是剥夺了自生长。回想现实生活中,如果记忆可以被修改,你觉得世界会怎样?
夜雨聆风