不要追求 AI 多快生出 code,要追求第一次就對。
關於 Harness Engineering 的 First-pass Acceptance Rate — 怎麼讓 AI 第一次就給你期望的結果。
最近為了做 autonomous agent 的研究,已經非常喜歡 Opus4.6 的表現,但我真的不想一直去注意 API key 的費用,所以就去研究了一下,我們現在用的 Claude Code setup-token 底下到底是怎麼運作的。
秉持著研究的精神,既然「龍蝦」可以透過 Session Token 去使用 Claude 的訂閱,那它底下應該有一些運作原理蠻值得深入研究的。即使這會違反 TOS(服務條款),可能也值得看,因為在預算有限的情況下,還是需要一些必要的手段讓我們做更多實驗(在 AI 放大資本主義市場的循環下,不想讓工程變成只有有錢人才玩得起..)。
底下的關鍵技術就是 libGDX 作者 Mario Zechner 的 badlogic/pi-mono 的 packages/ai,主要有四步:login 拿 token → 存起來 → 過期自動 refresh → 偵測到 sk-ant-oat 前綴就切 Bearer auth。Token/Storage/Refresh 三層完全分離,可以搬到任何環境跑。
這不是要鼓勵去用,但如果是做實驗的話,這是目前預算控制最務實的方式。之前聊到連 web search 都可以偷渡 — CC 內建 web search,加上 -p flag 做 non-interactive 執行,原本要另外花錢買 Web Search API Key 的事,訂閱費裡就包了。
好吧,一整個客家精神在用工具…
這次 survey 的過程本身讓我有一些 takeaway
Opus 4.6 第一次跑的時候,完全沒有找到怎麼讓 OAuth 變成類 API key 的用法,一直說「server 400、只有 Haiku 可以用」什麼的,至少 reject 我三次。
既然我都知道 pi-mono 可以用了,實務上就一定做得到才對,所以我直接把 pi-mono 的關鍵檔案跟它說(它自己就會 web search 去找了)。我明確要求它去讀特定幾支檔案,加上我自己也先掃過 code,它就有辦法幫我建構出我要的東西。
這就帶出一個關鍵問題:如何給予有效的 Context?我後來想到,有可能是那個 session 已經變得非常複雜,產生了 Context Pollution,Context Window 的效能跟著下降。
李宏毅教授之前講過一篇論文,提到 Attention Space 其實跟人一樣:
- 我們通常只記得最開始和最近發生的事
- 過程中的細節很多人會忘記,甚至會塞爆你的 context
First-pass Acceptance Rate
Martin Fowler 最近發了一篇《Patterns for Reducing Friction in AI-Assisted Development》,裡面提出一個指標 — First-pass Acceptance Rate,第一次就從 AI 拿到能用結果的機率。
他把一般人用 AI 的失敗模式叫做 Frustration Loop:
- Generate
- Review → “Not quite right”
- Regenerate → “Still wrong”
- Fine. Give up
「不要追求 AI 多快生出 code,要追求第一次就對」
打破這個挫折循環,不只是程式碼,生圖、生影像、生文案都是。因為我們講的是「工程」 — 你只要把第一步做對,後面 AI 幫我們放大,會把剩下的做完、做到好。
那問題就變成:即使你已經知道答案了,你要怎麼做,才能讓 AI 第一次就給你正確的資訊?這就是 Context Engineering 在做的事:
- 瞭解各領域背後的原理、底層邏輯
- 你知道怎麼下 prompt
- 你知道怎麼下 prompt,所以 AI 第一次就能產出你要的東西
這就是 Harness Engineering:
- 能夠明確指出底層的邏輯
- 讓 AI 朝著你想要的方向去做
我們可能會想 — 「那我不就自己看 code 就好了嗎?」事實上,在看了 code 並指引它之後,AI 幫你把全部邏輯串接起來省下的時間,是手動處理的 5 倍、10 倍起跳。
底下的邏輯其實還是回到程式碼的閱讀,以及瞭解背後運作的原理,這樣才能夠「讓 AI 正確且有效地在第一次就產出你想要的東西」,最後讓這些成果擴大到整個開發流程。
落地怎麼做?
我會問問自己:
“What is the goal?” “Where is the goal aiming for?”
(這不是心靈雞湯、創業書常常出現的心法嗎?!🤣
在我開始跟 AI 聊之前,明確地瞭解我的目標到底在哪裡;當你設定好這個目標之後,你就會知道你要跟它說什麼,讓它去達成這個目標。僅此而已。
是說…當你看到 Coding Agent 一路幫你寫 code 寫了 50m40s 都沒停下來,然後你在旁邊彈吉他唱歌,一週工作四天、三天放假,把時間拿去陪家人、重訓,好像…還不錯
