Anthropic 究竟发布了什么
背景情况被清晰地记录了下来。Anthropic 工程师“每个季度交付的代码量是 2021-2025 年期间的 8 倍”,并且“编写代码不再是瓶颈,一旦 PR 评审加速,CI 就会开始感受到压力。”与此同时,“我们整个代码库中的测试数量增长了 10 倍,而我们只增加了一小部分工程师。”结果是:“在 6 个月内,我们的 CI 任务量增加了 25 倍。”
Anthropic 并没有在每次更改时运行所有测试,而是构建了文章中所称的“确定性测试影响分析或测试选择服务,该服务根据历史表现和包相关性来决定在每次更改中运行哪些测试。”它由两部分组成。“‘监听器’(listener)记录每次 CI 运行的测试结果。”“‘选择器’(selector)读取测试结果历史记录,并决定在哪些打开的 PR 上运行哪些测试。”
这个由两部分组成的设计就是故事的全部。一个组件记录发生的事情。另一个组件读取记录的内容并据此做出决策。当记录者与现实保持同步时,读取者的决策就是有依据的。当记录者落后时,什么都不会崩溃——读取者只是继续自信地根据不再与世界匹配的记录做出决策。
而它确实落后了。“监听器开始越来越多地落后于 PR 队列。”落后的幅度很具体:“20 分钟的监听器延迟可能导致数万个测试更新未应用到选择器。”原因也是如此:“所有这些都作为一个单一进程运行,因为保留每个测试的运行历史记录意味着需要一个单一的写入者来应用结果,”这“阻止了我们进行水平分片的能力。”
接着就是那个段落。在描述他如何推动长期修复时,Malhotra 写道:“我在一个专门用于监控该服务的内部版本 Claude Tag 中启动了一个长期运行的 session。”它是事件驱动的——“每当监听器延迟超过 50,000 个任务时,Claude 就会联系我,并恢复我们关于下一步措施的对话。”然后是至关重要的一行:“这持续了几个月,而且不需要不断提醒它过去的努力或上下文,这非常有帮助。”
他还加了一句值得深思的话:“Claude 经常主张进行彻底重构,但我们通常会妥协于另一个补丁。”
这改变了什么,又没有改变什么
让我们准确地看待这些主张,因为这很容易被夸大。
Anthropic 并不是在这里发布一款记忆产品。这篇文章是关于测试选择的工程回顾,而所讨论的 session 运行在一个内部工具的内部版本中。其中没有任何内容表明其他人也应该这样工作,也没有描述任何你可以去开启的功能。
Anthropic 也很小心,没有夸大损失。当服务严重落后时,文章写道:“需要明确的是,这并不意味着 CI 从未在这些 PR 上运行,也不意味着未测试的代码被推送到生产环境。”发生的事情更为局限:选择器“使用过期的数据来决定在 PR 上运行什么和不运行什么。”这是一个诚实、有界限的失效描述,值得被引用而不是被戏剧化。
这篇文章确实确立了两件事,且都是第一手经验。
第一件事是,一个历时数月才做出的决策,是由一个没有重新开始的对话维系在一起的。这里体现的价值不是智能,也不是速度。而是“不需要不断提醒它过去的努力或上下文”——即重新建立你已经达到的状态的成本。任何重新打开六周前的线程并花二十分钟重建为什么在第二周拒绝了显而易见的答案的人,都深知这种成本。
第二件事是,同一篇文章完全独立地描述了当书面记录落后于据此做出的决策时会发生什么。这种延迟是无形的。它没有产生任何错误。它根据过期的状态做出了自信的决策。
这两个观察结果是同一个观察结果,只是指向相反的方向。当记录跟得上时,数月的争论就能保持连贯。当它落后时,每一个下游决策都会悄然退化,而没有任何提示。
人们会从中得出什么结论,以及为什么不应该这样做
“长上下文(Long context)解决了这个问题。” 并没有,而且这篇文章意外地展示了原因。一个跨越未知数量的警报、运行数月的 session 不是一个上下文窗口问题;而是一个在激活之间什么能够存活下来的问题。我们在 为什么长上下文窗口不是记忆 中单独写了这一区别。
“所以对聊天记录进行检索(Retrieval)就可以了。” 检索寻找的是类似于你查询的文本。而推动这一论点向前发展的是一个既定的立场——即重构是合理的、已经尝试了三个补丁、每个补丁争取到的时间都比上一个少。这是一个结论,而不是一个段落,在对话记录中搜索它与保持它是一个不同的操作。我们在 为什么 RAG 不是记忆 中划清了这一界限。
“Anthropic 证明了智能体应该决定架构。” 文章温和地表达了相反的观点。Claude 反复主张重构,但一再被有其他优先事项的人类否决,文章将最终的达成一致框定为工程师自己的教训——“始终为指数级增长做计划。”该 session 的贡献是连续性,而不是权威性。
“这是一个关于编码智能体的故事。” 这一机制与代码毫无关系。记录层落后于决策层,就像你的助手存储的关于你偏好的摘要是在六月份写的,而你在八月份改变了主意。没有错误出现。答案只是变得微妙地错误。
解决方案:写下结论,而不仅仅是产生结论的对话
一个长达数月的 session 之所以有效,是因为它在大量的干扰中保留了少数既定的事实。你可以刻意获得这种特性,而不必依赖于任何单一供应商的 session 保持开启。
步骤 1:将运行日志与既定立场分离
在任何跨越多次会议的争论结束时,都会产生两个产物。一个是对话记录,它很长,主要由你拒绝的选项组成。另一个是立场,它很短:决定了什么、尝试了什么、成本是多少,以及什么会改变这个答案。
用你自己的话将立场写成散文,与对话记录分开。通常四五句话就足够了。“我们尝试了更大的机器;它维持了大约 70 天。我们尝试了按包分片;它维持了大约一个月。我们尝试了每日重启;它维持了一天。下一步是重新设计,而不是第四个补丁。”
那个段落才是长达数月的 session 真正承载的内容。其余的都是脚手架。
步骤 2:为立场注明日期并记录它所替代的内容
Anthropic 文章中的失效模式是记录落后了却没有任何声明。你自己的笔记也会以同样的方式失效:它们变旧了,而你变新了,没有任何东西标记这个差距。
因此,当立场发生变化时,不要默默地覆盖它。写下新的立场,注明日期,并保留一行关于它取代了什么的内容。“截至三月,重启不再被视为一种修复方法。”一个知道自己取代了什么的存储事实是可以被检查的;而一个不知道的事实只能被盲信。如果你从未研究过你自己的存储中相互矛盾的版本是如何相互解决的,那么 记忆冲突检测 首先值得了解。
步骤 3:把它放在下一个 session 无需被告知即可读取的地方
最后一个特性使其具有持久性。Anthropic 的 session 之所以有效,是因为助手在发出提醒时已经拥有了上下文;当延迟警报在凌晨 2 点触发时,没有人重新向它汇报情况。
通过将立场保存在你的工具在工作开始时读取的存储中,而不是你记得去粘贴的文档中,来重现这一点。测试很简单:在任何助手中打开一个全新的对话,并询问决定了什么。如果你必须先解释它,那么这个立场就没有被存储——它只是被写了下来。这一区别是 在 session 之间共享上下文 的主题。
在 MemoryLake 中进行设置
MemoryLake 的存在就是为了成为那个独立的、可寻址的层:一个存储你希望每个助手都已经拥有的决策的仓库,而不是一个触及其他任何人产品的地方。你自己用自己的话写下这些条目。没有任何内容是从 Anthropic 的系统、OpenAI 的系统或任何其他供应商的存储中拉取的,这里也没有任何内容会读取、恢复或修改这些供应商所持有的内容。
步骤 1:创建 API 密钥
登录并从仪表板生成一个密钥。该密钥可以让你的助手和智能体访问同一个层,从而使每个界面都读取同一组立场,而不是该工具自身历史记录中的任何内容。

