今年十二月,其实也是我深入探索agent 构建的一年。无论是在公司层面,还是我个人兴趣上,都对 agent 的发展方向抱有浓厚的关注。月底的时候,我读到了 Anthropic 关于 AI 编程的一些观点,特别是关于所谓“code agent”应该如何完善和处理的问题。
在我看来,这些讨论始终绕不开一个核心论调:所有关于agent 的构建,本质上都是围绕“记忆”这个话题展开的。不论是之前提出的 skill、sub-agent,还是其他各种组件,其实都是在尝试解决同一个问题——如何让 AI 更好地记住并理解你的整个项目。
这次工程文档中对code agent 的改进,同样没有脱离“记忆”这个主线。而关于记忆,文档从两个层面进行了阐述。
1
第一个层面,是如何让AI 对整个项目的情况有更全面的把握,也就是“记忆的传承”。文档里提出的主要方法是:在每次创建代码项目时,要生成一个 to-do list。这个 to-do list 不仅要列出已完成和未完成的任务,还要明确每项任务完成后在哪里打勾。这听起来并不新鲜——从今年初的 Minus 开始,很多 agent 构建方案就围绕着 to-do list 展开:先列出任务清单,再逐项执行。
但这次的做法有些不同。这里的to-do list 不只是任务列表,还附带了一个“项目概览”。这个概览会告诉 AI:整个项目结构大概是什么样子的,帮助它更好地理解接下来要做什么。
这一点我其实也有类似的实践。每次启动一个代码项目(不一定是agent 项目),我通常会让 AI 先遍历所有文档,然后生成一个 README。这个 README 会包括项目的整体架构、有哪些关键文档、每个文件夹的作用是什么等等。无论是对我自己,还是对 AI 来说,这都能显著提升对项目整体情况的把握效率。否则,每次调研项目都得通读全部文件再总结一遍,不仅耗时,还会占用大量记忆空间——我觉得这确实没必要。
这次的文档就很明确地提出:要构建这样一个类似README 的概览文档,让 AI 清楚地知道“我现在处于什么状态”。不仅如此,它还进一步建议建立一个“日志文档”,详细记录每一次修改的位置、效果如何,并将每个修改版本都保存在 Git 中作为备份。这样一来,万一某次改动出了问题,还能回退到之前的版本。这种做法,真的很有软件工程的味道了。
这是第一点:如何加强记忆的继承。
2
第二点,则是如何降低项目对记忆的依赖。设想一下,如果每次AI 开始处理你的项目,都得先把所有内容读一遍,搞清楚接口关系,哪怕有 README,依然会消耗大量时间和资源,联调时也会很麻烦。
Anthropic 在这里提出了一个思路——也是他们观察到高级软件工程师常用的做法:对整个工程项目进行解耦,采用模块化设计。
所谓“解耦”,意思是每个功能单元之间没有强耦合关系。也就是说,我完成这个模块,并不会影响上一个模块的运行;完成之后,也不需要立刻知道后续模块如何实现。只要把这个功能模块做好,就算完成了一部分任务。
对AI 来说,这意味着它只需要掌握很少的信息,就能继续往下工作。等所有功能模块都完成后,再做一次整体集成,整个项目就完成了。我觉得这是非常聪明的做法,其实也是人类在工业社会中的核心工作思路。
模块化设计在工业领域早已成熟。比如电脑和手机,就被清晰地拆分为主板、内存、CPU、GPU、硬盘等独立元件。把这些硬件组合起来,再装上操作系统,一台完整的电脑就诞生了。而且,你可以随时替换其中任意一个模块,而不会影响整体系统的运行。
这确实很有借鉴意义——知识是相通的。无论你做的是硬件、软件,还是工业设计,底层的思维逻辑往往高度相似。