记忆
ORG-2 如何跨会话记住事情 —— 工作区记忆文件、learnings、什么会被保存、如何被检索回来,以及怎么查看和清理。
会话一结束,智能体就把一切都忘光了。ORG-2 保留了两个能活过会话的持久化存储:工作区记忆(workspace memory),一个由 Markdown 文件组成的目录,描述这个工作区以及在其中工作的人;还有 learnings(学习洞见),一个数据库,存放智能体从自己过往会话里总结出的行为层面的心得。两者都写在你自己的机器上,都能由你阅读和编辑,也都只在看起来相关时才被拉回到提示词里。
两层记忆
| 层 | 存放什么 | 位置 | 格式 |
|---|---|---|---|
| 工作区记忆 | 关于用户、工作区、你给过的反馈的事实,以及指向外部系统的线索 | <workspace>/.orgii/workspace-memory/ | 带 YAML frontmatter 的 Markdown 文件 |
| learnings | 跨会话的行为心得——「遇到 Y 的时候我应该做 X」 | 共用的 sessions.db | 带状态生命周期的 SQLite 记录行 |
此外还有一份对当前对话的滚动摘要,但那属于单个会话的上下文窗口流水线,不是长期记忆。
哪些内容会被记住
工作区记忆文件在 frontmatter 里带一个 type,每种类型各司其职:
user—— 角色、目标、职责、领域知识,好让智能体把工作做在合适的层次上。feedback—— 你就「工作该怎么推进」给过的指导。既包括纠正,也包括确认:只保存纠正固然能避开过去的错误,却会慢慢偏离你已经认可的做法。workspace—— 正在进行的工作、目标、事故和决策,这些都不是从代码或 git 历史里能推出来的。它们过期最快,所以保存时会把相对日期换算成绝对日期。reference—— 信息在外部系统里的位置,比如哪个 Linear initiative 在跟踪 bug。
哪些内容不会被记住
提取器被要求不去保存任何可以重新推导出来的东西。它会跳过代码模式、约定、架构、文件路径和工作区结构(直接读工作区就行);git 历史和谁改了什么(git log 和 git blame 才是权威);调试方案和修复套路(修复本身就在代码里);已经被某条规则或配置文件覆盖的内容;以及临时的任务状态。
即使你主动要求保存,这些排除规则依然生效。你让智能体记住一份 PR 列表或一份活动摘要,它被要求反过来问你:这里面有什么是出乎意料的——那才是值得留下的部分。
记忆是怎么写进去的
有三条写入路径,都不需要你做任何事:
- 逐轮提取。 一轮结束后,内置的 Memory Extractor 会读最近几条消息,判断有没有发生什么值得长期留下的事。它只能用读取类工具,外加一个被限制在记忆目录内的
edit_file,并且被要求不去调研或求证——只记录对话记录里已经出现过的内容。如果主智能体在这一轮里自己写过记忆,它就整个跳过。 - 保存分两步:先把内容写进它自己的文件(
user_role.md、feedback_testing.md),再往索引MEMORY.md里加一行指针。内容永远不会直接进索引。你让智能体记住某件事,它会立刻保存;你让它忘掉,它就删掉对应条目。 - Auto-dream 整合。 内置的 Memory Consolidator 在后台合并冗余或过时的文件,且只在距上次运行已过去至少 24 小时、又经过了 5 次会话之后才动手,期间持有一个锁,保证不会有两个进程同时整合。
另外,一个会话结束时,一次反思过程可以把行为层面的心得以 pending 状态提取进 learnings 表;同时有一个模式挖掘器,把「工具报错,然后用户纠正」这类反复出现的序列归档为观察记录。之后由整合过程决定每一条 pending 记录是被采纳、被合并,还是被丢弃。
注意: 这些子智能体在后台运行,并且丢弃自己的事件,所以记忆写入不会作为步骤出现在你的会话轨迹里。你是在记忆浏览器里看到结果,而不是在对话记录里。
记忆怎么被检索进上下文
每轮开始时,ORG-2 会与主循环并行发起一次旁路查询。它把你的消息连同一份所有记忆文件的清单——类型标签、文件名、时间戳、描述——交给一个选择器模型,问它哪些明显有用。指令要求它保持挑剔,宁可返回空列表也不要靠猜;对于已经在用的工具,跳过 API 参考类的记忆,但保留那些记录着这些工具坑点的记忆。
最多选出 5 条记忆,上限 50,000 字节。它们以一个标题为 # Workspace Memory 的系统区块送达,其中包含:
MEMORY.md索引,超过 200 行或 25,000 字节会被截断,并带一条可见的提示,- 每条被选中记忆的完整正文,并标注它的路径,
- 对任何超过一天的内容附上时效性提醒,说明它有多旧,并提示其中的 file:line 引用可能已经过时,
- 关于何时该访问记忆、以及在行动前先核实说法的指导。
这条指导很重要:一条提到某个函数或文件的记忆,反映的是它被写下来的那一刻的情况。智能体被要求在推荐之前先确认文件存在、或者 grep 一下那个符号,并且更相信它此刻观察到的,而不是它回忆起来的。你让智能体忽略记忆,它被要求就当 MEMORY.md 是空的那样往下走,而不是嘴上答应、暗地里照用。
如果旁路查询失败,会话会退回到使用最新的几条记忆,而不是彻底失去记忆;会话中早先已经出现过的记忆也不会被重复注入。
learnings 走的是另一条路:已启用的 learnings 按显著度排序,每一轮都会被渲染进一个 ## Learned Insights 区块,按新旧分组,上限 120 行。learnings 的读取路径刻意不受按智能体设置的写入开关约束——关掉采集,你依然能享用已经记下来的那些。
跨会话、跨智能体,以及工作区范围
工作区记忆的作用范围是工作区,不是会话,也不是某个智能体。在那个仓库里工作的每个智能体,读写的都是同一个 .orgii/workspace-memory/ 目录,所以一个智能体学到的事实,下一个智能体和下一次会话都能用上。这里没有另设什么共享草稿区——这个目录本身就是共享的知识库;智能体之间的直接协调走的是消息和任务。
还存在第二种范围,即个人范围:OS Agent 在一个个人工作区里工作,它的记忆平铺存放在 ~/.orgii/personal/workspace-memory/。浏览器把这两者分别呈现为个人(Personal)和工作区(Workspace)。
learnings 的范围要么是全局的,要么是按智能体划分的(agent:<agent-id>),这样一个智能体的行为纠正就不会悄悄改写另一个智能体的;而且它们存在共用的数据库里,不属于任何一个仓库。
智能体会读的项目知识
记忆装的是智能体自己发现的东西。至于那些你想事先讲清楚的约定,ORG-2 会从你的项目里读两样东西。
<project>/.orgii/agent-rules.md 是项目约定文件。如果它存在,每个工作区会话都会把它的内容放进系统提示词的 ## Project Conventions 标题下,上限 20,000 字节。构建命令、团队代码风格,以及「在这个仓库里绝对别做 X」之类的说明,都写在这里。
规则(Rules)则是一个个单独的 Markdown 文件,每一轮都会注入:
| 范围 | 路径 | 由谁加载 |
|---|---|---|
| 全局 | ~/.orgii/rules/ | 所有会话、所有项目 |
| 项目 | <project>/.orgii/rules/ | 为该项目打开的所有会话 |
| 个人 | ~/.orgii/personal/rules/ | 仅 OS Agent 和频道会话 |
一条规则的 frontmatter 里有 description、可选的文件匹配模式 globs,以及 alwaysApply。规则最好控制在 100 行左右以内——它们每一轮都要被读一遍。ORG-2 也能识别出你原本为别的工具维护的、形态像规则的文件,包括 Cursor 的 .mdc 规则、CLAUDE.md 和 AGENTS.md,并把它们导入 .orgii/rules/。
查看、编辑与清理
打开集成(Integrations)→ 规则、记忆 & 进化(Rules, Memory & Evolution)→ 记忆(Memory)。在个人(Personal)和工作区(Workspace)两种范围之间切换,然后搜索、按名称/时间/类型排序,并按类型筛选。你可以打开一个文件就地阅读或编辑,打开查看 MEMORY.md(View MEMORY.md)检视索引,删除单个文件,或者用清除所有记忆文件(Clear all memory files)清空这个工作区的记忆——两种删除都需要确认,且不可撤销。你也可以干脆打开那个目录,用任意编辑器改这些 Markdown;文件本身就是事实来源。
learnings 有自己的 Learnings 浏览器(Learnings Browser),带待审(Pending)、已启用(Active)、已合并(Merged)、已废弃(Deprecated)和已放弃(Abandoned)几个标签页,每一行还有晋升(Promote)、废弃(Deprecate)、重新启用(Reactivate)和删除(Delete)。只有已启用的 learnings 会进入提示词,所以晋升是一个需要你明确做出的决定。
每个智能体都有一个 Memory & Evolution 标签页,里面有三个开关:长期记忆(Long-term memory)、从会话中提取记忆(Extract memories from sessions)和自动梦境整合(Auto-dream consolidation)。在新建的智能体定义上,两个与提取相关的开关默认关闭;内置智能体则把它们打开了。
隐私
记忆是本地的。工作区记忆就是你磁盘上的纯 Markdown,learnings 是本地 SQLite 数据库里的记录行,两者都由你机器上的进程写入。使用 ORG-2 不会顺带把记忆子系统里的任何东西上传——和运行时的其他部分一样,都是本地优先的姿态。有两点需要注意:
- 项目范围的记忆就在你的仓库里。
.orgii/workspace-memory/会不会被共享,完全取决于你的.gitignore——ORG-2 不会替你加这一条。共享它往往正是你想要的;如果不是,就把.orgii/忽略掉。无论哪种情况,提交前都先看一遍这些文件,因为一条user或feedback记忆可能记录了关于你或你同事的事情。 - 筛选用的是你的模型服务商。 那次判断相关性的旁路查询,会把你的消息和记忆清单发给你配置的那个模型服务商,而被选中的记忆正文会进入这个会话的提示词。记忆和你发出去的其他一切一样,处在同一条服务商信任边界之后。密钥存储和服务商流量见安全,托管后端到底存了什么见 Cloud。
想要一个什么都不留的智能体,就把这个智能体的长期记忆和两个提取开关都关掉,再清空这个工作区的记忆文件。
下一步
有问题?欢迎到 ORG-2 Discord 提问。 Discord。