跳至主要內容
模組 2:多 Agent 1 / 6
中階 Session 7 Task Graph Dependencies

任務圖與依賴關係

學習 Claude Code 如何用依賴邊協調多個任務,實現複雜工作流程。

2026年3月20日 18 分鐘閱讀

你將學到什麼

在第 3 堂課中,你學了 TodoWrite 如何建立扁平的任務清單。但真實的專案並不是扁平的 — 任務之間互相依賴。你不能在 API 還不存在時就撰寫整合測試,也不能在測試通過前就部署。

完成後,你將了解:

  • 任務如何形成帶有依賴邊的有向無環圖(DAG)
  • Claude Code 如何判斷哪些任務可以平行執行、哪些必須依序執行
  • 按正確順序執行任務的圖遍歷演算法
  • 如何組織提示詞以產生結構良好的依賴圖

問題是什麼

扁平任務清單看起來像這樣:

□ 建立資料庫遷移
□ 新增 API 路由
□ 建立認證中介層
□ 撰寫整合測試
□ 更新前端

AI 從上到下依序處理這些任務。但這遺漏了關鍵資訊:

  1. 浪費的循序執行 — 「建立資料庫遷移」和「新增 API 路由」可以平行執行,但扁平清單強制它們必須循序處理
  2. 不正確的排序 — 沒有機制阻止「撰寫整合測試」在 API 路由還不存在時就執行
  3. 連鎖失敗 — 如果「建立認證中介層」失敗了,AI 不知道哪些下游任務現在被阻塞了

這些問題隨著任務清單增長而倍增。一個包含隱藏依賴關係的 15 項實作計劃是回溯和浪費上下文的溫床。

如何運作

任務即 DAG

當 Claude Code 規劃複雜工作時,任務自然形成有向無環圖。每個任務是一個節點,依賴關係是邊:

                ┌──────────────┐
                │  Analyze     │
                │  Requirements│
                └──────┬───────┘

              ┌────────┴────────┐
              │                 │
              ▼                 ▼
     ┌────────────────┐  ┌────────────────┐
     │  DB Migration  │  │  Route Handlers│
     │  (users table) │  │  (auth routes) │
     └────────┬───────┘  └────────┬───────┘
              │                   │
              └────────┬──────────┘


              ┌────────────────┐
              │  Auth          │
              │  Middleware    │
              └────────┬───────┘

              ┌────────┴────────┐
              │                 │
              ▼                 ▼
     ┌────────────────┐  ┌────────────────┐
     │  Integration   │  │  Update        │
     │  Tests         │  │  Frontend      │
     └────────────────┘  └────────────────┘

在這個圖中:

  • DB MigrationRoute Handlers 是獨立的 — 它們可以平行執行
  • Auth Middleware 依賴兩者 — 兩者都完成後才能開始
  • Integration TestsUpdate Frontend 依賴 Auth Middleware 但彼此不依賴

依賴邊

每個任務攜帶兩個關係欄位:

Task: "Auth Middleware"
  status: pending
  blockedBy: ["DB Migration", "Route Handlers"]
  blocks: ["Integration Tests", "Update Frontend"]

這些邊編碼了完整的圖:

欄位意義
blockedBy在此任務開始前必須完成的任務
blocks在此任務完成前無法開始的任務

blockedBy / blocks 關係是對稱的 — 如果任務 A 阻塞任務 B,那麼任務 B 被任務 A 阻塞。

圖遍歷演算法

Claude Code 使用一個簡單但有效的演算法來遍歷任務圖:

REPEAT:
  1. Scan all tasks
  2. Find tasks where:
     - status = "pending"
     - ALL blockedBy tasks have status = "completed"
  3. These are "ready" tasks -- execute them
     (If multiple tasks are ready, run in parallel)
  4. Mark completed tasks
  5. Check: did completing these unlock new tasks?
  6. If no tasks remain, DONE

以下是該演算法在時間軸上的視覺化:

Time ──────────────────────────────────────────────►

Round 1:  [Analyze Requirements]
          status: pending → in_progress → completed

Round 2:  [DB Migration]────────┐  (parallel)
          [Route Handlers]──────┘

Round 3:  [Auth Middleware]
          (unlocked because both blockers completed)

Round 4:  [Integration Tests]───┐  (parallel)
          [Update Frontend]─────┘

DONE ✓

四個回合取代六個循序步驟。圖揭示了兩個回合可以平行執行任務,縮短總執行時間。

AI 如何建構圖

當你要求 Claude Code 實現一個複雜功能時,它會分析子任務之間的自然依賴關係。規劃階段看起來像這樣:

User: "Add authentication to the Express app"

AI internal reasoning:
  "I need to break this down. Let me think about what
   depends on what..."

  1. Analyze requirements → nothing depends on, everything starts here
  2. DB migration (users table) → needs requirements analysis
  3. Route handlers (login/signup) → needs requirements analysis
  4. Auth middleware (JWT validation) → needs both DB and routes
  5. Tests → needs middleware
  6. Frontend login page → needs middleware

