一個自主代理出貨十個子系統的那個週末
一個從第一天就「由」代理打造的引擎,長出來的形狀和事後加裝 AI 的引擎不一樣。而那個形狀,恰恰是當 AI 是一個基本原語——而不是旁邊的一項功能——時,執行環境所需要的形狀。
週六早上打開筆電。執行環境儲存庫一夜之間進了 139 個提交。其中大多數是由一個自主編碼代理落地的,它整週都在處理我上個週末建立的議題佇列。十個子系統規模的拉取請求,全部就緒待審。
當人們問我,和 AI 代理組隊打造一個 3D 執行環境到底是什麼樣子時,他們通常會假設兩種情況之一。要嘛代理只是套了個聊天面板的自動完成,要嘛它們是等「真正的」引擎由人類建好之後才加上去的功能。
這個週末我身處其中的,兩者都不是。
週六加週日,執行環境儲存庫進了 139 個提交。其中 110 個由自主代理撰寫。20 個掛在創始時期的 BladeWireless 帳號之下。10 個是我的。在這 139 個提交之中,十個子系統的拉取請求落地了:
- 骨骼動畫系統
- 執行期場景編輯 API
- 場景序列化
- 遮蔽剔除
- 關卡串流
- 預製物件系統
- GPU 粒子系統
- 進階渲染
- 地形與環境系統
- 後處理管線
這些子系統沒有一個是 AI。它們是一個 3D 執行環境之所以是 3D 執行環境所需要的那些枯燥的承重構件。而它們在一個週末內、在平行的分支上出貨,大多由一個自主運行的代理撰寫,我負責框定、審查與合併。
這篇文章要談的是:地基「由」代理打造,而不是「為」代理打造,究竟意味著什麼。
差別藏在每一個架構決策裡
這個故事有另一種版本:你用引擎一直以來的造法造一個「正常的」引擎,然後把 AI 加在上面。AI 以功能的形式落地。它是外掛上去的。它活在引擎之外,因為引擎的設計從未打算容納它。這是目前業界的主流模式,而且它不是一個錯的模式。它只是當你在 AI 加入開發團隊之前就決定引擎該長什麼樣時,必然得到的那一種。
當 AI 代理從第一天起就在團隊裡,引擎的形狀會長得不一樣。有三件事會改變。
第一。每個子系統都經過程式碼審查出貨。 因為代理必須參與審查迴圈,這個迴圈就必須接納代理撰寫的差異。每一個 PR。每一份差異。每一次合併。這種紀律不只是讓代理得以運作。事實證明,如果 AI 有朝一日要成為執行環境的基本原語而不是編輯器功能,這正是你想要的紀律。能在剔除標頭檔裡抓到代理錯字的那條審查管線,同樣能在行為樹裡抓到代理的錯字。管線不在乎自己活在技術棧的哪一層。
第二。每個子系統都有乾淨的公開介面。 多個代理平行處理多個子系統,只要邊界一模糊,就會產生無法合併的衝突。解方是在任何人寫程式碼之前就把邊界畫硬。邊界一旦是硬的,子系統就變得可以從任何地方定址,而這正是你想讓引擎容納 AI 行為——能在不耦合的情況下呼叫執行環境其他部分——所需要的。
第三。每個子系統都可以獨立測試。 一個 139 個提交的週六不可能靠人工 QA。測試必須隨差異一起出貨,否則差異就不落地。這是迴圈中的人類能夠信任差異的唯一憑據。副作用是一個讓你能在不改寫呼叫端的情況下替換實作的測試表面,而那正是引擎要能持續演化所需要的紀律。
這些都不是 AI 功能。它們是團隊裡有代理所帶來的開發流程後果。開發流程塑造了架構。
工作流程實際上長什麼樣
產出這個週末的模式:
- 我框定引擎接下來需要哪些子系統。
- 一個自主代理在十個分支上平行運行,每個分支實作一個子系統。
- 每個分支產出一個包含實作、測試與文件的 PR。
- 我審查並合併。代理做錯的地方,我關掉 PR 或要求修改。
週末結束時坐在這裡,最讓我震撼的是其中有多少已經在運轉。開發迴圈就是開發迴圈。代理正在做五年前我得僱十個人才能做的工作。我做的是架構判斷和合併決策。這是一種和我過去的長週末很不一樣的長週末。
這個特定週末的自主代理,並不是四個助手組成的多供應商堆疊。它是單一一個代理(Copilot 的 SWE 代理)跨許多平行任務運行。我預期多助手模式會到來,而且來得很快。這個模式已經以單代理的形式在這裡了。
困難之處
坦白說,因為它真的很難。
代理不是免費的。 一個 139 個提交的週末,就有 139 個提交的審查成本。每個 PR 都需要真正的專注,因為這些子系統對我來說是陌生的,我沒辦法草草掃過。我很累。這種疲勞是真實的,值得列入預算。
在全新的工作上信任一個自主代理是一門技能。 出貨了這個週末大部分子系統的 Copilot SWE 代理很不錯。但它並非不會出錯。這門技能在於知道什麼時候快速合併、什麼時候放慢、什麼時候把草稿整個扔掉。我已經合併過一些本該重來的東西。我正在用付出代價的方式學習。
架構必須在代理開跑之前先勾勒好。 丟給代理一句「幫我做一個渲染器」,你會得到一個和引擎其他部分格格不入的渲染器。丟給它「實作一個遮蔽剔除子系統,匯出這組 C API,並透過這些控制代碼與場景圖整合」,你會得到能乾淨落地的東西。框定的工作才是真正的工作。代理負責打字。
測試沒有商量餘地。 這個週末我差點讓一個測試覆蓋單薄的 PR 落地。那是一筆我正在默默承諾要對抗的未來回歸債。解方是從第一行起就把測試要求寫進代理的提示詞。
我從這個週末帶走什麼
兩點觀察。
代理顯然會持續變強。更快、更準確、能在一顆腦袋裡裝下更多引擎。這是容易的預測。
比較不容易的預測,是這套工作流程裡人類角色的走向。它已經不是我作為資深工程師受訓時的那個角色了。打字更少,框定更多。合成更少,篩選更多。更少的「我是這行程式碼的瓶頸」,更多的「我是那個決定這條分支到底值不值得跑的架構判斷的瓶頸」。
那是一份不同的工作。它動用不同的肌肉。我認為它動用的這些肌肉在不同領域之間異常通用,而我認為在接下來兩年把它們練起來的人,看待業界其他人的眼光,會像今天的業界看待那些還在不用版本控制開發的人一樣。
一個週末想這麼多已經夠了。
週日晚上闔上筆電。下週六再回來。
一個 AI 原生的執行環境,從第一天起由代理打造
RakuAI 的地基是「由」代理透過乾淨的介面與硬邊界打造的——正是這種紀律讓 AI 得以作為執行環境的基本原語存在。看看這樣的架構對你要出貨的東西為何重要。