Brain:作为知识维基的智能体记忆
一个结构化、可追踪、自我改进的 Markdown 文件系统,离线编译并按需导航。
计算机用户的工作历时数月,涉及数百个会话。到第十个会话时,系统的生产力应该远超第一个会话。它应该累积关于用户、其偏好以及已经完成的工作的上下文。
例如,当被要求绘制用户先前解释过的工作流图表时,计算机应回忆起详细信息,并使用它们来创建和输出符合用户首选样式的图形。用户无需重新解释工作流的详细信息,也无需重申他们对 PDF 胜过 PNG 工件的偏好;系统应该能够从过去的会话中准确恢复该上下文并自动应用它。
记忆是代理持续改进的基础。高效的记忆系统应该是有结构、可追溯且具适应性的,使代理能够针对每个任务搜索合适的广度和深度,同时将每个决策建立在最新信息的基础之上。
简介
向代理注入相关上下文是一个多方面的问题。首先,代理需要知道存在什么以及如何访问它。其次,当它们找到有用的信息片段时,它们需要确信它是完整、准确且最新的。孤立的事实价值有限,除非代理能够找到相关信息、验证它来自受信任的来源,并确保不需要使用较近的观察结果对其进行更新。
将静态记忆文件直接塞进模型上下文中可以最大程度地提高代理的可访问性,但也呈现了经典的精确度-召回率权衡。信息过多会用关联性日益降低的项目使代理的上下文窗口饱和,而信息过少则会由于缺乏相关上下文而导致答案质量下降。相比之下,按需访问外部数据库更具灵活性,但将导航的负担转移到了代理身上。向量数据库通常存储不连通的碎片,而图数据库则要求代理知道如何有效地进行查询。
最近,我们推出了 Brain,它是计算机记忆系统的核心组件,兼具两者的优势。Brain 是一个结构化知识 wiki,位于静态记忆文件和证据之上。引文将断言链接到其来源,相关的信息片段则横向连接。经过组织的 wiki 使上下文可按需导航,而详细的工件则保留在它下方的层中。

Brain 连接到一个包含三个关键组件的综合记忆系统:持久记忆存储、使用记忆来回答查询的前台代理,以及更新和改进记忆的后台代理。下图描绘了这些组件在 Brain 整体系统架构中的位置。

在本文中,我们将深入描述每一层,解释 Brain 如何组织记忆、代理如何使用记忆以及后台进程如何使其保持最新。我们还展示了验证 Brain 设计的内部评估结果,证明它能以更低的成本提升代理性能。
记忆组织与存储
记忆需要一种能够扩展到用户完整历史记录而又不会将每个上下文片段强加到提示词中的表示方式。计算机的记忆系统将持久上下文表示为文件系统。Brain 跨原始来源综合知识,连接相关主题,并将声明连接回支持它们的会话和文件。这种结构详见下文,使我们能够以非常适合代理的形式组织记忆。
基于文件系统的记忆
计算机话已经在带有文件系统、Shell 和 I/O 实用程序的沙盒中运行。在设计 Brain 时,我们希望在模型与代理记忆之间的接口中尽可能少地引入新机制。这就是我们将 Brain 构建在基于文件系统的上下文层之上的原因。记忆在沙盒中的 memory/ 目录下列为文件实体化,代理只需对记忆文件使用它已用于其他所有内容相同的工具。
在记忆树的根部坐落着三个顶级目录,它们以不同的抽象级别维护上下文。knowledge/ 是 Brain 本身,这是一个综合的知识 wiki,链接了实体、概念、活跃项目和过去的学习成果;notes/ 包含按主题文件夹组织的精简片段;sessions/ 保存索引、摘要和完整转录本作为原始历史记录。下图显示了布局的简化视图。

这些表面是有意冗余的。对于简单的单跳问题,在 /notes 中搜索关键字的片段通常就足够了,而 /knowledge 层对于需要跨越数周或数月计算机会话来拼凑证据的问题最为有用。
Brain:知识 Wiki
Brain 的格式为 LLM wiki,即由链接的 Markdown 文件组成的系统。这种轻量级结构化的 Markdown 形式提供了现有上下文的整体视图,以便代理可以轻松了解有哪些可用记录、它们之间的关系以及在哪里可以找到它们。每个页面都是一个主题的维护视图;在单独阅读时它应保持有用,同时通过链接使进一步探索变得轻松。
链接分为两类。[[wikilinks]] 是上下文边。它们横向连接页面;一个项目可以链接到其所有者、其客户或它依赖的概念。跟随它们可以回答“我还需要知道什么?”[cite:N] 引用是证据边。它们向下将声明连接到支持它们的原始会话或连接器来源。跟随它们可以回答“我怎么知道这是真的?”
下图描绘了针对合成人物画像(一位名为娜迪亚的无障碍研究员)而言,Brain 的一部分会是什么样子。她的 Brain 包含一个关于示例项目的页面(日本的通用设计冲刺),该页面综合了来自会话和连接器的知识。图表视图展示了页面中存在的上下文和证据边如何链接相关的实体和来源。


