iT邦幫忙

2026 iThome 鐵人賽

DAY 18
0

為了不讓兩個 agent 同時改同一個檔案,導致後做的會把先做的蓋掉。

所以六月底那天走完整流程的 3 個任務,指揮中心沒有一次全部丟出去。那時距 7/31 上線剩不到五週,我沒有時間讓一個覆蓋事故吃掉半天。

平行處理不是「開比較多 agent」。它是排完序之後剩下來的空間——把會撞在一起的、要照順序的先處理掉,剩下的才同時開。

https://ithelp.ithome.com.tw/upload/images/20260910/20183576IMB6jsrhP5.png

  • 排批次前,指揮中心先建一份「每個檔案 → 有哪些任務會動到它」的對照,找出被 2 個以上任務改到的檔案。
  • 撞到同一個檔案,兩種解法:小改合併成一個 agent,或排進不同批次先後做。
  • 就算改的是不同檔案,也可能不能平行:一個任務要等另一個的產出,或改到了另一個依賴的東西。
  • 這張對照會不會很長,在寫 code 的時候就決定了:檔案邊界切得乾淨,大多數任務直接平行。

指揮中心先彙整一份「誰改到哪個檔案」的對照

那天的需求檔列了 11 個任務——一份清單上的 11 件工作,跟 8-Step 的「步驟」是兩回事。每個任務本來就標好「會動到哪些檔案」,指揮中心把這些讀進來、倒過來整理成一份反查:每個檔案,被哪幾個任務動到。這一步是自動的。

這 11 個任務裡,有 3 個檔案被多個任務撞到:

一個共用的確認頁    ← 4 個任務(3 個改文字、1 個加新填寫模式)
一個共用的導覽框架  ← 2 個任務(1 個改文字、1 個依身分控制選單)
一個雲端專案表單    ← 3 個任務(2 個改文字、1 個加新填寫模式)

被 2 個以上任務動到的檔案,就是不能平行的地方。

沒有這份對照,就不知道哪些任務不能同時開。 這步驟主要是避免,兩個 agent 同時改同一個檔案,後做的會蓋掉先做的。

https://ithelp.ithome.com.tw/upload/images/20260910/20183576VQmiOq1AfN.png

撞到了,兩種解法

情況 解法
撞到同一個檔案,但都只是小改文字 讓同一個 agent 一同處理。這個 agent 內部照順序改。
一個是小改文字,一個是新功能邏輯 排進不同批次:先做小改批次一,新功能用批次二再進來改邏輯。

那個被 4 個任務碰到的確認頁,就是這樣拆的:3 個文字調整合併給一個 agent 先做完,剩下那個新功能的邏輯改動排到後面的批次。

能有多少任務可以平行,多半在你排批次之前就決定了

決定在你的程式怎麼切檔案。

假設一個專案,所有申請流程的邏輯都塞在同一個大檔案。那不管這批有幾個任務,只要都動到申請流程,它們全部指向同一個檔案——對照表上全撞在一起,就要想如何多 agent 管理一個檔案。

換成另一個專案,每種功能有各自檔案、每個元件各自一個檔案。同樣一批任務,這個改這頁、那個改那頁,對照表上幾乎沒有重疊——大部分直接平行。

同一批任務、同一個指揮中心,能平行的數量差很多,差在架構。Day 10 講的「把更動範圍控制住」、還有把 spec 邊界寫清楚,紅利在這裡回收:切得乾淨,能平行的任務就多。

有一種檔案架構再乾淨也閃不掉:router、主 layout、每條流程都會經過的確認頁。這種天生被很多任務碰到,只能用前面那兩招——合併給一個 agent,或排進不同批次。

批次長怎樣

排完之後,一份分派計畫大概長這樣:

批次 1(平行):互不衝突的任務,同時開
批次 2(等批次 1 完成):依賴批次 1 產出的任務
批次 3(人確認 plan 後):需要先確認做法的新功能

六月底那天照這個結構分了幾批。平行的部分,事後估算比一件一件做省下大約四成時間——這是團隊自己前後測量的數字,不是獨立的效能測試。而且要照順序的那幾批、還有每個 agent 都要重新讀一次相關檔案的成本,都不會因為平行而變快。

Anthropic 有一篇〈Building a C compiler with a team of parallel Claudes〉,講的是更大規模的平行:它需要更嚴謹的工作結構和持續驗證,協調和成本也有上限。DAP 這種 3 到 4 個 session 的平行小得多,靠的就是這份檔案對照,不是「agent 越多越好」。(Anthropic, Building a C compiler with a team of parallel Claudes

今天可以做的:畫一張 dependency map

你的專案還沒有指揮中心幫你彙整這份對照,所以先自己畫。挑 3 到 5 個你接下來要做、可能會互相影響的任務,填一張表:

# Dependency Map

| 任務 | 讀哪些檔案 | 寫哪些檔案 | 要等誰先完成 |
| --- | --- | --- | --- |
| A |  |  |  |
| B |  |  |  |
| C |  |  |  |

填完後找三件事:

  1. 哪兩個任務寫到同一個檔案——合併,或排先後。
  2. 哪個任務的「讀」是別人的「寫」——排在那個人後面。
  3. 剩下沒被圈到的——這些才能同時做。

小結:平行是排完序之後剩下的空間

先建檔案對照、抓出衝突、決定合併還是排序、把依賴排進順序——做完這些,剩下能同時開的任務自然就浮出來了。這張對照能多短,看你的檔案邊界切得多乾淨。

順序排錯,多開 agent 只會讓覆蓋和衝突同時發生。順序排對,平行才是省時間的。

下一篇把分流(Day 17)和排批次(Day 18)合起來看:六月底那天,指揮中心第一次完整跑一遍。那天它跑通了——但整批任務的 Scenario 驗證全被跳過,沒有人知道使用者實際會怎麼操作。

參考資料


上一篇
Day 17|一批需求進來,先分流:小改直接做,新功能才走完整流程
系列文
從 DBA 自用工具到中心四個科的自動化基礎:AI Engineering 三代開發實錄18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言