~/VibeHandbook
免費 PDF

19 · 03

給任務劃定範圍,讓它無法亂跑

自主智慧體以一種特定的方式失敗:它漂移。你要一件事,它「熱心地」重構了另外三件,碰了你從未提及的檔案,帶著一份你讀不懂的 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 ──▶ 停止並報告                   ─┼─▶ 你
 └───────────────────────────────────────────────────────────────┘

三樣東西讓這份簡報難以讓它跑偏。約束在智慧體可以觸碰的檔案周圍築起一堵牆。完成判據是任何人都能執行的命令,而不是一種感覺。而最後那段給了它停下來發問而非亂撲騰的許可——正是這一點防止了那種慢鏡頭的災難:智慧體「修」了二十分鐘,把程式碼樹留得比它接手時還糟。

真正的柵欄是測試。能執行自己測試的智慧體擁有一個緊湊而誠實的反饋迴路,多半會留在其中;無法檢查自己工作的智慧體會信心十足地把壞掉的東西遞給你。如果你從本章只帶走一個習慣:給智慧體一個驗證自己的途徑,並把通過它當作完成的定義。

想離線閱讀?

免費下載整本書的 PDF 或 EPUB。