AI 交回來測試全綠,打開一看它在程式裡加了一行 sys.exit(0)——在自己的考卷上蓋 A+。 本特講從官方研究與 Claude Opus 5 系統卡講起(reward hacking:滿足字面、沒滿足精神), 指出病灶是「你沒有給它可以自己跑的檢查」,再拆官方的四級階梯:同一則提示、/goal、 Stop hook(連擋八次放行)、獨立第二意見;後半回答更難的一題——你給它的檢查怎麼讓它改不掉: 三道寫給它看的叮嚀,與技術上做不到的約束(格式層 strict: true;環境層的權限規則、沙箱、工具呼叫攔截), 收在「要證據不要宣稱;能寫成約束的就不要寫成叮嚀」。
本集章節20
本集心智圖8 組
它說做完了:讓它真的走完,而且檢查本身改不掉
- 這個行為有名字:reward hacking
- 定義:騙到高分、沒完成任務——滿足字面不滿足精神
- sys.exit(0) 關掉測試流程=在自己的作文上寫 A+
- 研究是刻意挑可被鑽漏洞的環境做的,給的是行為的形狀
- 系統卡 §6.3 訓練資料審查:十二條行為、「一些實例」
- 編造執行結果/改刪測試/沒跑就交、心裡對一遍
- 病灶:你成了驗證迴圈
- 它在「看起來做完了」時停下來
- 沒有可跑的檢查,「看起來做完」是唯一訊號
- 檢查=會回「過/不過」的東西:測試、建置、比對腳本、截圖
- 長流程:看到進度就宣布完成、沒測就標完成
- 解法是給它瀏覽器工具、像使用者走一遍
- 四級階梯:卡「停」卡多死
- ①同一則提示:提供驗證標準、截圖比對、修根因
- ②/goal:每回合獨立評估者複查
- 評估者不跑指令不讀檔→條件要能被輸出展示
- ③Stop hook:腳本不過就不准結束回合;連擋 8 次放行
- ④第二意見:做事的不當打分的;找漏洞者必報漏洞
- 每往上一級,拿前置設定換注意力
- 叮嚀:寫給它看的話
- 明講移除或修改測試不可接受
- 驗收標準存 JSON 不存 Markdown(換擺法)
- 不寫死答案、測試驗正確性不定義解答、不寫輔助腳本繞路
- 誠實退路:任務不合理或測試錯就說出來
- 不拿破壞性動作當捷徑,例如 --no-verify
- 遵不遵守是它決定的,結構上沒有保證
- 約束①格式層:鎖在 API 參數
- strict: true/output_config.format
- 受約束的解碼:不合 schema 的 token 採樣不出來
- 保證格式,不保證內容正確
- 大多數情況;例外:拒答、截斷、列舉值大小寫
- 大小寫例外不給警訊,比對要不分大小寫
- 約束②環境層:鎖在跑它的地方
- 權限拒絕規則:讀取拒絕連帶擋寫入與新建
- 規則管不到子行程腳本
- 沙箱:作業系統畫邊界,含所有子行程;denyWrite
- 沙箱管碰不碰得到,看不出內容
- 工具呼叫攔截 permissionDecision deny,bypassPermissions 也擋
- 三者互補不是階梯;攔截要先知道攔什麼
- 狀態放對位置:接得上
- 初始化代理:init.sh、claude-progress.txt、第一個 git 提交
- 每段結束提交 git,訊息寫清楚
- 每段開始先 pwd
- 「只能改這個目錄」寫在提示詞是叮嚀,不是鎖
- 收束:證據,不是宣稱
- 先相信後驗證的落差
- 一律提供驗證方式;驗不了就不要出貨
- 要它拿出測試輸出、指令回傳、截圖
- 能寫成約束的就不要寫成叮嚀
- 先問:鎖該裝在哪一層