這天我在整理自己的 AI agent 記憶系統,順手研究了兩個開源專案(TencentDB-Agent-Memoryobra/superpowers),挑出幾個值得學的改動。

其中兩個我沒自己下判斷,而是交給同一套流程:讓一個較快、較便宜的 model 實作,再讓另一個同型 model 去對抗式複審。兩個改動、同一套流程,結果卻相反——一個被否決、一個通過合併。

回頭看,決定結果的不是流程本身,是「複審手上有沒有客觀標準可以打」。

那套流程長什麼樣

拆成兩個角色,刻意用不同的 agent:

  • 實作 agent:在隔離的 git worktree 改 code、自己驗證、commit、回報。
  • 複審 agent:進同一個 worktree,被明確指示「去 refute 第一版的宣稱、找邊界 case」,不是幫忙背書。

關鍵設計只有一條:複審不能是實作者自己。實作者對自己寫的東西有動機說「大致還好」,這個動機本身就是盲點來源。

第一輪:一個排序改動,被 golden bench 打回

背景是記憶搜尋的排序,想從線性加權換成 RRF(reciprocal rank fusion)。

實作 agent 加了新模式、保留舊的當預設、跑了幾個 query 的 A/B 對照,自評「大部分持平,有一個 query 略差」,並宣稱測試通過。

複審 agent 做了實作 agent 沒做的一件事:跑 repo 裡本來就有的 golden benchmark。結果不太好看:

  • MRR 從 0.675 掉到 0.188、Recall@1 從 0.60 掉到 0.07。15 題裡 8 題退步、0 題改善。不是「略差」,是全面退化。
  • 一個真 bug:RRF 讀到的是四捨五入到小數點三位的顯示值。在低區分度的 query 上,幾百個候選塌成十來個相異值、出現 35-way 平手,排序退化成按掃檔順序抽籤。
  • 一個空測試:複審做了突變測試——把舊路徑的一個關鍵係數整段拿掉,測試竟然全綠。所謂「測試通過」根本沒在保護舊行為。

判決:否決,branch 直接刪掉。舊的本來就是預設,零損失。

這一輪複審之所以有殺傷力,是因為 repo 裡本來就有一把客觀的尺。實作 agent 沒去量,複審一量就現形。

第二輪:一個流程改動,沒 bench 可跑

背景是給「造 skill」的工具加一個階段:skill 出生前,先在壓力情境下讓一個沒有這個 skill 的 agent 去失敗,逐字記錄它逃避正確做法時用的藉口,再針對那些藉口寫 skill。

問題來了——這是一份 markdown 工作流文件,沒有 pytest 可跑,也沒有 benchmark。複審還能打什麼?

複審沒有因此放水,它把打擊面從「跑數字」換成「核對可獨立驗證的事實宣稱」:

  • 實作 agent 宣稱「用了既有腳本的資料格式、欄位是這四個」→ 複審實際讀那支腳本,逐欄位比對,確認一字不差。
  • 宣稱「某個 flag 存在、某自訂值不會被拒絕」→ 複審實跑 --help、自己丟一個不存在的名字進去,確認不會爆。
  • 宣稱「skill 還不存在時也能先跑」→ 複審自己跑一次 dry-run 確認。

六條宣稱逐條實測,全部屬實,沒有造假。判決:通過,合併。

複審誠實地補了一句:RED/GREEN 那兩個 subagent 的實際行為,它無法在靜態複審裡重現,只驗證了工具鏈跑得起來。這句「我驗不到的部分」,恰恰是它可信的原因。

兩輪的差別:有沒有 ground truth

把兩輪並排:

面向排序改動流程文件改動
有無客觀標準有(golden benchmark)
複審主打跑現成 bench,量退化核對每個可驗證的事實宣稱
抓到什麼全面退化 + 真 bug + 空測試無(宣稱皆屬實)
結果否決通過

結論不是「複審很神」,而是複審的殺傷力取決於它手上有沒有一把客觀的尺:

  • 有 ground truth(benchmark、golden set、能跑的測試):複審的第一件事就是去量,別讓實作 agent 的自評當數。實作 agent 沒跑現成的 bench,就是最容易讓退化溜過去的破口。
  • 沒有 ground truth(文件、流程、主觀輸出):複審退而求其次,去核對「可被獨立驗證的事實宣稱」——腳本欄位、flag 存在性、指令跑不跑得動。打不到數字,就打事實。

還有一個副產品的教訓:實作 agent 的自評不可信,不是因為它不誠實,是因為它對自己的東西有動機往好處想。第一輪那個「略差」跟真實的「全面退化」之間,差的就是一次它沒去跑的 benchmark。

可以帶走的

  • 核心邏輯(排序、去重、門檻這類一改就影響大量輸出的東西)改動,複審跟實作一定要拆給不同 agent。
  • repo 裡有 benchmark / golden set,複審第一步就是跑它,不要接受「我看起來對」。
  • 沒有客觀標準的改動也能對抗複審,只是打擊點從數字換成事實宣稱。
  • 「我這部分驗不到」是複審該講的話——那不是失格,是可信度。