作为一个从 AI 编程助手刚出现就开始用、到现在几乎每天离不开的人,我最近半年最明显的感受是:AI 编程的重心,正在从"怎么把一句话问得更好"转向"怎么把项目的记忆交给 AI"。这两者听起来差别不大,但实际开发体验完全是两个世界。围绕 AI 编程范式转换和 Memory 工程,业界讨论越来越热,而我更关心的是落地:怎么让一个无状态的模型,真正"记住"我的项目。
最早的时候,我打开一个 AI 编程工具,相当于请了一个记忆力只有几分钟的临时工。他每次听完需求、动手改完代码,你把对话关掉再开一个新会话,他就什么都不记得了。项目结构、依赖关系、编码规范、测试命令——所有这些都要重新讲一遍。讲得烦了我就想:凭什么这些东西不能写成一份文件,让 AI 自己去看?这个念头,其实就是 Memory 工程的起点。而 AGENTS.md 这类声明式配置文件,则是这个思路目前最成熟的落地形态。这篇文章不打算讲虚的,就讲我自己从无状态模型的坑里爬出来,到逐步建立一套项目记忆体系的过程,以及踩过的坑和总结出的实操方法。如果你每天也在和一问三不知的 AI 编程助手较劲,这篇文章应该能帮你省下不少重复劳动。
1. 无状态模型的困局:每次对话都是"初次见面"
1.1 无状态到底是什么意思
先把我理解的"无状态"这个词讲透。一个无状态的对话模型,在处理你的每次请求时,它看到的只是你发给它的那一段文本——包括系统提示、历史消息、你的新问题,以及其他附加上下文。它没有一个持续存在的"大脑"来记住上次对话的结论。所谓"记住",本质上只是把过去的文本重新塞进当前这次请求的上下文里。
这就带来一个很反直觉的现象:你以为 AI 在"学习"你的项目,实际上它只是在你当前这轮对话的可见范围内"临时阅读"。对话一关、上下文一清,它对你项目的理解就归零。我最早踩这个坑的时候很崩溃——上午刚跟工具确认过项目的目录结构和启动方式,下午开一个新会话让它写个新功能,它又开始瞎猜,甚至连我用的是哪个包管理器都能搞错。
这个问题的根子在于:大语言模型本身没有"项目记忆"这个组件。它的知识是训练时固化下来的通用知识,而你的项目是训练数据里不存在的私有信息。要让 AI 用得顺,唯一的办法就是把这些私有信息,在每次请求时以可读的形式喂给它。谁喂得全、喂得准,谁用起来就顺。
1.2 上下文窗口:看着很大,实际很挤
有人可能会说:现在模型上下文窗口不是很大吗?动辄几十万 token,把整个项目塞进去不就行了?想法没错,但现实很骨感。上下文窗口是物理上限,不是"推荐用量"。我实测过的经验是:当喂给模型的上下文越长,模型对中间信息的注意力就越容易被稀释,回答质量明显下降。这不是玄学,注意力机制就是这样的——长文本里,模型更容易盯着开头和结尾看,中间夹着的关键约束经常被"忽略"。
于是你陷入一个矛盾:想让 AI 懂项目,就得给它塞大量项目背景;但塞太多了,它反而抓不住重点。我自己的体会是,无脑把 README、全部文档、几十个模块文件全塞进去,效果往往不如一份精心写好的、几百行的项目说明文件。这就是为什么"记忆的工程化"越来越重要——我们要的不是"喂得多",而是"喂得巧"。
这里有一个常被忽视的细节:上下文里的信息不是平等对待的。开头和结尾的信息被模型"记住"的概率远远大于中间段落。这意味着如果你把项目背景放在一大段杂乱文本的正中间,它大概率被淹没。反过来,如果项目约定能每次都出现在对话的最前端,那它被模型真正采纳的概率会高很多。后面讲的 AGENTS.md,之所以有效,和这个机制密切相关。
1.3 重复沟通的隐性成本
无状态还有一个很现实的成本问题:时间。我自己统计过,早期在项目里用 AI 编程助手,平均每次新开会话,至少要花 5 到 10 分钟去"热身"——讲清项目是做什么的、技术栈是什么、目录怎么组织、有哪些约定。一天开十次会话,一小时就没了。这还是顺利的情况;如果不顺利,它给了个完全不符合项目规范的答案,你还要花时间纠正,成本直接翻倍。
更麻烦的是"不一致性"。同一个项目,上午的会话里你告诉它"这里的错误处理统一走自定义异常",下午的新会话没这个信息,它可能就给你写了个裸抛异常。代码风格漂移、架构约定被破坏,这些都是无状态带来的隐性债务。等到项目大了,这些不统一的地方就是一个一个的雷。
我把这段时期的体验总结成一张表,方便你对照自己现在的情况:
| 无状态协作的典型表现 | 带来的直接后果 | 我当时的解决尝试 |
|---|---|---|
| 每次新会话都要重新介绍项目 | 每天浪费大量时间在重复沟通上 | 把项目描述存在备忘录里,开新会话时手动粘贴 |
| AI 给出的代码风格和项目不一致 | 代码风格漂移,审查成本上升 | 反复在对话里强调规范,效果不稳定 |
| AI 使用错误的构建或测试命令 | 本地环境报错、CI 意外失败 | 把命令写在提示词里,但经常被忽略 |
| 项目架构约定被 AI 无意破坏 | 事后返工,需要人工检查边界 | 靠代码审查兜底,但效率很低 |
这些问题的本质,都指向同一个结论:无状态不是模型的 bug,而是这个范式的天然属性。我们不可能要求模型自己记住项目,但我们可以改变喂给它的方式。这个改变,就是 Memory 工程要干的事。
2. Memory 工程:从"临场指挥"到"制度治理"的范式切换
2.1 从 Prompt 工程到 Memory 工程
前些年大家爱聊 Prompt 工程,教你怎么写提示词才能让模型给出好答案。但用久了你会发现,单条提示词再精妙,它也是"一次性"的——这条提示词只能服务当前这个任务,换一个任务又要重新写。Prompt 工程解决的是"单次对话里的表达效率",而 AI 编程真正吃掉的成本,恰恰发生在"多次对话之间的信息衔接"上。
Memory 工程不一样。它的核心思路是:把那些跨任务、跨会话、长期有效的项目信息,从"对话里临时说"变成"文件里固定写"。写一次,长期复用。AI 每次开始工作前,先读这些文件,相当于入职第一天先看公司制度手册,而不是每次干活都要老板口述一遍规矩。
打个比方:Prompt 工程是"每次点菜时跟厨师说清楚口味偏好",Memory 工程是"把口味偏好做成一张常客档案卡,厨师一看档案就知道怎么炒"。后者省的不只是一次沟通,而是每一次沟通。这也是我为什么认为 Memory 工程会逐渐取代 Prompt 工程,成为 AI 编程领域更核心的实操技能——因为它解决的是更根本的效率问题。
2.2 记忆分层:全局、项目、会话
我后来把 AI 编程的记忆体系分成三层,这样理解起来非常清晰。
第一层是全局记忆。这是关于你个人的、跨项目的偏好,比如你习惯用的代码风格、常用的提交信息格式、偏好哪种测试方式。这类信息适合放在全局配置里,让所有项目共享,一次配置,处处生效。
第二层是项目记忆。这是针对某个具体项目的约定,包括项目结构、架构决策、构建命令、代码规范、常见坑位。这类信息必须跟着项目走,换一个项目就不适用了。AGENTS.md 就是这一层的典型载体,也是整个记忆体系里最需要花心思治理的部分。
第三层是会话记忆。这是当前这次任务里临时产生的信息,比如正在改哪个文件、下一步做什么。这层本来就由对话上下文承载,不需要持久化,但它的作用同样重要——它是前两层记忆的"工作台",AI 把项目记忆里的规则拿到这里来执行。
这三层各有各的存储和读取方式。很多人只盯着会话那一层折腾,比如不断把旧对话复制到新对话里,反而忽略了最该工程化的全局层和项目层。我的经验是:把 80% 的精力放在项目记忆上,收益最大——因为项目记忆最具体、最独特、也是最容易"一劳永逸"的部分。
2.3 声明式与指令式:一页纸说清两种范式
Memory 工程里还有一对关键概念:声明式和指令式。这两个词看着学术,其实很好懂。
指令式是"告诉 AI 每一步怎么做"。比如你写"先读 README,然后看 src 目录,找到入口文件,再检查依赖,最后回答我的问题"。这种方式很直接,但有两个毛病:一是啰嗦,每条指令都要从头写;二是脆弱,AI 一旦漏执行某一步,后面的结果就飘了。
声明式是"告诉 AI 项目当前的状态是什么样的"。比如你写"本项目是 Python 3.11 生态,入口在 app 目录,测试走统一命令,代码风格遵循项目现有约定"。AI 读到这些事实,自己就知道该怎么行动。它不需要你一步步指挥,因为足够多的"事实"会自动约束它的行为。
这两种范式的差别,我常常用一个表格来讲:
| 维度 | 指令式 | 声明式 |
|---|---|---|
| 核心内容 | 做什么、按什么顺序做 | 项目是什么、有哪些约束 |
| 典型例子 | "先读文档,再改代码,然后跑测试" | "测试命令是 make test,改动必须配套测试" |
| 复用性 | 一条指令只针对一个任务 | 一份声明覆盖所有相关任务 |
| 容错性 | 漏执行一步就出错 | 事实够了,AI 自己推导路径 |
| 维护成本 | 每次会话都要重新写 | 写一次,长期更新 |
打个更生活化的比方:指令式是给导航软件说"左转、右转、直行";声明式是告诉它"目的地是哪里、走高速还是走小路"。显然后者更省心,也更接近 AI 编程工具应该有的使用方式。AGENTS.md 就是声明式范式的典型落地。
3. AGENTS.md:把项目的"宪法"写进仓库根目录
3.1 AGENTS.md 是什么,以及它凭什么有效
AGENTS.md 说白了,就是放在项目根目录下的一个 Markdown 文件,内容是用自然语言写清楚这个项目的关键信息,供 AI 编程工具在开始工作时读取。它不依赖某个特定工具,你完全可以把它当成项目里的一份"AI 使用手册"来维护。
它为什么会有效?两个原因。第一,它的位置固定——放在根目录,任何工具、任何会话,只要想了解项目,第一个去翻的就是根目录,这个文件天然容易被发现。第二,它的格式是 Markdown——模型的训练语料里 Markdown 占很大比重,解析起来毫无障碍,即使没有任何特殊工具支持,你直接把文件内容贴给模型,它也能理解。
我在实际项目中验证过:同样的任务,有 AGENTS.md 的项目,AI 给出可用代码的概率明显更高;没有的项目,经常要来回纠正三四轮。这让我彻底相信,这个文件不是花架子,而是真正能改变 AI 工作质量的基础设施。每个接到 AI 编程任务的开发者,都应该先问一句:我的项目根目录里,有没有这样一份"给 AI 看的说明书"?
3.2 工具读取它的典型流程
为了说清楚它怎么生效,我描述一下我观察到的典型流程。当你让 AI 编程工具开始处理一个新任务时,工具通常会做这几件事:
第一步,扫描项目根目录,寻找 AGENTS.md 这类约定文件。找到后,把它作为"系统级别"的上下文注入到本次对话的最前端。这一步是整个流程的关键——项目约定不是在对话中途被"提到",而是从第一条消息开始就端端正正地摆在模型面前。
第二步,如果有其他配套的说明文件,比如文档索引、架构文档、README,工具可能会按 AGENTS.md 里的引用提示,进一步加载相关材料。这一步让配置文件的辐射范围可以延伸到整个文档体系。
第三步,你的具体任务指令进来后,模型看到的是"项目约定 + 文档引用 + 你的问题"三段信息的组合。它先理解项目约定,再回答你的问题。
这个过程里最妙的一点是:项目约定永远出现在对话的前端。还记得前面说的注意力机制吧?前端信息是模型最容易关注的区域。把项目宪法放在最前面,就等于强制让 AI"先看制度再干活",这比任何提示词技巧都管用。我后来甚至习惯在 AGENTS.md 开头就写上一句"在回答任何问题之前,先阅读本文件并遵守其中所有约定",效果非常稳。
3.3 一个可以拿来就用的 AGENTS.md 模板
我不喜欢空谈概念,直接上一个我在实际项目里沉淀出来的模板。这份模板覆盖了 AI 干活最常踩的几类坑:项目定位、技术栈、目录结构、命令、代码约定。
我把模板按项目实际情况删改,核心骨架如下:
# 项目指南 ## 项目定位 本项目是一个 [一句话说清项目做什么] 的工具/服务。 核心目标用户是 [谁在用],核心业务价值是 [解决什么问题]。 ## 技术栈 - 语言/运行时:[如 Python 3.11] - 核心框架:[如项目使用的 Web 框架] - 数据库/缓存:[如关系型数据库 + 缓存服务] - 包管理器:[如项目实际使用的包管理器] ## 目录结构 - src/app:业务逻辑入口,所有新功能优先放在这里 - src/core:与业务无关的通用能力(日志、配置、异常) - tests:测试目录,与 src 保持镜像结构 - docs:架构决策记录,修改核心逻辑前先查看 ## 常用命令 - 安装依赖:make install - 本地开发:make dev - 运行测试:make test - 代码检查:make lint ## 架构约定 - 所有业务错误必须使用自定义异常,禁止裸抛通用异常 - 数据访问统一走仓库层,业务层禁止直接操作数据库 - 新增对外接口必须附带文档注释 ## 风格要求 - 代码遵循项目现有风格,优先模仿相邻文件的写法 - 函数命名用动词开头,变量命名用名词 - 注释说明"为什么",不解释"是什么"注意,这份模板的关键不是字段多,而是每一条都有信息量。我曾经见过有人把 AGENTS.md 写成两千字的散文,AI 读完依然抓不住重点。好的声明式配置要像 API 文档一样精炼,每一句都是可验证的事实,而不是可读可不读的废话。
4. 实战拆解:从零搭建一份项目声明式记忆
4.1 先梳理"不变事实":写配置前的准备
动手写 AGENTS.md 之前,我建议你先做一件事:把项目里那些"三个月内不会变"的事实列出来。这些事实就是声明的素材。我一般会按这几个问题来梳理:
第一,这个项目到底在做什么?不要写"一个电商系统"这种空话,要写"面向中小商户的库存管理服务,核心是提供实时的库存对账能力"。AI 只有知道项目在做什么,才能在你让它改功能时做出合理判断——它不会把支付模块的逻辑顺手套到库存模块上。
第二,技术选型是什么?语言、框架、包管理器、数据库,这些是对编写代码影响最大的硬约束。我见过 AI 在一个用 Python 的项目里给你生成其他语言的依赖安装指令,就是因为缺少这一条声明。
第三,有哪些规矩?错误处理方式、目录职责、数据访问边界、测试要求、代码风格。这些是项目长期演化形成的行为准则,新成员(包括 AI)最需要的就是这类信息。
把这个清单整理出来,你就完成了 80% 的配置工作。剩下的只是把它组织成 AGENTS.md 的格式。这个过程本身也有价值——你会发现,很多你以为"团队心里都清楚"的约定,一旦要写出来,才发现根本没达成过共识。这份文件顺便成了团队对齐的工具。
4.2 把常用命令写成契约
项目里的常用命令,是最容易被忽略、但其实价值极高的配置项。原因很简单:AI 要跑测试、要起服务、要装依赖,如果它不知道正确命令,就会自己脑补一个,然后在你的环境里跑出一堆莫名其妙的错误。
我习惯在 AGENTS.md 里用一个"命令契约"区块,把关键操作和它对应的命令一一写清。比如:
- 安装依赖:
make install(注意不要直接调包管理器安装,会动锁定文件) - 运行测试:
make test(单元测试),make test-e2e(端到端测试) - 启动开发服务:
make dev - 构建产物:
make build
每个命令后面,我会顺手写一句"为什么是这个命令"。比如"不要直接调包管理器安装"这句备注,看着多余,实际非常关键。AI 看到这个约束,就不会擅自换命令,你的 CI 也不会因为依赖锁定文件被改动而无辜挂掉。
顺带说一句:命令契约要定期核对。项目升级、脚手架换掉,命令也会变。我见过有人 AGENTS.md 里写着上古时期的启动命令,项目早换成新框架了,AI 照着旧命令跑,自然各种报错。配置文件不维护,比没有配置文件更误事——因为你会盲目信任它,直到被它坑了才反应过来。
4.3 架构约定要写"边界",不要写"代码"
写架构约定这块,很多人容易跑偏:把 AGENTS.md 写成了代码规范大全,什么变量命名、缩进几格、用单引号还是双引号都写上。我倒觉得,这类纯风格问题可以交给格式化工具去管,AI 编程工具基本都会遵守现成的格式配置。真正需要写进声明文件的是"边界"——哪些模块可以碰什么,什么绝对不能碰。
举个例子,我负责过一个数据迁移项目,最核心的边界是"禁止在业务代码里直接更新生产数据"。我在 AGENTS.md 里把这个写成一条铁律,并说明原因:迁移逻辑必须经过审批脚本,直接操作会导致数据不一致且无法回溯。加了这个声明之后,AI 生成代码时明显收敛了很多,再也没有出现过"顺手写个更新语句"的情况。
再比如,有的项目里"所有对外接口都必须走统一鉴权",有的项目里"配置项禁止硬编码,必须走配置中心"。这些边界,AI 在代码里是看不出来的,只有显式写出来它才知道。声明式配置真正的价值,就是把这些"看不见的规矩"变成 AI 可见的约束。写边界还有一层好处:它逼着你自己想清楚项目的底线在哪里,这本身就是一次很好的架构复盘。
4.4 让配置文件跟着项目一起演进
AGENTS.md 不是一次写完之后就永久不变的静态文件,它应该和你项目的架构决策一样持续演进。我自己的习惯是:每次遇到"AI 因为不知道某个信息而犯错"的情况,就把这个信息补进去;每次架构发生变动,就同步更新相关条目。
举个例子。有次我让 AI 重构一个模块的错误处理逻辑,它自作主张引入了一个第三方库,理由是"可以简化代码"。问题是我们的项目对第三方依赖引入有严格审查流程,它不知道这个规矩,就踩线了。那次之后,我立刻在 AGENTS.md 里加了一条:"引入新的第三方依赖前,先向用户确认并获得批准。"从那以后,再也没犯过同样的错。
所以我把 AGENTS.md 当成一个"活的文档":AI 犯错,就是文档内容有缺口;文档有缺口,就补上。项目在变,这个文件也要跟着变。它不是摆设,是你和 AI 协作的契约文本。我甚至会把每次补丁的日期和原因写成注释(Markdown 里可以写在末尾),这样过几个月回头看,还能知道当年为什么定下某条规矩。
5. 从单文件到记忆体系:拆分文档、分级治理、团队同步
5.1 单文件什么时候该拆
AGENTS.md 做得再精炼,也有体积上限。当项目复杂度上来,比如有十几个模块、数百个文件时,把所有信息塞进一个文件,会让文件变得臃肿,AI 读取时反而不容易抓住重点。这时候我建议做拆分。核心思路是:根目录的 AGENTS.md 只保留"全局不变的规则"和"指向详细文档的索引",具体的技术细节放到各自的文档里,通过相对路径引用。
我常用的拆分方式是这样的:
- 根目录的 AGENTS.md:项目定位、技术栈、核心边界、命令契约、文档索引
- docs/architecture.md:架构决策、模块边界、关键流程
- docs/testing.md:测试策略、测试数据说明、覆盖率要求
- docs/operations.md:部署方式、环境变量、运维注意事项
AGENTS.md 里的索引可以这么写:
## 文档索引 - 架构说明:docs/architecture.md(修改模块边界前必读) - 测试策略:docs/testing.md(新增测试前必读) - 运维说明:docs/operations.md(涉及部署配置时必读)这样的好处是:AI 不会一上来就淹没在几十页文档里,但它知道去哪里找什么。真遇到相关任务时,它会按索引去加载对应文档。这就像给 AI 配了一份项目版的"知识地图",比起一次性把全部知识灌输给它,效果更好。我实测的感受是,拆完之后 AI 在具体任务上的"命中率"明显提升,因为它不再被无关信息干扰。
5.2 全局记忆与项目记忆怎么协同
前面提到记忆分层,这里展开说说全局记忆和项目记忆怎么配合。
全局记忆适合放那些"你在任何项目里都坚持的做法"。比如我自己固定的偏好是:提交信息用统一的约定式风格;生成代码时优先写类型注解;注释必须解释为什么而不是复述代码。这些偏好放全局配置里,所有项目自动生效。
项目记忆放的是"这个项目特有的约定",优先级应该高于全局。比如你的项目本身不写类型注解,那全局"优先写类型注解"的偏好就要服从项目的既有风格。
我用一个简单的优先级原则:项目级声明 > 全局声明 > 模型默认行为。实际配置时,如果项目里有不同意见,就写在项目级文件里;项目里没提到的,才轮得到全局偏好来兜底。这样层级清楚,AI 的行为就可预期。如果你有两个记忆来源发生冲突,AI 不知道该听谁的,它就会随机应变——这恰恰是我们要避免的。
5.3 团队协作里的记忆治理
当 AGENTS.md 不只是你一个人的工具,而是整个团队都在用时,它就成了团队知识资产的一部分。这时候有两个新问题:谁来维护?变了怎么同步?
我的做法是把它纳入代码评审流程。任何修改 AGENTS.md 的变更,必须有明确的理由——通常是"AI 犯了某个错误,补充某条声明可以避免"。这样既防止有人随手乱改,也让文件每次变更都有迹可循。
还有一个细节:AGENTS.md 的变更,最好和它所描述的代码改动一起提交。如果架构变了,你先合代码、后改文档,中间这段时间 AI 拿到的还是旧约束,就可能产出不符合新架构的代码。把文档变更和代码变更绑在一起,能让记忆体系和代码库始终保持同步。
团队协作还有一个好处:不同成员的踩坑经验可以沉淀到同一个文件里。我负责某个模块,某天发现 AI 总是不写事务边界,补充一条声明;同事负责另一个模块,也可能发现别的坑,再补一条。几个月下来,这个文件就成了团队和 AI 协作的"共同智慧库",价值远超任何一个人的单打独斗。这也是我见过的最好的文档形态——它不是为了应付检查写的,是真的有人在用、有人在更新。
6. 踩坑记录:声明式记忆的边界与我的三条铁律
6.1 配置过度的反面教材
声明式配置不是越多越好,这一点我栽过跟头。有段时间我特别兴奋,把能想到的约束全写进了 AGENTS.md。从代码风格、目录规范、接口命名、日志格式、异常码规则,洋洋洒洒写了上千行。结果呢?AI 反而变笨了——因为它要在处理任务前先消化一大堆约束,注意力被分散,真正重要的边界反而容易被"淹没"在长篇大论里。
那次之后我做了个减法实验:只保留 20% 最核心的约束,把其余全删掉。效果立刻回升。我总结出的规律是:AGENTS.md 应该像一部宪法的总纲,而不是法条汇编。只写那些"不写就会出大问题"的规则,其余细节交给格式化工具、模板代码和代码审查去解决。
如果你不确定某条规则该不该写,我建议用这个标准问自己:假设 AI 不知道这条规则,它犯错的概率有多大?犯错造成的代价有多大?两者都高,才值得写。用这个标准过滤一遍,你会发现能写进文件的东西其实比想象中少很多。
6.2 声明与实际行为冲突的排查方法
还有一种经常遇到的情况:AGENTS.md 里写了规则,但 AI 还是违反了。不要急着骂 AI 不听话,先检查是不是声明本身有问题。
最常见的冲突来源是"声明与代码现状不一致"。比如你写"所有接口必须走统一网关",但代码里明明有直接暴露的接口。模型读到声明,又看到代码,发现两者矛盾,它就会困惑,倾向于按看到的具体代码来行动。这时候不是 AI 的错,是你的声明"过时"了。
另一个来源是"声明写得不够具体"。你说"遵循项目代码风格",但项目里新老代码风格本身就不统一,AI 根本不知道听谁的。这种声明等于没写。正确的做法是明确指出"新代码沿用最近重构后的风格:类型注解完备、函数体短小、遵循模块内现有命名"。
排查这类问题,我的套路很简单:先看是不是声明太笼统,再看是不是声明和代码矛盾,最后才考虑是不是模型本身理解偏差。绝大多数情况下,前两个原因就能解释问题。这个排查顺序反过来用,就是在浪费时间。
6.3 我对声明式记忆的三条铁律
写了这么多,最后把我的经验浓缩成三条铁律,给想实践的朋友一个清晰的切入点。
第一条:声明式记忆要写"事实",不要写"命令"。事实是"本项目用 Python 生态",命令是"请用 Python 写";事实会约束行为,命令只会被选择性执行。多写事实,少写祈使句。
第二条:记忆体系要和项目同步演化。每次架构变动、每次依赖升级、每次 AI 踩坑,都回到配置文件里去增删条目。文档不更新,等于不存在;配置不维护,等于没有配置。我见过太多项目,配置文件写得很漂亮,但都是三个月前的旧信息,AI 照着做反而出错。
第三条:先小步试验,再扩大范围。不要第一天就搭一个庞大的记忆体系,先从几十行的 AGENTS.md 开始,跑两周,观察 AI 的行为改善,再逐步补充。你会发现,真正值得写进去的东西,往往比想象中少得多。我自己就是从三行配置起步的,慢慢迭代到现在几十行,每一行都是踩过坑才沉淀下来的。
我在实际项目里用了这套方法之后,最大的感受是:AI 编程助手不再是那个每次都要重新调教的临时工,而像一个读过项目手册的熟手——它知道该看哪个文档、该守哪条边界、该跑哪条命令。省下来的时间,我拿去做真正需要人的判断力的事情:架构设计、代码评审、和业务方对需求。这才是 AI 编程范式转换最有价值的部分。最后再分享一个小技巧:把 AGENTS.md 当成一个普通代码文件来对待,该改就改,该删就删,不要有"写完了就定型"的心理。你越勤快地维护它,它回馈给你的效率就越高。