Brain 采用 Git 后端来保留版本历史记录,从而支持其不断演进的特性。页面可以随着时间推移进行编辑,而变更日志会记录关键更新,并允许代理轻松检查过去的版本和差异。这也支持了代理协作,这至关重要,因为多个代理可能会同时使用和更新 Brain。
使用 Brain
在回答用户查询时,代理需要能够以正确的详细程度找到正确的上下文。Brain 的结构使代理能够轻松探索记忆。代理可以在各项可操作的步骤之间进行选择,例如跟随上下文链接寻找相关信息、跟随证据链接验证声明,或者调用子代理以获取并综合其他上下文。我们以多种方式引导代理探索过程,旨在最大程度地提高代理对相关信息的访问便利性。
探索策略
我们在初始用户消息中包含了 Brain 的紧凑索引,因此代理从对已有内容的工作知识开始。然后,代理使用熟悉的操作与 Brain 进行交互:读取索引引用的特定项目,使用 grep 跨页面搜索,跟随链接并检查引文,对比 Git 修订版本,以及深入到会话或原始轨迹中。下面的代码块描绘了合成人物画像的示例命令。
# 1. Orient: the index is a map of everything known
cat memory/knowledge/index.md
# 2. Target: find pages that touch the question
grep -Ril "kyoto\|sendai" memory/knowledge/
# 3. Read the page; follow context edges as needed
cat memory/knowledge/projects/japan-universal-design-sprint.md
cat memory/knowledge/entities/sora-city-laboratory.md # via [[wikilink]]
cat memory/knowledge/entities/sapphir-mobility-coop.md # via [[wikilink]]
# 4. Only if the claim must be verified: resolve evidence
# city bases → [cite:1], [cite:10] → pplx://sessions/<id>
#
# Example (pseudo, replace with your real tool):
# pplx-session-fetch 1eaf53d4-09e0-5823-bb96-c8662f582708 --slice <slice-id>
# 5. Some evidence lives outside the sessions
# meeting slots → [cite:15] → connector://google-calendar
#
# pplx-connector-fetch google-calendar --query "japan-sprint"代理通过自我导向的循环而不是固定的管道来探索此上下文。因此,代理可以继续搜索,直到对找到的上下文满意为止。代理还可以选择何时检查引文和证据以查找或验证详细信息。偏好的一个小问题可以直接从单个 Brain 页面采纳,而一个重大的决定或来源之间的冲突可能会证明跟随引文并阅读原始记录是正当的。基于图的结构让代理能够在具体的下一步行动之间进行选择,而不是漫无目的地搜索相关信息。

文件实体化
为了让代理探索发挥作用,代理需要能够通过沙盒文件系统访问整个 memory/ 树。每次启动沙盒时在本地复制整棵树既昂贵又没有必要,因为代理不会触及绝大多数此类文件。另一种选择是使用远程文件系统,以便代理无需在本地复制即可访问任何文件。然而,代理通常在单个命令中执行数千次文件系统操作;如果每次操作都变成网络请求,往返成本就会开始主导探索循环。在内部测试中,基于远程 FUSE 路径的简单 grep 工作负载比对本地文件的等效操作慢大约 400 到 500 倍。
相反,我们构建了实体化文件的本地工作集,而更大的语料库保留在记忆检索系统之后。计算机在引导时将初始映射(取自最近的记忆、会话、摘要和可用知识)预加载到沙盒上。计算机代理可以访问记忆代理,这是一个可以执行语义检索并加载一组新文件的子代理。当缺少所需的上下文时,计算机可以使用所需信息的描述来调用记忆代理。记忆代理跨文件搜索,返回即时文本综合,并将支持的记录作为文件实体化到记忆树下。通过这种方式,工作集随着时间的推移自然且逐渐地扩大,为已经存在的证据保留了稳定的路径和来源关系。

