一份 AGENTS.md,讓 AI 程式碼規範率從 60% 飆升到 95%
前端 AI Skill 體系 · 實戰篇
5 分鐘寫一份 AGENTS.md,讓 AI 從此按你的規矩寫程式碼。
上一篇文章《基於四層 Skill 體系的前端團隊 AI 提效 50%》發出後,留言區問得最多的問題是:
"AGENTS.md 到底怎麼寫?能不能給個範本?"
今天安排。
但在給範本之前,我想先回答一個更根本的問題——
為什麼一個 Markdown 檔案,就能讓 AI 寫出的程式碼品質發生質變?
一句話定義:
AGENTS.md 是寫給 AI 程式設計助手看的專案規範檔。
你可以把它類比成:
檔案給誰看管什麼.eslintrc給 ESLint 看程式碼風格.prettierrc給 Prettier 看格式化規則tsconfig.json給 TypeScript 看型別檢查AGENTS.md**給 AI 看**專案規範、目錄結構、編碼約定、禁止事項.eslintrc 讓 ESLint 知道「用單引號還是雙引號」。
AGENTS.md 讓 AI 知道「元件放哪個目錄、樣式用什麼方案、哪些檔案絕對不能動」。
沒有它,AI 就是一個能力很強、但不知道團隊規矩的新人。
有了它,AI 知道你的規矩,按你的規矩來。
以下是我從實際專案中提取的 AGENTS.md(已脫敏),你可以直接感受它的結構:
markdown 體驗AI程式碼助手 代碼解讀複製程式碼# AGENTS.md
- 本專案為 React 19 + TypeScript 前端應用
- 套件管理器:yarn,Node >= 22.12.0
- 樣式方案:Less + CSS Modules
- UI 元件庫:antd v6
## Project Structure
src/
├── components/ # 通用元件(PascalCase)
├── pages/ # 頁面元件
├── hooks/ # 自訂 Hooks
├── services/ # API 請求封裝
├── models/ # 全域狀態
├── utils/ # 工具函式
├── typings/ # 型別定義
└── constants/ # 常數
- Never edit src/.umi/ — 框架自動生成
- Never edit dist/ — 建置產物
## Coding Style
- 使用 interface 定義 Props
- 元件命名:PascalCase,檔名 index.tsx
- Never 使用 any 型別
- Never 使用內聯樣式
## Build Commands
yarn serve # 開發伺服器
yarn build # 生產建置
yarn lint # 格式化
看起來很簡單對吧?就是一個 Markdown 檔案。
但它的效果是驚人的。
我用三個真實場景給你看差距。
❌ 沒有 AGENTS.md 時,AI 寫的程式碼:
tsx 体验AI代码助手 代码解读复制代码export default function CopyBtn({ text }: any) {
return (
<button
style={{ color: 'blue', padding: '4px 8px' }}
onClick={() => navigator.clipboard.writeText(text)}
>
Copy
</button>
)
}
問題清單:
any 型別——完全沒有型別定義CopyBtn 命名——團隊規範是完整的 CopyButtonmessage 元件做成功提示src/components/CopyButton/ 目錄下✅ 有 AGENTS.md 後,AI 寫的程式碼:
tsx 体验AI代码助手 代码解读复制代码// src/components/CopyButton/index.tsx
import React, { useCallback } from 'react'
import { message } from 'antd'
import styles from './index.less'
interface CopyButtonProps {
text: string
onSuccess?: () => void
}
const CopyButton: React.FC<CopyButtonProps> = ({ text, onSuccess }) => {
const handleCopy = useCallback(async () => {
await navigator.clipboard.writeText(text)
message.success('已複製')
onSuccess?.()
}, [text, onSuccess])
return (
<button className={styles['copy-button']} onClick={handleCopy}>
複製
</button>
)
}
export default CopyButton
差距一目了然:
interface 定義 Propsmessage 元件CopyButton 完整命名src/components/CopyButton/後者像團隊裡有 3 年經驗的同事寫的程式碼,前者像實習生第一天寫的。
❌ 沒有 AGENTS.md 時:
tsx 体验AI代码助手 代码解读复制代码// 直接在元件裡裸寫 fetch
const [data, setData] = useState(null)
useEffect(() => {
fetch('/api/customers')
.then(res => res.json())
.then(data => setData(data))
}, [])
✅ 有 AGENTS.md 後:
tsx 体验AI代码助手 代码解读复制代码// src/services/customer.ts
import { request } from 'umi'
export async function fetchCustomerList(
params: API.CustomerListParams
): Promise<API.Response<API.Customer[]>> {
return request('/api/customers', { params })
}
// 元件中使用
import { fetchCustomerList } from '@/services/customer'
const { data, loading } = useRequest(fetchCustomerList)
區別:
src/services/ 下request 而非裸 fetchuseRequest Hook 管理請求狀態❌ 沒有 AGENTS.md 時:
bash 体验AI代码助手 代码解读复制代码git commit -m "fix button"
✅ 有 AGENTS.md 後:
bash 体验AI代码助手 代码解读复制代码git commit -m "fix(components): 修復 CopyButton 在 Safari 下複製失敗的問題"
一個隨意的描述 vs 一個符合 Conventional Commits 規範的 commit message。
看完效果,現在教你怎麼寫。
一份合格的 AGENTS.md 包含 6 個核心章節。逐個教你寫,每個章節都有範本。
這是 AGENTS.md 的「開場白」,告訴 AI 你的專案用了什麼。
markdown 体验AI代码助手 代码解读复制代码# AGENTS.md
- 本專案為 [React/Vue/Next.js] + TypeScript 前端應用
- 套件管理器:[yarn/pnpm/npm]
- 樣式方案:[Less/Sass/Tailwind CSS] + CSS Modules
- UI 元件庫:[antd/Arco Design/Element Plus] v[版本號]
寫法要點:
npm install 而不是 yarn add適配不同技術棧:
markdown 体验AI代码助手 代码解读复制代码# Vue 3 專案
- 本專案為 Vue 3 + TypeScript 前端應用
- 建置工具:Vite 5
- 狀態管理:Pinia
- UI 元件庫:Ant Design Vue 4
# Next.js 專案
- 本專案為 Next.js 14 + TypeScript 全端應用
- 路由方案:App Router
- 樣式方案:Tailwind CSS v3
AI 最需要的資訊之一——知道檔案放哪裡。
markdown 体验AI代码助手 代码解读复制代码## Project Structure
src/
├── components/ # 通用元件(PascalCase 命名)
├── pages/ # 頁面元件
├── hooks/ # 自訂 Hooks
├── services/ # API 請求封裝
├── models/ # 狀態管理
├── utils/ # 工具函式
├── typings/ # 型別定義
└── constants/ # 常數
寫法要點:
告訴 AI「在這個專案裡,程式碼該怎麼寫」。
markdown 体验AI代码助手 代码解读复制代码## Coding Style
**TypeScript/React**
- 使用 interface 定義 Props 型別
- 元件使用 React.FC<Props>
- 元件命名:PascalCase,檔名 index.tsx
**樣式(Less + CSS Modules)**
- 正確用法:import styles from './index.less'
- 使用方式:className={styles['my-class']}
**路徑別名**
- @/* → src/*
寫法要點:
markdown 体验AI代码助手 代码解读复制代码## Build Commands
yarn serve # 啟動開發伺服器
yarn build # 生產建置
yarn lint # 程式碼格式化
AI 幫你除錯時可能需要執行命令。如果它不知道你用 yarn serve 而不是 npm start,就會給你錯誤的指引。
這是 AGENTS.md 中價值最高的章節。
Never 規則告訴 AI「絕對不能做什麼」——這比告訴它「應該怎麼做」更重要。
markdown 体验AI代码助手 代码解读复制代码## Never 規則
- Never 修改 src/.umi/ 或 src/.umi-production/ 目錄
- Never 修改 dist/ 目錄
- Never 在元件內使用 any 型別
- Never 使用內聯樣式(style={{ }}),除非需要動態計算
- Never 在 Less 中使用硬編碼顏色值——使用主題變數
- Never 在渲染路徑中執行耗時操作
- Never 在列表渲染中省略 key 屬性
- Never 在 node_modules/ 中安裝依賴
- Never 修改 lock 檔
- Never 使用 git stash
- Never 切換分支
為什麼 Never 規則如此重要?
因為 AI 犯錯的成本遠高於人類。
人類改錯了 src/.umi/,會很快意識到「哦,這個目錄不應該改」。但 AI 不會——它會認認真真地把自動生成的程式碼改了,然後你下次建置就炸了。
一條 Never 規則,能避免一次災難性的誤操作。
我的建議是:
每次 AI 犯了一個你不希望它犯的錯,就往 Never 規則裡加一條。
這是一個持續演進的過程。我現在的 Never 規則有 11 條,都是從真實踩坑中累積出來的。
markdown 体验AI代码助手 代码解读复制代码## Commit 規範
- 格式:type(scope): description
- 類型:feat / fix / docs / style / refactor / test / chore
## 多 Agent 並發
- 禁止 git stash
- 禁止切換分支
- 只 commit 自己修改的檔案
如果你不想從零寫,這裡有一份通用範本,涵蓋 React + TypeScript 專案最常見的場景。
直接複製到你的專案根目錄,改掉 [方括號] 裡的內容就行:
markdown 体验AI代码助手 代码解读复制代码# AGENTS.md
- 本專案為 [React/Vue/Next.js] + TypeScript 前端應用
- 套件管理器:[yarn/pnpm/npm]
- 樣式方案:[Less/Sass/Tailwind CSS] + CSS Modules
- UI 元件庫:[antd/Arco Design/Element Plus] v[版本號]
## Project Structure
src/
├── components/ # 通用元件(PascalCase 命名)
├── pages/ # 頁面元件
├── hooks/ # 自訂 Hooks
├── services/ # API 請求封裝
├── models/ # 狀態管理
├── utils/ # 工具函式
├── typings/ # 型別定義
└── constants/ # 常數
## Coding Style
**TypeScript**
- 使用 interface 定義 Props
- 元件使用 React.FC<Props> 或函式宣告
- Never 使用 any 型別
**樣式**
- import styles from './index.less'
- Never 使用內聯樣式
- Never 硬編碼顏色值
**路徑別名**
- @/* → src/*
## Build Commands
[你的開發命令] # 啟動開發伺服器
[你的建置命令] # 生產建置
[你的格式化命令] # 程式碼格式化
## Never 規則
- Never 修改框架自動生成的目錄
- Never 修改 dist/ 建置產物
- Never 在元件內使用 any 型別
- Never 使用內聯樣式
- Never 在渲染路徑中執行耗時操作
- Never 在列表渲染中省略 key
- Never 硬編碼敏感資訊
- Never 修改 lock 檔
## Commit 規範
- 格式:type(scope): description
- 類型:feat / fix / docs / style / refactor / test / chore
AGENTS.md 管的是「程式碼怎麼寫」,DESIGN.md 管的是「UI 長什麼樣」:
markdown 体验AI代码助手 代码解读复制代码# DESIGN.md
## 品牌色
- 主色:#1677FF
- 主色懸浮:#4096FF
- 主色背景:rgba(22, 119, 255, 0.1)
## 文字色
- 主文字:rgba(0, 0, 0, 0.88)
- 次要文字:rgba(0, 0, 0, 0.65)
## 間距系統
- 基礎單位:8px
- 元件間距:16px / 24px
有了 DESIGN.md,AI 在寫樣式時就不會用 color: blue 這種硬編碼顏色值。
建立一個 AGENTS.local.md(加入 .gitignore),寫你的個人偏好:
markdown 体验AI代码助手 代码解读复制代码# AGENTS.local.md(不入倉庫)
- 回覆語言:中文
- 程式碼註解語言:中文
- 元件寫法偏好:函式宣告
- 型別定義偏好:interface
AI 會同時讀取專案規範和你的個人偏好,輸出更符合你習慣的程式碼。
我的建議是維護一個 Never 規則演進日誌:
yaml 体验AI代码助手 代码解读复制代码2026-04-15 新增:Never 修改 src/.umi/ 目錄
原因:AI 把自動生成的路由配置改了,建置報錯
2026-04-18 新增:Never 在 Less 中硬編碼顏色值
原因:AI 用了 #333 而不是主題變數,切主題時全崩了
2026-04-22 新增:Never 使用 git stash
原因:多 Agent 並發時,一個 Agent stash 了另一個的改動
每一條 Never 規則背後,都是一個真實的踩坑故事。
指標 沒有 AGENTS.md 有 AGENTS.md 變化 AI 程式碼規範遵循率 ~60% 95%+ ↑ 35% AI 程式碼一次通過率 ~40% 80%+ ↑ 40% 每次手動修正時間 ~8 分鐘 ~1 分鐘 ↓ 87.5% 新人上手時間 3-5 天 1 天 ↓ 70%+ > 以上數據基於實際專案 3 週使用期間,對 50+ 次 AI 程式碼生成的人工抽檢統計。不同專案和技術棧可能有差異。
最後一個數據可能出乎意料——AGENTS.md 對新人也有用。
因為它不僅是給 AI 看的,也是一份精簡的專案開發規範。新人讀 AGENTS.md,5 分鐘就知道專案的技術棧、目錄結構、編碼規範和禁止事項。
它是專案文件的一個超級濃縮版。
專案根目錄。 和 package.json、tsconfig.json 同級。AI 程式設計助手會自動掃描專案根目錄讀取。
需要。 團隊共享的規範檔。但 AGENTS.local.md(個人偏好)應該加入 .gitignore。
已驗證:Cursor ✅ | Claude ✅ | GitHub Copilot ✅ | Windsurf ✅
在專案根目錄建立 AGENTS.md,複製本文範本,5 分鐘填好,提交。不需要改任何程式碼,不需要安裝任何工具。
如果你覺得手動寫還是太麻煩——下篇教學我會分享如何用一行命令自動生成 AGENTS.md + DESIGN.md,腳本會讀取 package.json 自動識別技術棧、UI 庫、套件管理器,5 秒搞定。
但即使不用任何工具,手寫的 AGENTS.md 也能達到 80% 的效果。
工具只是讓最後的 20% 更自動化。核心永遠是那個 Markdown 檔案本身。
你可能在想我的回答「一個 Markdown 檔案真能有這麼大效果?」是的,AI 缺的不是能力,是上下文「寫起來會不會很複雜?」6 個章節,30-100 行,5 分鐘「團隊不願意用怎麼辦?」提交到 Git 就行,團隊無需額外操作「要花多少時間維護?」初次 5 分鐘,之後每踩一個坑加一條 Never 規則> 與其每次手動修正 AI 寫的程式碼,不如花 5 分鐘告訴它規矩。
如果你按照本文的方法建立了 AGENTS.md,歡迎在留言區分享你的效果數據——特別是「規範遵循率」和「一次通過率」的變化。
也歡迎分享你踩過的坑和總結出的 Never 規則,我會整理一份社群版 Never 規則大全 👇
覺得有用?點個讚 👍 收藏一下,後面我會繼續分享 DESIGN.md 的深度用法——如何讓 AI 寫出的 UI 不再「一眼 AI 味」。