精选文章 · 转载长文
本文转载自 aihero.dev,版权归原作者所有

了解如何为 AI 编码智能体优化 AGENTS.md 文件。掌握渐进式披露,让指令保持聚焦,并最大化智能体性能。

Matt Pocock
你是否曾经担心过自己的 AGENTS.md 文件太大?
也许你确实应该担心。糟糕的 AGENTS.md 文件会让智能体困惑,变成维护噩梦,还会在每次请求中消耗你的 token。
所以,你最好知道该如何修复它。
AGENTS.md 是一个提交到 Git 的 Markdown 文件,用来定制 AI 编码智能体在你的代码仓库中的行为。它位于对话历史的顶部,紧接在系统提示词之下。
可以把它看作智能体基础指令与你的实际代码库之间的一层配置。该文件可以包含两类指导:
AGENTS.md 文件是一项开放标准,许多工具都支持它——尽管并非全部工具如此。
CLAUDE.md
值得注意的是,Claude Code 不使用 AGENTS.md,而是使用 CLAUDE.md。你可以在两者之间建立符号链接,让所有工具都以相同方式工作:
```shellscript
ln -s AGENTS.md CLAUDE.md ```
有一种自然形成的反馈循环,会让 AGENTS.md 文件膨胀到危险的程度:
不同的开发者会加入互相冲突的观点。没有人对全文做统一的风格整理。结果如何?一个无法维护的烂摊子,反而会损害智能体的表现。
另一个罪魁祸首是自动生成的 AGENTS.md 文件。永远不要用初始化脚本自动生成 AGENTS.md。它们会向文件中塞满“对大多数场景都有用”的内容,而这些内容其实更适合渐进式披露。生成的文件重视面面俱到,而不是克制。
Humanlayer 的 Kyle 在其文章中提到了“指令预算”这一概念:
前沿思考型 LLM 能够以较为稳定的方式遵循约 150–200 条指令。小模型能关注的指令少于大模型,非思考型模型能关注的指令少于思考型模型。
无论是否相关,AGENTS.md 文件中的每一个 token 都会在每一次请求中加载。这会造成一个严格的预算问题:
| 场景 | 影响 |
| --- | --- |
| 小而聚焦的 AGENTS.md | 为任务特定指令留出更多 token |
| 庞大臃肿的 AGENTS.md | 实际工作可用的 token 更少;智能体会感到困惑 |
| 不相关的指令 | 浪费 token + 分散智能体注意力 = 表现更差 |
综合来看,这意味着理想的 AGENTS.md 文件应该尽可能小。
大型 AGENTS.md 文件的另一个问题是内容过时。
文档很快就会过期。对人类开发者而言,过时文档令人烦恼,但人类通常有足够的内在记忆,会对错误文档保持怀疑。对每次请求都读取文档的 AI 智能体而言,过时信息会主动污染上下文。
当你记录文件系统结构时,这一点尤其危险。文件路径经常变化。如果你的 AGENTS.md 写着“身份验证逻辑位于 src/auth/handlers.ts”,而该文件后来被重命名或移动,智能体就会自信地去错误的位置查找。
与其记录结构,不如描述能力。对内容可能位于何处以及项目的整体形态给出提示,让智能体在规划期间即时生成自己的文档。
领域概念(例如“organization”“group”和“workspace”的区别)比文件路径更稳定,因此记录它们更安全。但在快速演进的 AI 辅助代码库中,即使这些概念也可能漂移。请保持克制。
对放入其中的内容要毫不留情地筛选。可以把以下内容视为绝对最低限度:
corepack 发出警告)说实话,就这些。其他一切都应该放到别处。
这一个句子能让智能体理解自己为什么在这个仓库中工作。它为智能体做出的每个决定提供锚点。
示例:
markdown
This is a React component library for accessible data visualization.
这就是基础。智能体现在理解了自己的工作范围。
如果你在 JavaScript 项目中使用 npm 以外的工具,请明确告诉智能体:
markdown
This project uses pnpm workspaces.
否则,智能体可能默认使用 npm,并生成错误的命令。
Corepack 也很不错。你也可以使用 corepack,让系统自动处理警告,从而节省宝贵的指令预算。
不要把一切都塞进 AGENTS.md,而应使用渐进式披露:只向智能体提供它当下需要的内容,并在需要时将它指向其他资源。
智能体很擅长快速浏览文档层级。它们对上下文的理解足以找到自己需要的内容。
如果你的 AGENTS.md 当前写着:
markdown
Always use const instead of let.
Never use var.
Use interface instead of type when possible.
Use strict null checks.
...
请把这些内容移到单独的文件中。在根目录的 AGENTS.md 中写:
markdown
For TypeScript conventions, see docs/TYPESCRIPT.md
注意这种轻描淡写的方式:没有“永远”,没有全大写的强制要求,只是以对话式语气给出引用。
这样做的好处是:
你甚至可以更进一步。docs/TYPESCRIPT.md 可以引用 docs/TESTING.md。创建一棵可发现的资源树:
txt
docs/
├── TYPESCRIPT.md
│ └── references TESTING.md
├── TESTING.md
│ └── references specific test runners
└── BUILD.md
└── references esbuild configuration
你甚至可以链接到外部资源,例如 Prisma 文档、Next.js 文档等。智能体会高效地浏览这些层级。
许多工具都支持“Agent Skills”——智能体可以调用的命令或工作流,用于在需要时了解如何完成某项具体工作。这是渐进式披露的另一种形式:智能体只在需要时提取知识。
我们会在另一篇文章中深入介绍 Agent Skills。
[
AI Hero · 技能系统
看看我在自己的 AGENTS.md 之上运行了哪些技能,把这个文件转化为实际交付的成果。
查看技能集](https://www.aihero.dev/skills)
你并不限于在根目录只放一个 AGENTS.md。还可以把 AGENTS.md 文件放在子目录中,它们会与根目录层级合并。
这对于 Monorepo 非常有用:
| 层级 | 内容 | | --- | --- | | 根目录 | Monorepo 的用途、如何浏览各个包、共享工具(pnpm workspaces) | | 包 | 包的用途、具体技术栈、包特定的约定 |
根目录的 AGENTS.md:
markdown
This is a monorepo containing web services and CLI tools.
Use pnpm workspaces to manage dependencies.
See each package's AGENTS.md for specific guidelines.
包级别的 AGENTS.md(位于 packages/api/AGENTS.md):
markdown
This package is a Node.js GraphQL API using Prisma.
Follow docs/API_CONVENTIONS.md for API design patterns.
不要让任何层级过载。 智能体会在上下文中看到所有合并后的 AGENTS.md 文件。让每一层都聚焦于与该范围相关的内容。
如果你开始对仓库里的 AGENTS.md 文件感到不安,并想重构它以采用渐进式披露原则,可以尝试把这段提示词复制粘贴到编码智能体中:
```txt I want you to refactor my AGENTS.md file to follow progressive disclosure principles.
Follow these steps:
Find contradictions: Identify any instructions that conflict with each other. For each contradiction, ask me which version I want to keep.
Identify the essentials: Extract only what belongs in the root AGENTS.md:
Anything truly relevant to every single task
Group the rest: Organize remaining instructions into logical categories (e.g., TypeScript conventions, testing patterns, API design, Git workflow). For each group, create a separate markdown file.
Create the file structure: Output:
A suggested docs/ folder structure
Flag for deletion: Identify any instructions that are:
当你准备向 AGENTS.md 添加内容时,问问自己它应该放在哪里:
| 位置 | 何时使用 |
| --- | --- |
| 根目录 AGENTS.md | 与仓库中的每一项任务都相关 |
| 独立文件 | 与某一个领域相关(TypeScript、测试等) |
| 嵌套文档树 | 可以按层级组织 |
理想的 AGENTS.md 小而聚焦,并指向其他地方。它只给智能体足够的上下文来开始工作,并留下通往更详细指导的线索。
其他一切都放在渐进式披露中:独立文件、嵌套的 AGENTS.md 文件或 skills。
这样可以高效利用指令预算,让智能体保持专注,并使你的配置在工具和最佳实践演进时仍然适用。