这种设计干净利落地解决了延迟瓶颈。在本地存储相关文件可确保探索所需的文件系统操作保持快速,并且批处理检索允许实体化文件的池增长,而无需为每个文件单独调用或加载大量不相关的文件。嵌套代理设计还为计算机带来了代理检索的好处,而无需主 agent 每次都直接搜索完整的后端语料库,从而为其自身的上下文窗口保留了价值最高的信息。
维护 Brain
用户不断地从他们所做的工作和进行的对话中学习,因此代理记忆也需要这样做。为了让 Brain 保持有用,它应该是最重要的知识的简洁表示。应为重要的崭新实体创建新页面,应将新信息添加到相关的 Brain 页面中,并且应及时移除过时的上下文。例如,如果用户的工作发生变化,Brain 应该反映该变化;它应该包含用户的新工作,并优先处理与其新职责和项目相关的信息。
Brain 由我们称为 Dream 的后台代理进行维护。Dream 代理在基于文件的记忆上离线运行,将新信息综合成 Brain 更新。我们仔细定义了 Dream 代理的范围和行为,以便高效执行此任务,同时配备了 Dream 专用的护栏,以确保 Brain 更新的一致性和准确性。
Dream:用于记忆细化的后台代理
Dream 代理在沙盒中运行,可以访问交互式计算机会话将拥有的相同文件系统和只读工具,但它们的唯一目标是改善未来会话的上下文。每次运行都从早期运行产生的 Brain 开始,而不是从头开始重建用户的上下文。然后,它使用该当前 Brain 来定位自己,并生成更新的 Brain 供将来运行使用。

Dream 代理接收环境并决定如何探索它,而不是接收展平为一个提示词的固定输入。它可以导航基于文件的记忆,使用经批准的只读连接器工具来验证某项知识,并将工作的有限部分委派给子代理(包括记忆代理)。Dream 代理的范围和职责在 技能 中指定。
概括地说,一次 Dream 运行包含 4 个阶段:
- 定位:代理完成有序的定位程序。它识别权威范围、常设指令、删除日志、附加输入和停止条件。
- 总结会话:对于自上次更新以来新增(或有新对话轮次)的每个会话,代理会编写(或更新)该会话的简短摘要。
- 将事实附加到主题:代理将它认为重要的每个观察结果添加到其适当的归宿中,通常是 wiki 页面。它会在可用时探测和查询经过身份验证的连接器。
- 更新知识 wiki:代理根据其调查结果更新 wiki。它可以为持久主题生成新页面,在当前综合发生变化时修订页面,或添加支持事实声明的新链接或引文。当当前图表已经正确时,它也可以选择不进行更改。
为确保对 Brain 的任何更新都是完整且一致的,代理将建议的状态写入暂存输出树中。在代理完成其认为必要的所有更新之前,不会做出任何永久性更改。在一个代理进程中协调这些决策,使得将图表作为整体而不是作为不相关的页面进行更新成为可能。

任何更改都必须通过两种类型的验证检查。确定性验证检查确保页面格式良好且符合客观标准,例如必需的前置表达式和引文格式。语义验证检查确保建议的综合得到收集到的证据的支持,并与图表的其余部分保持一致。在代理成功完成后,受控的同步步骤将暂存输出与先前状态进行比较,并将更改应用到仓库。当同步步骤完成时,最终的编辑集可以通过 Git 版本历史记录进行检查。
验证 Brain
一个有用的记忆系统必须保留相关证据,在需要时将其呈现出来,并帮助代理将该证据转换为正确的答案。因此,我们在多个层面评估 Brain:受控离线消融、持续配对重放以及随机化生产实验。
离线评估
我们的主要离线评估使用了一个包含 640 个问题、横跨 44 个合成人物画像的内部数据集。这些人物画像重现了生产派生的会话节奏、轮次计数、主题组合和事实密度模式,同时不包含任何生产查询文本,以保护用户隐私。每个账户都通过生产记忆管道进行填充,包括记忆提取、对话摘要以及 Dream 对知识 wiki 的编译。对于每个问题,正确答案都在机械上绑定到账户历史记录中存在的特定证据。
例如,对于前面介绍的无障碍研究员合成人物画像娜迪亚而言,数据集包含以下问题:“我在京都和仙台要会见哪些机构?”答案(京都的 Sora City Lab 和仙台的 Sapphir Mobility Coop)直接出现在相应的 Wiki 页面上。
我们对比了启用编译后的知识 wiki 与未启用该 wiki 时的相同问题和账户。其他记忆表面在两种情况下均保持可用。这隔离了 Brain 的增量贡献,而不是将记忆与无记忆进行对比。总体而言,Brain 将答案正确率从 0.600 提升至 0.661(提升了 6.1 个百分点),将证据召回率从 0.573 提升至 0.625(提升了 5.2 个百分点)。对于有关偏好(+10.2 个百分点)、时间推理(+8.6 个百分点)以及从先前活动中提取详细信息(+6.9 个百分点)的问题,其效果最显著。在 84% 的问题中,代理可验证地触及了绑定到黄金证据的来源。

