並行執行代理
本指南說明如何同時執行多個代理,而不讓它們互相覆寫對方的工作。
隔離的單位是空間,而不是代理
標題為「隔離的單位是空間,而不是代理」的章節當工作在某個空間中開始時,Control Center 會為該空間中每個已註冊的儲存庫,在該空間自己的根目錄下佈建一份寫入時複製檢出,並使用派生自工作區分支範本的分支。空間中的每個代理接著會取得自己的覆蓋層工作目錄——但這些覆蓋層共用該空間的 repos/ 目錄。
因此:
- 不同空間中的兩個代理在不同的檢出、不同的分支上工作。這才是真正的隔離。
- 同一空間中的兩個代理在同一份檢出、同一個分支上工作。它們的覆蓋層路徑不同,因此派送路徑鎖(只有在兩次執行要求完全相同的工作目錄時才會將它們串行化)也不會將它們串行化。它們可能同時寫入同一批檔案。
由此得出的規則是:每個並行任務使用一個空間。
並行執行任務——使用不同的空間
標題為「並行執行任務——使用不同的空間」的章節- 用代理 A 開啟一個空間,並向它傳送一項任務。
- 用代理 B 開啟第二個空間,並向它傳送另一項任務。
- 兩者都會立即派送,各自在自己的空間檢出、自己的分支上執行。
只要代理會編輯檔案,就應採用這個做法。
在單一空間中協作——使用多個提及
標題為「在單一空間中協作——使用多個提及」的章節在單一空間中,@提及多個代理:
@alice refactor the auth module. @bob review what alice lands.兩個代理會並行派送,並以傳送者為標記串流到同一個空間。由於它們共用該空間的檢出,這種做法適用於協作——一個負責寫、一個負責讀,或兩個代理對同一棵程式碼樹進行推理——而不適用於兩項各自獨立的編輯。
從管線扇出
標題為「從管線扇出」的章節內建的 pr_review 範本是隨附的扇出範例:多個審查節點由同一個觸發器並行執行,再由 Consolidate (join) 節點將它們的發現彙整成一份報告。從管線畫面執行它,每個審查者都會並行派送。
當你新增或連接步驟時,管線編輯器會隱藏終端哨兵,並改寫其接線,讓它等待每一個仍活動的匯點,因此你自己畫出的分支確實會執行。
觀察它們執行
標題為「觀察它們執行」的章節可觀測性 → 即時(側邊欄底部 → 可觀測性,然後是即時分頁)會顯示此工作區的代理名冊,每秒重新整理一次:狀態(執行中 / 閒置 / 已停駐 / 已中止)、每個代理正在做什麼、它最近一次執行的 token 數與成本,以及可終止執行中程序的終止控制項。選取某一列會停靠出即時逐字稿抽屜。
設定 → 工作區 → 代理顯示同一份名冊,但採用另一套以需要關注為優先的狀態詞彙,這套詞彙衍生自每個代理的執行歷史——執行中、已封鎖、失敗、閒置、從未執行——並經過排序,讓任何需要注意的項目浮到最上方。每個代理的日誌分頁保存它自己的執行歷史。
這兩個介面都限定在目前作用中的工作區範圍內。
處理衝突
標題為「處理衝突」的章節跨空間時,每個空間都在自己的分支上,因此當你合併第二個 pull request 時,衝突會以一般 Git 合併衝突的形式出現。像處理任何合併衝突那樣解決它即可。
在單一空間內部,既沒有分支邊界,也沒有鎖:代理正在即時寫入同一批檔案,落敗的一方只會被直接覆寫。如果你發現自己想讓兩個代理在同一個空間中編輯,請改為把工作拆分成兩個空間。
無論採取哪種方式,都可以這樣減少衝突:
- 為每個代理劃定明確的範圍——不同的檔案、不同的模組。
- 派送前先用程式碼圖檢查某項變更會觸及什麼。請參閱用程式碼圖搜尋程式碼。
- 及時審查並合併每個代理的 pull request。
資源考量
標題為「資源考量」的章節每個執行中的代理都會消耗:
- 一份空間檢出——在寫入時複製可用時,磁碟佔用微乎其微;在 Windows 上則是一個
git worktree。無法使用 reflink 的檔案系統會讓佈建失敗,而不是改為複製。 - 伺服器主機上的一個程序
- 模型 token,會依代理累加
成本會匯總到可觀測性 → 洞察。請注意,一般的互動回合沒有花費上限;設有上限的那兩道指令請參閱管理成本。