寫一個上下文檔案(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 一個可以照抄的具體範本,而不是一條要去揣摩的模糊指令。
把上下文檔案當作一份記錄,記下你本來每次都得重複一遍的每一條教訓。它是這整章裡最廉價、最持久的投資。