我们还在两个公共基准测试的子集上运行了匹配的 Brain 消融。在 LoCoMo 上,在使用不同模型的三次运行中,移除 wiki 平均使答案正确率降低了 4.6 个百分点。在 LongMemEval-S 上,它没有产生统计学上的显著变化。这一结果与 Brain 的预定角色一致。LongMemEval-S 主要测试从单个会话中恢复事实,其中基础转录本提供了通往答案的冗余路径。LoCoMo 更强调分散在对话、发言人和日期中的证据,为 wiki 的跨会话综合贡献创造了更多机会。
总体而言,在启用 Brain 的情况下,生产代理在 LongMemEval-S 上取得了 0.91 的答案正确率,在 LoCoMo 上取得了 0.83 的正确率。由于这些实验使用的是基准测试子集,因此它们不是权威的基准测试结果。然而,消融实验仍然提供了强有力的信号,表明 wiki 改善了性能,特别是当必须跨对话整合证据时。由于 Brain 是计算机的一部分,而不是针对基准测试优化的特定检索系统,我们相信,随着任务越来越类似于生产工作流,其竞争力只会不断增强。
在线评估
离线数据集无法捕获真实用户历史记录的每一个特征,因此我们还针对新鲜的生产派生队列运行每日配对评估。针对启用了和禁用了 Brain 的匹配用户状态回答相同的固定问题,然后判断其正确性、时效性和召回率。
6 月 18 日报告的初步结果表明,Brain 将答案正确率提高了 25%,召回率提高了 16%。这些性能提升一直在保持;在过去 30 天里,启用 Brain 的会话在每次运行和每个评测维度上都优于对照组。从绝对值来看,计算机用户在正确性方面提升了 9.3 个点,在时效性方面提升了 8.0 个点,在召回率方面提升了 8.9 个点。启用 Brain 的运行轨迹还使用了大约少 15% 的 Token,成本降低了 10%,生成速度加快了 10%。

持续改进
我们一直在不断完善 Brain,以便为用户带来最佳的记忆体验。最近的一项更改是将 Brain 的紧凑索引直接放入代理的初始上下文中,而不是要求代理稍后发现并读取它。在随机实验中,这种预填充处理增加了 Brain 的使用量,并将与记忆相关的不满情绪降低了 6.9%。
离线评估工具也兼作自主改进管道的一部分。对 Brain 的记忆记忆子代理、检索技能和提示词的建议更改会在我们的内部数据集和公共基准测试上通过匹配的消融运行。计算机代理可以自主迭代结果,将每次迭代的更改、增量和成本作为持久记录保留,并仅保留推动数字变化的更改。其结果是一个系统,其中 Brain 的评估者同时也是其优化器,从而推动未来的改进。
结论
持续学习是构建能够跨越数周和数月工作的代理系统的关键挑战之一。我们认为,记忆架构最好作为代理可以使用其日常工具集直接探索的环境来公开。将记忆公开为文件系统,并在其上将 Brain 作为结构化知识 wiki,可以通过简单且熟悉的工具使上下文高效导航。
Brain 旨在实现自我完善,以便记忆系统能够随着使用量的增加而不断改进。Dream 背景代理将最新信息提炼到 Brain 更新中,确保前台代理始终能够以井然有序的最新上下文视图开始新会话。评估测试工具既是核心记忆架构和代理面向接口的自动研究循环的测试场。
Brain 已经带来了更准确、性能更高的代理会话,同时减少了消耗的 Token。我们对 Brain 与计算机生产堆栈的精心协同设计,确保了这些收益直接转化为用户的实际效益。
我们正在继续构建更多功能,以提高计算机记忆的质量。同时,对于启用了 Brain 的用户,记忆将在每次会话中不断改善。