TodoWrite output:
  Task 1: Analyze requirements          blockedBy: []
  Task 2: Create users table migration  blockedBy: [1]
  Task 3: Create auth route handlers    blockedBy: [1]
  Task 4: Implement auth middleware     blockedBy: [2, 3]
  Task 5: Write integration tests       blockedBy: [4]
  Task 6: Update frontend with login    blockedBy: [4]

關鍵在於任務 2 和 3 共享同一個阻塞者(任務 1),但彼此不會阻塞。AI 認識到它們是獨立的,可以同時執行。

使用子代理平行執行

當多個任務同時就緒時,Claude Code 可以將它們委派給平行的子代理:

Round 2 — Two tasks ready:

  Parent Agent

    ├──► Subagent A: "Create users table migration"
    │    └── Works in isolated context

    └──► Subagent B: "Create auth route handlers"
         └── Works in isolated context

  Both return results → Parent continues to Round 3

這結合了課程中的兩個概念:任務圖識別可平行化的工作,而子代理(第 4 堂課)提供隔離的上下文來執行它們。

關鍵洞見

任務圖讓 AI 通過識別可平行化的子任務,在每一輪中完成更多工作。 沒有圖的話,AI 按線性序列逐一處理任務。有了圖,它可以批次處理獨立任務並同時執行。

但更深層的洞見是關於正確性,而不僅僅是速度。扁平任務清單無法表達「在那個完成之前不要開始這個」。依賴圖使排序約束明確化,防止 AI 對尚不存在的程式碼撰寫測試,或在依賴項目尚未就緒時整合中介層。

把它想像成建構系統。make 不會隨機編譯檔案 — 它讀取依賴圖,先建構葉節點,然後向上推進。Claude Code 的任務圖以相同方式運作。就像 make -j4 可以平行化獨立的編譯單元一樣,Claude Code 也可以平行化獨立的任務。

實作範例

組織提示詞以產生良好的依賴圖

你可以通過在提示詞中明確描述關係來引導 Claude Code 產生結構良好的任務圖:

Add a notification system to the app. Break it into tasks
with clear dependencies:

Phase 1 (no dependencies):
  - Design the notification data model
  - Research WebSocket libraries

Phase 2 (depends on Phase 1):
  - Create notifications table migration
  - Set up WebSocket server

Phase 3 (depends on Phase 2):
  - Build notification API endpoints
  - Implement real-time push via WebSocket

Phase 4 (depends on Phase 3):
  - Create frontend notification component
  - Write end-to-end tests

Use TodoWrite with blockedBy edges. Run parallel tasks
where possible.

識別依賴模式

你會遇到的常見依賴模式:

Linear Chain:        Fan-Out:           Fan-In:
A → B → C           A → B              D ←─ A
                     A → C              D ←─ B
                     A → D              D ←─ C

Diamond:             Independent:
    A                A    B    C
   / \               (no edges)
  B   C
   \ /
    D

菱形模式是實際專案中最常見的。一個分析任務扇出到平行的實作任務,然後匯聚到一個整合任務。

處理圖中的失敗

當任務失敗時,其下游依賴項會被阻塞:

Before failure:
  ✓ Analyze requirements
  → DB Migration (in progress)
  → Route Handlers (in progress)
  □ Auth Middleware (blocked by 2, 3)

DB Migration fails:
  ✓ Analyze requirements
  ✗ DB Migration (FAILED)
  ✓ Route Handlers
  ⊘ Auth Middleware (BLOCKED — dependency failed)

Recovery:
  The AI diagnoses the failure, fixes the migration,
  re-runs it, and then Auth Middleware becomes unblocked.

圖使失敗的影響範圍可見。沒有圖的話,AI 可能會嘗試繼續執行 Auth Middleware,然後因為資料庫表不存在而遇到難以理解的錯誤。

一眼讀懂圖

在執行過程中,任務清單成為即時儀表板:

Task Graph Status:
  ✓ [1] Analyze requirements
  ✓ [2] Create users table migration
  ✓ [3] Create auth route handlers
  → [4] Implement auth middleware      (blockedBy: 2✓, 3✓)
  □ [5] Write integration tests        (blockedBy: 4)
  □ [6] Update frontend with login     (blockedBy: 4)

Progress: 3/6 tasks completed | 1 in progress | 2 blocked
Next parallel batch: [5, 6] when [4] completes

前後對比

扁平任務清單帶依賴關係的任務圖
只能循序執行獨立任務平行執行
沒有排序保證明確的依賴邊防止錯誤順序
失敗阻塞所有任務失敗只阻塞下游依賴項
沒有超出當前任務的進度可見性完整圖顯示已完成、執行中和等待中的任務
AI 必須在上下文中記住排序依賴關係編碼在資料中,在壓縮後仍然存在
一次處理一個任務多個子代理處理獨立任務

下一堂課

第 8 堂課涵蓋背景任務 — Claude Code 如何在背景啟動長時間執行的操作(建構、測試套件、部署),並在等待結果的同時繼續進行有效的工作。