步骤 2:上传你的第一批记忆
从立场开始,而不是对话记录。把你目前工作中正在进行的两个或三个争论——架构上的、流程上的、关于你正在标准化哪个供应商的——并将每个争论写成一段简短的、注明日期的段落,写明尝试了什么以及成本是多少。这是你可以存储的最有价值的东西,因为重建它需要最长的时间。

步骤 3:连接你的 AI 和智能体
将你的助手指向该层,以便在 session 开始时加载立场,而不是将其粘贴进去。然后通过打开一个真正新鲜的对话并询问当前的立场是什么来进行验证。读回它是连接有效的唯一证明;显示绿色状态的面板并不是一回事。

这在实践中改变了什么
实际的差异体现在什么都没有发生的时刻。
一个长达数月的争论并不是一个长达数月的对话。它可能是在一百天里进行的十五次真实互动,其间有数周的沉默。沉默正是立场腐烂的地方。有人尝试了这件事,但没有成功,他们继续前进,三周后同样的建议又回来了,因为上一次尝试的成本从未被写在任何持久的地方。
Anthropic 的文章针对机器而不是人提出了同样的观点:当记录延迟超过一个小时时,“大量的任务结果没有被监听器记录下来,”而选择器仍然继续做出决策。没有任何警报。决策只是变得更糟。
第二个区别是注意力的规模。文章指出,“智能体在夜间和周末进行推送,但它仍然是爆发性的,因为人类工程师仍然推动并批准了大量的 PR。”活动的底线已经上升;人类并没有获得更多的时间。如果你在更多的界面上监督更多的工作,重新汇报与思考的比例决定了你是否能够完成这项工作——这实际上是一个关于 应该给智能体分配多少记忆 的问题。
第三个是可审计性。重构之所以奏效,是因为团队终于可以将延迟视为一个数字。你的立场也应该得到同样的对待:一个你可以从头到尾阅读并说“这是最新的,这是过期的,这个与那个相矛盾”的存储。如果你从未做过这种检查,那么 审计你的 AI 实际记住了什么 就是开始的地方。
保持长达数月的决策清晰易读的最佳实践
在会议结束时写下立场,而不是在下一次会议开始时。 在拒绝一个选项后的十分钟内,你对为什么拒绝它的上下文了解是最充分的。
用散文形式记录。 八周后,一条写着“分片——不起作用”的要点是无法使用的。“按包分片让每个 worker 拥有一个部分;在延迟重新出现之前,它维持了大约一个月”在一年后仍然可以使用。
存储成本,而不仅仅是结果。 Anthropic 的文章令人难忘,因为它说明了每个补丁持续了多久。“它不起作用”会引来重新尝试。“它争取到了 29 天”则结束了争论。
指明什么会改变你的想法。 一个带有明确触发条件的立场会以一种有用的方式自我失效。如果没有,每当有新人加入时,你都会重新进行辩论。
不要将对话记录作为记录存储。 对话记录是证据。立场才是记录。将它们混为一谈会导致存储空间变大,同时变得毫无用处。
定期重新阅读立场。 Anthropic 的延迟在被测量之前是无形的。你的延迟也是如此。
结论
最引人注目的发现是,智能体编码在半年内给 Anthropic 的 CI 带来了 25 倍的负载,并且对单写入者服务进行三次补丁修复,比重新构建一次更浪费工程时间——而这次重构“由一名工程师花了三周时间完成”。
更含蓄的发现是在方法上。重构的论点是在几个月里提出的,由一个不需要被提醒争论进展到哪一步的助手,对抗一个不断选择补丁的人类。它之所以获胜,是因为它保持连贯的时间比反对意见持续的时间更长。
这不是任何特定工具的功能。它是将结论与对话分开、注明日期、并可供你接下来打开的任何工具读取的属性。Anthropic 是从一个恰好没有结束的 session 中获得这一点的。你可以有目的地获得它。