這個單元解決什麼問題單次 prompt 解不了的多步任務,靠 workflow 編排:拆解、串接、平行、驗證、收斂。prompt engineering 管「這一句怎麼問」,context engineering 管「視窗裡該有什麼」,workflow engineering 管的是「這些步驟用什麼結構串起來、誰先誰後、哪裡放關卡」。把這層做對,多步流程才會可重複、可審查、不靠運氣,而不是每跑一次結果都不一樣。
學習目標
- 能判斷一個任務何時超出單次 prompt 的範圍、需要 workflow 才能可靠執行,並分清「workflow」與「agent」的界線。
- 能把複合目標拆解成有依賴關係的步驟,辨識哪些可平行、哪些必須有序(DAG 思維)。
- 能套用 pipeline、fan-out、barrier、loop-until 等原語,並對應到 Anthropic 歸納的五種具名模式。
- 能在流程的關鍵節點放入對抗式驗證與收斂關卡,防止上游錯誤靜默傳遞。
1. 何時需要 workflow:單 prompt 的天花板在哪
當任何一步的輸出是下一步的輸入、而且這個中間結果難以在同一個上下文裡可靠地維持時,你就需要 workflow。 反過來說,能在一次 prompt、一個上下文視窗內穩定完成的,就別拆,拆了只是徒增延遲與狀態管理成本(見第 8 節常見誤區)。 單次 prompt 會撞到三道牆:- 輸出長度:模型單次回應有 token 上限,要它一口氣產出一份長報告加完整程式碼加測試,要嘛截斷,要嘛每段都草草帶過。
- 上下文深度:任務需要「記住前面算出來的中間結果」再往下做時,這些中間結果會擠在同一個視窗裡互相稀釋,觸發 01-4 講的 lost in the middle 與 context rot。
- 外部取值:某一步要先去查資料庫、跑測試、抓網頁,拿到結果才能決定下一步怎麼走。單輪 prompt 沒有「停下來取值再繼續」的結構。
2. 拆解與依賴:DAG 思維
把複合目標拆成步驟,最可靠的方法是從終點往回問:「這個最終輸出,直接需要哪些東西?」每個答案再往上追一層「那它又從哪來?」,追到不可再分的原子步驟為止。比起從頭往下想「第一步做什麼」,逆推不容易漏掉隱含的前置步驟。 拆完之後,把步驟畫成一張有向圖:節點是步驟,邊是依賴(A → B 表示 B 要用到 A 的輸出)。這張圖必須無環(acyclic),有環代表 A 等 B、B 又等 A,會死鎖。這就是 DAG(directed acyclic graph,有向無環圖)思維。 DAG 一畫出來,平行機會就自己浮現了:沒有路徑相連的節點,可以同時跑。 這張圖裡,C1、C2、C3 三個摘要步驟互不依賴,可以平行;但它們全都得等 B 完成(要清洗後的資料),也全都得在 D 之前完成(比對要三份摘要都到齊)。D 就是一個天然的屏障點(barrier,見第 3 節)。 拆解最常犯兩種相反的錯:- 把可平行的串起來:明明 C1/C2/C3 互不相干,卻一個做完才做下一個。沒有錯誤,只是白白把三步的時間加總,慢三倍。
- 把有依賴的平行掉:把 D(比對)和 C(摘要)同時發動,D 拿到的是還沒算完的摘要,產出不一致甚至基於空值。這種錯比較隱蔽,因為它「跑得很快」,但結果是錯的。
3. 常見模式:從機械原語到具名模式
四個原語(primitive)是你編排時實際操作的積木;Anthropic 把它們組合成五個更高層的具名模式。先掌握積木,再認得組合,遇到新框架只是換語法。 四個機械原語:- pipeline(串接):A → B → C,每步輸出餵給下一步。適合線性轉換。對應 Anthropic 的 prompt chaining:把複雜任務拆成依序的步驟,每步之間可以插程式化檢查點(checkpoint)確認進度再往下 [1]。
- fan-out(扇出):同一個輸入同時送給多個平行步驟。適合對同一份資料做多視角分析(同時查安全、效能、型別)。
- barrier(屏障):等所有平行分支都完成才繼續。fan-out 之後通常接 barrier 再聚合。fan-out + barrier 合起來就是 Anthropic 的 parallelization,它又分兩種變體:sectioning(把任務切成互不相干的子任務同時跑)與 voting(同一個任務跑多次拿多個獨立結果再表決)[1]。
- loop-until(收斂迴圈):重複執行直到驗證通過或達上限。適合品質迭代與自我修正。對應 Anthropic 的 evaluator-optimizer:一個 LLM 呼叫產出、另一個給評分與回饋,在迴圈裡逼近合格 [1]。
- routing(路由):先用一個分類步驟判斷輸入屬於哪一類,再導向對應的專門處理。本質還是 workflow(路由表是你定的),但多了一層動態分派。
- orchestrator-workers(協調者-工作者):一個中央 LLM 動態拆解任務、把子任務分派給 worker、再綜合結果 [1]。和 parallelization 的關鍵差別是:子任務不是預先定義的,而是 orchestrator 看了輸入才決定的。到這一步,你已經一腳踏進 agent 領域了,控制權部分交給了模型。
4. 驗證與收斂:在關鍵節點放對抗式驗證
不放驗證的後果很具體:上游一個小錯,會在後續每一步被當成正確前提繼續放大,等到三步後產出明顯不對時,你已經難以歸因是哪一步壞的,而且中間每一步消耗的 token 全部白費。驗證關卡的價值,是把錯誤擋在它還便宜的時候。 「驗證」最弱的形式是讓同一個模型自己檢查自己,但模型傾向認同自己剛才的輸出,效果有限。更強的是對抗式驗證(adversarial verify):用不同視角、或獨立的模型呼叫,去「挑戰」前一步的輸出,而不是「確認」它。 兩個關鍵設計手法:- 角色換成挑剔者:驗證步驟的 prompt 不要寫「檢查這個結果對不對」,要寫「試圖反駁這個結論,不確定時預設判為不成立」。把舉證責任反過來,假陽性才壓得下去。
- 多視角而非多份相同:若一個結論可能以多種方式出錯,給每個驗證者不同的鏡頭(正確性、安全性、能否重現),比跑三份一模一樣的檢查更能抓到不同的失效模式。這正是 Anthropic parallelization 裡 voting 的用法 [1]。
- 通過標準:用結構化的 pass / fail schema,不要用「看起來還行」這種模糊判斷。
- 最大重試次數:迭代到第 N 次仍不過就停,別無限迭代。
- 逾時退出:單輪或整體超過時間上限就中止。
MAX_ROUNDS 這行,一旦遇到模型怎麼改都過不了的案例,這個迴圈會燒到你發現帳單為止。Claude Code 的 Stop hook 可以充當這個收斂哨兵,在每回合結束時做確定性的 pass / fail 檢查(截至 2026-05)[2]。
5. 概念階梯定位
在工程四層裡,workflow 佔 L3:它向下依賴 L2 context 的品質,向上需要 L4 harness 兜底(四層由淺入深,見 01-3 prompt、01-4 context、本單元 workflow、01-6 harness):- 向下接 context:workflow 的每一個節點,本質上都是一次 context 組裝。節點產出的品質,上限由你給它的 context 品質決定(見 01-4)。workflow 結構再漂亮,單個節點的 context 設計爛,產出一樣爛。workflow 放大良好設計,也放大爛設計。
- 向上接 harness:workflow 只描述「步驟怎麼串」,它不負責「跑壞了誰來踩剎車」。把監控、權限邊界、記憶持久化、kill switch 加上去,才是完整的 agentic harness(見 01-6)。只做好 L3 卻不設 L4 的 kill switch,等於裝了賽車引擎卻沒有剎車。
工具對照
把多步編排落地,主要有三類載體,適用場景不同(截至 2026-05):- Claude Code 的子代理編排:在 orchestrator prompt 裡用 Task 工具 spawn 多個子代理,每個子代理有獨立上下文、自己的工具集,只回傳最終結論而非過程 [2]。適合「編排對象就是 LLM 工作」且想留在 Claude 生態內的情況。Anthropic 於 2026-05-28 推出研究預覽的 Dynamic Workflows 作為更大任務的編排層、以及以 git 共享工作區協作的 Agent Teams(截至 2026-05,研究預覽)[2]。
- n8n:視覺化低程式碼 workflow,節點對應步驟,強項是整合大量外部服務(資料庫、API、訊息平台)。其 AI 能力以 LangChain 為底,提供 70 個以上 AI 節點,AI Agent 節點預設走 Tools Agent,並支援「工具執行前需人工核准」的 human-in-the-loop(截至 2026-05)[4]。適合流程橫跨許多 SaaS、且希望非工程角色也能看懂改動的場景。
- LangGraph:以 Python / TypeScript 把流程描述成圖,三個原語是 State(所有節點共享的狀態)、Node(讀寫 state 的函式)、Edge(直接或條件跳轉)。1.2 版(2026-05-11 釋出)把一次 agent 執行當成可持久的圖執行(durable execution),靠 checkpointing 在每個節點存檔,server 重啟也能從斷點續跑 [3]。適合需要細粒度控制、狀態持久化與 human-in-the-loop 的 agentic 流程。
| 概念 | Anthropic Claude(主範本) | OpenAI | GitHub Copilot | Cursor | |
|---|---|---|---|---|---|
| 多步任務編排入口 | Claude Code Task 工具 / 子代理;SDK orchestrator 模式 | Agents SDK / Responses API(含工具呼叫) | Vertex AI Agent Builder;Gemini API function calling | Copilot coding agent(雲端自主、開 PR) | Background agents |
| 平行子任務(fan-out) | orchestrator prompt 內 spawn 多個 Task 子代理,各自獨立上下文 | Agents SDK 多代理 handoff | 需確認原始出處 | 需確認原始出處 | Background agents 平行 |
| loop-until / 自我修正 | orchestrator 條件判斷再呼叫;Stop hook 作收斂哨兵 | Agents SDK 迴圈 + guardrails | 需確認原始出處 | 需確認原始出處 | 需確認原始出處 |
| 外部 workflow 整合 | n8n、LangGraph 皆可呼叫 Claude API | n8n、LangGraph 皆支援 OpenAI | n8n、LangGraph 皆支援 Gemini | 經 API 整合 | 經 API 整合 |
對照表只給座標,不給細節各 cell 的精確機制名稱、版本與設定路徑屬快變動事實,部分以較穩定的描述呈現;無法確認的標「需確認原始出處」,精確名稱以該工具官方文件為準。本表用途是讓你知道「同一個編排概念在你的工具叫什麼」,深入設定見 Part II 與 Part IV。
動手做
兩個練習,從紙上拆解到實際編排:- 把一個現有手動任務畫成 DAG。 挑一個你平常手動跑的多步流程(例如:蒐集資料 → 各別摘要 → 交叉比對 → 撰寫報告)。畫出節點與依賴邊,標出哪些節點可平行(沒有路徑相連的)、哪些必須有序。再問每個節點三件事:輸入從哪來、輸出給誰用、通過標準是什麼。哪個節點最該加驗證關卡(通常是「錯了會被下游當正確前提放大」的那個)?
-
用 Claude Code 實作一個最小 pipeline。 三步串接,第二步驗證第一步的輸出:
把「驗證」獨立成一個帶 pass / fail 與重試上限的節點,就是這個練習的重點。再加一個 Stop hook 做確定性收尾檢查,這個 pipeline 就有了收斂哨兵。
常見誤區
自我檢核
通過本單元的標準
- 給你一個多步任務,你能不能講清楚它為什麼超出單 prompt 的範圍(輸出長度、上下文深度、還是外部取值)?答不出來,可能根本不需要拆。
- 你設計的 workflow,能否對每個節點回答「輸入從哪來、輸出給誰用、通過標準是什麼」?任何一個節點答不出來,設計就還沒成熟。
- 你的 fan-out 後面那個 barrier,是真的需要跨分支的全局資訊,還是只是順手擋了一下?
- 你的 loop-until 有沒有明確的最大迭代上限與逾時退出?
- 你能分清自己現在做的是 workflow(路徑預先定義)還是 agent(模型自己決定路徑)嗎?兩者的可重現性代價不同。
來源與延伸閱讀
事實主張依官方文件,快變動項標註截至 2026-05;採 IEEE 編號制。- [1] E. Schluntz and B. Zhang, “Building Effective Agents,” Anthropic Engineering, Dec. 19, 2024.(workflow 與 agent 的定義、prompt chaining / routing / parallelization / orchestrator-workers / evaluator-optimizer 五模式)https://www.anthropic.com/engineering/building-effective-agents(截至 2026-05)
- [2] Anthropic, “Create custom subagents”(子代理獨立上下文與工具集、只回傳結論;Task 工具編排;Dynamic Workflows 與 Agent Teams 研究預覽,2026-05-28),Claude Code Docs. https://code.claude.com/docs/en/sub-agents(截至 2026-05)
- [3] LangChain, “Durable execution,” LangGraph Docs(State / Node / Edge、checkpointing、durable execution;LangGraph 1.2 於 2026-05-11 釋出). https://docs.langchain.com/oss/python/langgraph/durable-execution(截至 2026-05)
- [4] n8n, “AI Agent node documentation”(LangChain 為底、Tools Agent 預設、工具執行前人工核准的 human-in-the-loop;70+ AI 節點),n8n Docs. https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/(截至 2026-05)
- 銜接:01-3 單節點的 prompt 品質、01-4 每個節點的 context 組裝與子代理隔離、01-6 把 workflow 包成有監控與 kill switch 的 harness、05-1/05-2 兩個開源 agent 的實際編排設計。