給任務劃定範圍,讓它無法亂跑
自主智慧體以一種特定的方式失敗:它漂移。你要一件事,它「熱心地」重構了另外三件,碰了你從未提及的檔案,帶著一份你讀不懂的 diff 回來。修法不是更聰明的智慧體——而是更緊的簡報。
一個好的自主任務有四個部分:清晰的目標、明確的約束、具體的完成判據,以及智慧體自己能執行的護欄。護欄是最重要的部分,因為它是智慧體無法在你不察覺的情況下翻越的柵欄。
Goal: Make the failing tests in tests/checkout/ pass.
Constraints:
- Only edit files under src/checkout/. Do not touch src/auth/,
the database schema, or anything in config/.
- Do not add new dependencies.
- Do not change the tests themselves — the tests define correct behavior.
Done when:
- `npm test tests/checkout/` is fully green.
- `npm run typecheck` passes.
- `git diff --stat` shows changes only under src/checkout/.
If you get stuck after two real attempts, stop and report what you
tried and what's still failing. Don't paper over a failure to make
the suite go green.
這份簡報之所以管用,是因為它把智慧體關進了盒子裡:約束給它能碰的東西築牆,完成判據是它能執行的一條命令,而驗證迴圈讓它保持誠實:
┌────────────────────────── 範圍圍欄 ───────────────────────────┐
│ 可編輯: src/checkout/ │
│ ✗ 禁區: src/auth/ · db 架構 · config/ · 測試 │
│ │
│ ┌─────────┐ 編輯 ┌──────────────┐ │
│ │ 智慧體 │──────────▶│ src/checkout/ │ │
│ │ │◀──────────┤ │ │
│ └────┬────┘ 跑測試 └──────────────┘ │
│ │ │
│ ▼ npm test + typecheck │
│ ┌─────────────┐ green ──▶ 完成 │
│ │ 驗證迴圈 │ red ──▶ 重試 (最多 2) │
│ └─────────────┘ stuck ──▶ 停止並報告 ─┼─▶ 你
└───────────────────────────────────────────────────────────────┘
三樣東西讓這份簡報難以讓它跑偏。約束在智慧體可以觸碰的檔案周圍築起一堵牆。完成判據是任何人都能執行的命令,而不是一種感覺。而最後那段給了它停下來發問而非亂撲騰的許可——正是這一點防止了那種慢鏡頭的災難:智慧體「修」了二十分鐘,把程式碼樹留得比它接手時還糟。
真正的柵欄是測試。能執行自己測試的智慧體擁有一個緊湊而誠實的反饋迴路,多半會留在其中;無法檢查自己工作的智慧體會信心十足地把壞掉的東西遞給你。如果你從本章只帶走一個習慣:給智慧體一個驗證自己的途徑,並把通過它當作完成的定義。