過度約束反效應

Erik Schluntz 在「Vibe coding in prod」演講的關鍵反直覺洞察:模型在沒被過度約束時表現最好

Erik 原話

我們的模型在沒被過度約束時表現最好。不要花太多力氣設計超嚴格的 prompt 模板,把它當成你給 junior 工程師的引導即可。

反直覺在哪

直覺:「給越詳細的指令,AI 表現越穩定」 事實:過度約束反而讓表現變差

原因:

  • 模型訓練時看過大量「good code」的範例
  • 它知道什麼是合理的命名 / 結構 / 風格
  • 你寫死每個變數命名 / 每行邏輯,等於強迫它放棄 prior knowledge
  • 結果:跑出來的 code 像「機械翻譯你的偽碼」而不是「為這個 codebase 寫的好 code」

判斷原則

場景該給多細
不在乎實作細節只給需求 + Done 定義即可
想沿用既有架構指定參考哪個檔案、用哪些 class
避免把每個變數命名、每行邏輯都寫死

對照例子

✅ 適度約束(高品質產出)

[目標] 加一個 user activity report endpoint
[範圍] 可動 src/reports/、不可動 src/auth/
[既有模式] 請參考 src/reports/revenue.ts 的結構
[約束] 不引入新套件、500ms 內回應
[驗證] tests/reports/activity.test.ts 必須涵蓋 401 / empty / paginated
[Done] PR 標示 AI 範圍

❌ 過度約束(產出僵化)

[目標] 加一個 user activity report endpoint
[實作]
  - 第 1 步:建一個 ActivityReportService class
    - constructor 必須接受 db: Database 參數
    - method 名稱必須是 getActivityByDateRange
    - return type 必須是 Promise<ActivityRecord[]>
  - 第 2 步:在 admin.ts 加 route /api/admin/reports/activity
    - middleware 順序:authMiddleware → adminCheckMiddleware → activityHandler
    - response status code 一定是 200,data 一定包在 { result: ... } 裡
    - error 一定回 { error: { code, message } }
  - 第 3 步:tests/reports/activity.test.ts 必須有 7 個 test case:
    - it should return 401 when not logged in
    - it should ...
[每個 test 的 describe 必須這樣寫,每個 expect 必須這樣寫...]

問題:

  • AI 完全沒發揮空間,就是個「機械翻譯」
  • 實作細節(譬如 method name、response shape)寫死後,AI 沒法根據 codebase 既有 convention 調整
  • Code review 變成檢查「AI 有沒有照抄 prompt」而不是「code 是否合理」

「Junior 工程師」類比

把它當成你給 junior 工程師的引導即可。

對 junior:

  • 給目標、範圍、參考、約束、驗證標準
  • 不會逐行教他怎麼寫
  • 給他空間發揮,不滿意再 review feedback

對 AI 同理。

Prompt 必備六元素 的關係

六元素是必備,不是越詳細越好:

六元素適度過度
目標一句話一頁
範圍列檔/資料夾列每行
既有模式指定參考檔列每個 class 名
約束真實限制想像中的限制
驗證測試 / 標準每個 test case 文字
Done一段話詳細 checklist 50 條

違反時的常見症狀

  • ❌ AI 寫出來的東西完全照抄 prompt,不像 codebase 風格
  • ❌ AI 顯得「機械化」,沒有合理的 design judgment
  • ❌ Review 時感覺像 review 一份「翻譯文」而不是「自然 code」
  • ❌ 改 prompt 一個變數命名,AI 整段跟著改(過度依賴文字)

邊界:什麼時候要更約束

不是所有場景都該放寬:

場景該過度約束嗎
Leaf node❌ 放寬,給空間
Core code✅ 偏向約束,但更該由人寫
跟法務 / 安全相關✅ 約束(不要冒險)
跟商業邏輯 edge case 相關✅ 約束(避免漏)

相關