所有入門單元免費開放 · 課程內容持續更新中

讓多個 Agent 平行工作

一次只帶一個 Agent,大部分時間都在等。這堂課認識兩種平行的方式:在同一個對話裡派出子代理分頭調查,以及同時開好幾個 Agent 各做一件事;更重要的是學會判斷,什麼工作適合拆、什麼工作拆了反而更亂。

第 7.1 堂約 15 分鐘

在前面的單元,你已經學會和一個 Coding Agent 合作:先寫規格、給它專案說明檔、讓它寫測試跑測試。你可能也發現了一件事:Agent 在工作時,你大多在等。

這個單元要往前跨一步:從「帶一個 Agent」變成「帶一個小團隊」。五堂課會一路談到平行工作、獨立工作區、自動檢查、大型修改,最後是成本控管。這一堂先打基礎:怎麼平行,以及什麼時候不要平行。

為什麼要平行?

有兩個理由:

  • 省時間:三件互不相關的事,與其一件一件排隊,不如同時進行。
  • 保持專注:還記得 Agent 單元學過的上下文視窗嗎?讓一個 Agent 讀完幾十個檔案、跑完上千行測試紀錄,它的「桌面」很快就堆滿了,後面的工作品質也會下降。把這些雜事交給別人做,主對話才能保持清爽。

平行的方式有兩種,我們一個一個看。

方式一:子代理,在同一個對話裡分頭做

子代理(subagent)是主 Agent 派出去的小幫手。它有自己獨立的上下文,做完事之後,只把精簡的摘要交回主對話,過程中讀過的大量檔案和紀錄都留在它自己那裡。

主對話把「檢查專案能不能上線」拆給三個子代理:A 跑全部測試、B 找安全性問題、C 檢查文件是否過時,各自在自己的上下文裡處理大量內容,完成後只把幾行摘要交回主對話

子代理像是你請同事幫忙查資料:他花一下午翻檔案,回來只跟你說三句重點。

在 Claude Code 裡,最簡單的用法就是直接開口:

可以這樣請 Claude Code 派出子代理

請用三個子代理平行處理,彼此不要等:

  1. 執行全部測試,只回報失敗的測試名稱和錯誤原因。
  2. 檢查 storage.py 和 main.py 有沒有把敏感資料寫進記錄檔或印到畫面上。
  3. 比對 README.md 的使用說明和實際程式,列出已經過時的地方。 三個都只做檢查,不要修改任何檔案。完成後,把三份結果整理成一張待辦清單給我。

Claude Code 內建了幾種子代理,例如專門快速搜尋程式碼、只讀不寫的 Explore。你不用記名字,說清楚要做什麼,它會自己挑。

自訂一個常用的子代理

如果某種工作你經常交代,可以把它寫成一個檔案,放在專案的 .claude/agents/ 資料夾裡。例如 .claude/agents/test-runner.md:

---
name: test-runner
description: 執行測試並回報結果。需要跑測試、確認修改有沒有弄壞東西時使用。
tools: Read, Grep, Glob, Bash
model: haiku
---

你負責執行這個專案的測試。

1. 用 `pytest` 執行全部測試。
2. 全部通過時,只回報「全部通過」和測試數量。
3. 有失敗時,每個失敗的測試回報:測試名稱、錯誤訊息的重點、你認為最可能的原因(一句話)。
4. 只回報結果,不要修改任何檔案。

上面那段用 --- 包起來的是設定:

  • name:子代理的名稱。
  • description:什麼時候該用它。主 Agent 會根據這段話決定要不要派它出去,所以要寫得具體。
  • tools:它可以用哪些工具。只給需要的,例如這個子代理不需要改檔案,就不給編輯工具。
  • model:它用哪個模型。跑測試、整理結果這種單純的工作,用比較小、比較便宜的模型通常就夠了。

下面的內文就是它的工作說明。寫好後,Claude Code 在需要跑測試時就會派它出去,你也可以直接說「用 test-runner 跑一下測試」。可用的設定欄位可能隨版本增加,完整說明請查 Claude Code 官方文件中關於 subagents 的頁面。

方式二:同時開好幾個 Agent

子代理適合「查資料、做檢查、帶摘要回來」。但如果你想讓兩個 Agent 各自完成一個功能,例如一個做匯出 CSV、一個修登入的 bug,就比較適合同時開兩個獨立的 Agent 對話,各做各的。

這時候會遇到一個現實問題:兩個 Agent 在同一個資料夾裡改檔案,很容易互相干擾。A 改到一半,B 跑測試失敗了,以為是自己的錯,開始「修」A 的程式。

解法是讓每個 Agent 有自己的工作區,這正是下一堂課的主題:Git worktree。

怎麼拆,才拆得好?

不是每件事都適合平行。拆之前,先用這張表檢查一下:

左右對照:適合平行的工作彼此獨立、碰的檔案不重疊、完成標準清楚、結果容易檢查;先別平行的情況包括有先後順序、會改同一個檔案、需求還很模糊、你沒時間檢查

拆得好,事半功倍;拆不好,你得花更多時間收拾。

幾個實用的拆法:

  • 依角度拆:同一份程式,請不同子代理分別從安全性、效能、可讀性審查。彼此完全不衝突。
  • 依模組拆:專案裡有 storage、report、export 三個獨立的模組,各自補測試。
  • 先調查、再動手:先派子代理平行調查,主 Agent 拿到摘要後,再一個一個動手改。調查可以平行,修改通常要排隊。

什麼時候不要平行?

這段可能比前面更重要。

  • 有先後順序的工作:資料格式還沒定,就同時寫存檔和畫面,最後一定要大改。
  • 會改到同一個檔案:就算各有工作區,最後合併時也會衝突,你得自己解。
  • 需求還很模糊:要邊做邊討論的事,交給一個 Agent 慢慢來,比同時派三個猜三種方向好。
  • 很小的工作:改一行字,派三個子代理的時間和費用都不划算。

還有一個最容易被忽略的限制:你自己。每個 Agent 的成果都需要你檢查。如果你同時開了五個,最後五份修改堆在你面前,你沒時間仔細看,就只能盲目接受,這比慢一點還危險。

Cursor、GitHub Copilot、OpenAI Codex 等工具也都有背景 Agent 或平行任務的功能,名稱和操作不同,但「怎麼拆、什麼時候不拆」的判斷完全一樣。

行動練習

用你在前面單元做過的專案(例如記帳程式),或任何一個有幾個檔案的專案:

  1. 請 Claude Code 用兩到三個子代理,平行做「只讀不寫」的檢查,例如跑測試、找安全性問題、比對說明文件。觀察主對話最後拿到的摘要有多短。
  2. 照上面的範例,在 .claude/agents/ 建立一個 test-runner.md,然後說「用 test-runner 跑一下測試」,確認它有被派出去。
  3. 列出你這個專案接下來想做的三件事,用「適合平行/先別平行」的表格判斷每一件,並寫下理由。
  4. 回想一下:上一次你用 Agent 工作時,有哪一段等待其實可以交給子代理?

讀完了嗎?

標記完成後,單元與專案的進度會自動更新(只存在這台裝置的瀏覽器)。

卡住了?讓 AI 當你的家教複製這段提問範本,貼到 Claude 或其他 AI 工具,再補上你卡住的地方。

留言與討論

卡關了、有心得,或發現內容需要更新?都歡迎留言。留言使用 GitHub 帳號登入。

留言區即將開放。現在可以先到 GitHub 討論區 發問,或看看 交流頁 的其他管道。