写一个上下文文件(AGENTS.md)
你能做的杠杆率最高的一件事,就是写一个 AI 会自动读取的上下文文件。不同的工具寻找不同的名字——AGENTS.md、CLAUDE.md、.cursorrules,或者 .github/copilot-instructions.md——但理念是相同的:一份活的文档,告诉 AI 你的项目是如何运作的,以及你希望它如何行事。
没有它,AI 靠猜。有了它,AI 不再重新格式化你的代码,不再发明你不用的库,不再重新解释你早已做过的决定。把它想成给一位新队友的入职文档——这位队友很聪明,但在每次会话之间会完全失忆——他要变得高产所需的一切,都得放在他每次都会读的地方。
一个实用的起步文件:
# Project: Invoice Manager
## What this is
A small web app for freelancers to create and track invoices.
## Tech stack
- TypeScript + React (Vite)
- Tailwind for styling
- SQLite via Prisma
- Vitest for tests
## Commands
- Install: `npm install`
- Run dev server: `npm run dev`
- Run tests: `npm test`
- Lint: `npm run lint`
## Conventions
- Use functional components and hooks; no class components.
- Keep components small; one component per file.
- Write a test for every new function in `src/lib`.
- Never edit files in `src/generated/` — they are auto-generated.
## Don'ts
- Don't add new dependencies without flagging it first.
- Don't commit secrets; use environment variables.
让它保持简短,也保持最新。一个膨胀到一千行的上下文文件,就不再会被认真读了——无论是你还是模型——所以删起来要和加起来一样狠。当 AI 反复犯同一个错误的假设时,那就是你该加一行的信号;当一条规则不再符合现实时,在它开始主动误导智能体之前把它删掉。
有几个模式,把一个有效的上下文文件和一个被无视的区分开来:
- 写得具体而明确。"用我们的约定"毫无用处。"校验用
zod;我们不用yup"才是一条 AI 真能照做的规则。 - **把"别做"说得和"要做"一样响亮。**模型急于帮忙,这意味着除非你叫它别这么干,它会乐呵呵地加个依赖或重写一份配置。
- 指向示例。"照着
src/features/invoices的风格来"给了 AI 一个可以照抄的具体范本,而不是一条要去揣摩的模糊指令。
把上下文文件当作一份记录,记下你本来每次都得重复一遍的每一条教训。它是这整章里最廉价、最持久的投资。