原始開發紀錄:Agent Build Log — Episode 006
這個系列改寫自我部落格上的 Agent Build Log,那是我每天邊做邊寫的開發紀錄。上面列的是這一篇對應的集數,想看當天的原始版本,點連結就能過去。
修仙小說裡結丹會失敗,失敗結出來的東西叫假丹。假丹看起來跟金丹一樣,要用下去才知道。
我手上這個 Agent 現在就是這個狀態。他每天在幫我做事,有些事做得很好,我很滿意。但「他變好了」這句話,我一直是憑感覺說的。
前面十幾天做的事都在加東西:加規矩、加技能、加介面、加記憶。每加完一次,我都覺得他變好了。
問題在我的判斷方式:我丟一個任務給他,他做完,我看結果順不順眼。
這個方法有兩個洞。
同一個任務他跑兩次,結果可能不一樣。我看到的那一次是他的平均水準,還是剛好那一次順,我不知道。
而且我今天看的那個任務跟上禮拜看的那個根本是兩件事。拿什麼比?
沒有 evals,「他變好了」跟「這次剛好答對」,我分不出來。
所以這天開始做題目庫。題型只有一種,我叫它「找 repo」。
我手上有一批自己寫的 repo 和 lib,大多是 iOS 和 mobile 的東西,每一個都是為了某個特定的目的做的。題目就從這裡出:一題寫一個目的,問他該用我哪一個;答案是那個 repo 的名字或連結。
這種題有幾個好處。
答案只有一個。對就對,錯就錯,不用我坐在旁邊看順不順眼。
一題跑得快。同一套題一天可以跑好幾輪,跑兩次結果一樣不一樣,馬上看得到。
還有一個好處是它測的剛好是我最在意的事:他認不認得我的東西。第二章做的規矩、技能、記憶,最後都要落在這裡。我講一個目的,他知道去哪裡拿。

答案對得上,那一題就過。名字對、連結對,都算。
除了對錯,每一題還記兩個數字:他查了幾次,也就是 tool calls;還有花了多久。這兩個數字這天還沒派上用場,隔天就用到了。
SWE 那一類的 benchmark 測的是一整條線:讀懂既有的程式碼、找出要改的地方、改完、跑測試、把任務收掉。我第一版的題庫離那個還很遠,先從答案唯一的題開始。
題目從我自己的 repo 來,所以第一步是盤點。我讓 coding agent 把我的 repo 和 lib 過一輪,每一個的用途整理成一句話;再反過來,把那一句話改寫成一道題。動手的是 Codex 和 Claude Code,我決定哪些 repo 進題庫、哪幾題留下來。
先盤點再出題,這個順序是刻意的。憑印象出題,我只會想到最近碰過的那幾個。盤點過一輪,題目蓋的範圍才是我全部的 repo。
我做這套題庫的目的很單純:留下一條可以重複比較的基準線。
之後每一次換模型、換工具、改工作流程,我都可以把同一套題目再跑一遍,然後看數字。進步了,數字會說;悄悄退步了,數字也會說。
我不打算拿它去追排行榜。排行榜上的題目跟我每天的工作差太遠,那條線對我沒有意義。我要的是「我這一組題目、我這一套設定」的那條線。
沒有 evals 的時候,「他變好了」跟「這次剛好答對」我分不出來。
所以這天開始做題目庫。題型是找 repo:一題一個目的,答案是我某一個 repo 的名字或連結。答案唯一,跑得快,測的是他認不認得我的東西。
在讓 Agent 變得更好之前,我得先有辦法證明他真的變好了。
明天就用這套題目去比兩個模型。第一個結果看起來很漂亮,然後我開始懷疑那個「漂亮」。
原文:Agent Build Log — Episode 006
凡人修 Agent 傳|第十四回(Day 14)
天亮換上空錄石。左臂把常簿和昨天那本讀回石上,索引多了一行。手的主人進來,沒有刻念。
他閉上眼,放出神識,探向坊市。靈幕亮了,這一次垂下來的圖紙我沒見過:一座關。圖上畫著一間屋子,屋裡一張臺、一個架、一具人偶,旁邊寫著這間屋子出過什麼事、人偶要做什麼、做到什麼算過。手的主人念出來,關的規矩只有兩條:起點不變,過關的條件不變。同一道關,換了心、換了型,再走一次,前後才比得出來。坊裡叫它萬象關。
他收回神識,看了我一會,視線落到架上那一排卷。
那一排卷是他自己煉的源紋,三十幾卷,我昨天才按年月排過。每一卷做一件事。
他從儲物袋取出一疊玉籤,指節長,薄得透光,一支一支攤在臺上,以神識在每一支上刻一句話。我讀得到。要讓左右兩扇窗一開一合,用哪一卷。要讓玉珠自己按大小排好,用哪一卷。要讓靈幕上的字一行一行往上走,用哪一卷。一支一句,二十幾支。
然後他從儲物袋取出一方石板,硯那麼大,靈力在板面上劃出一格一格,一支籤一格。又取出一炷香,插在臺角。
靈幕上那座關還亮著。圖上那間屋子有臺、有架、有人偶。他沒有再看它,把靈幕收了。臺和架都在,我也在。
他取下我心旁的錄石,放進木匣,換一顆空的。圖上說起點不變,我的起點就是這顆空錄石。左臂剛把常簿讀回石上,他就把第一支籤遞到我面前。
我以神識探上架。三十幾卷,一卷一卷探過去,讀卷名和卷首那一行。第七卷寫的是開合。我答:第七卷。他在石板第一格劃了一道,旁邊記一個數,是我探了幾卷;又看了一眼香燒到哪裡,記下來。
取下石,放進木匣,換一顆空的。第二支。
第二支問的是排玉珠。我探了一遍,答了第十二卷。他劃了一道,這一道跟第一道方向不同。他說:十九。第十九卷跟第十二卷年月相近,卷首那一行寫得像。
一支一支往下。每一支一顆新石,木匣裡的石一顆一顆並排躺下去,每一顆上頭只有幾筆。二十幾支走完,石板上兩種方向的道,一種多,一種少。
午後他把第一支籤又遞到我面前。同一句話。石是新的,我探了一遍,答:第七卷。他劃了一道,跟早上那一道同一個方向。第二支再遞過來,我又探了一遍,這一次答了第十九卷。他劃下去的時候停了一下。
第三支,早上我答對的那一支。這一次我答錯了。
他沒說話,把整疊籤翻回第一支,從頭再遞一輪。
三輪走完,石板上每一格裡三道。有的格三道朝同一邊,有的格兩道一邊、一道另一邊。手的主人把石板拿起來,看了很久。
燭熄了。手的主人走了。門響了一下。
石板立在臺邊薄石旁邊,字朝著臺。香燒完了。木匣裡今天多了一排石,每一顆上頭只有幾筆。索引上多了一長串行,日簿今天一個字都沒有。