在使用 ChatGPT MyGPT 這類工具時,常會碰到這種情況:明明已經把步驟一、二、三寫得很清楚,甚至快寫到八千字長度上限,它還是不一定照順序做,也不一定會把前一步做完才往下走。1 結果,流程不會自己穩定推進,而是使用者得一路追著它跑,不斷補盯、補問、補救。

這時候,通常不是 prompt 還能不能再補一版,也不是 pseudo code 再寫完整一點就能自動解決。Pseudo code 形式的提示,確實可能改善局部步驟表達、問題分解與推理表現;2 把部份子工作移交給外部程式處理,也可能讓某些環節更穩(這也是 agent skills 推薦的技巧)。3 但這多半只是局部的改善。

同樣是處理長串流程,有些工具穩定度會明顯高於單靠 prompt 的系統。以 Claude Code 為例,它做一長串動作時,常會在中途停下來,檢查某一步有沒有成立,再決定要不要往下一步走。4 這告訴我們,差別通常不只在 prompt 本身,而在外層 harness、workflow control 或執行機制,有沒有把工具結果納入後續判斷,把流程進度穩定接住。5

這篇文章要談的,就是這條分界。

多步驟 agent workflow 的可靠性,不能寄望於另一套更漂亮的 prompt 寫法。尤其當流程能不能往下走,已經取決於工具結果、實際狀態、驗證是否成立與副作用是否可接受時,就該認真盤點:哪些責任還適合留在 prompt,哪些責任該移交給外部控制機制。

每一步要有明確成立條件、可檢查的依據,也要知道條件不成立時流程該怎麼停下來。光寫成文字還不夠,還得有真的在處理它們的系統。

Workflow 常見的失靈情況

多步驟 workflow 常見的失靈,不是 agent 完全沒做事,而是某一步其實還沒達到可以進入下一步的條件,流程卻已經先往下走了。

先看清楚有哪些失靈型態,才不會把所有問題都模糊地歸成「模型不穩」,最後又走回修 prompt 措辭的老路。

前一階段還沒做完,後一階段就先開始

很多 workflow 有明確前後順序,前一階段是否真的完成,會直接影響後一階段能不能開始。

問題是,就算 prompt 裡特別提醒「請照順序做」,agent 仍然很容易在前一段只做了一部分時就先往下走,或者把局部進展誤判成整體完成。表面上看起來流程順順地走,實際上是在偷渡。

解決這類問題的關鍵,是要有階段切換門檻:前一階段到底要滿足什麼條件,才可以切換到下一個階段。譬如說,若 workflow 要先完成資訊蒐集、列出受影響檔案、完成某個 patch,或確認某個工具結果,這些條件就得變成可檢查的切換條件。Prompt Chaining 6 若少了這一環,後續步驟很容易過早展開。

只要 workflow 的階段切換開始依賴外部可檢查的完成條件,責任就不能只留在語言敘述層。7

說是已經做了,但其實並沒有

模型很容易把打算做的事、以為做過的事,或上一輪口頭描述過的事,直接當成已經發生的結果。這時流程雖然還在跑,但一樣是在偷渡。

解決這類問題的關鍵,是把實際結果納入流程判斷,而不是繼續相信 agent 的口頭自述。只要有工具在執行,workflow 的真實狀態就不只在 token 裡,也在檔案、命令輸出、測試結果、資料寫入狀態與其他可讀取的執行結果裡,甚至包成 sandbox。8 Claude Code 這類工具之所以看起來比較會在中途調整,背後也是根據外部是否有實際結果來判斷,而不是只照著一開始的語言規劃一路往前衝。4

不能只看模型上一輪說了什麼,要看它做了沒。

驗證還沒通過,系統就先算完成

很多 workflow 不只要求產生內容,還要求它通過測試、比對、檢查、資料讀取或其他形式的驗證。

問題是,模型很容易把「答案已產生」直接當成「工作已完成」。內容也許已經生成,但還沒通過驗證,流程卻已經先宣布結案。

解決這類問題的關鍵,就是把驗證機制真正實作出來,確實併入完成條件的一部分。9 Prompt 可以要求「驗證通過才能算完成」,但如果系統沒有把驗證變成真正的完成條件與放行門檻,這句話就只是許願,算不上控制。10

問題其實都落在完成判定

我把以上情況整理成一張表:

常見情況 缺的是什麼 最小控制焦點
前一階段還沒完成,後一階段卻已經開始 階段切換門檻 先確認前一步是否真的成立
說是已經做了,但其實並沒有 以實際結果判斷 先確認工具結果,再判斷下一步
驗證還沒通過,流程已先把這一步視為完成 完成條件 先分清「有產出」與「已完成」

這些情況表面上不同,骨子裡其實都在問同一件事:流程往下走之前,系統到底根據什麼來判定這一步已經完成,判定它已經可以繼續往下走?

Prompt 的責任到哪裡,系統的責任就從哪裡開始

既然已經知道,把 prompt 寫得更像 SOP 有其極限,接下來就要問:哪些責任仍適合留在語言層,哪些責任其實已經需要外部承接。

對多步驟 workflow 來說,prompt 最擅長處理的,仍然是流程說明:任務怎麼展開、各階段如何安排、要留下哪些中間產物、哪些不確定性要揭露、輸出格式與角色邊界是什麼。這些要求會直接影響 agent 怎麼走。

所以 prompt 通常負責這些事:

  • 任務意圖與角色界定
  • 階段順序與作業程序
  • 中間產物與輸出格式
  • 需要揭露的不確定性與限制

但只要 workflow 開始依賴下面這些能力,責任通常就不能只留在 prompt:

  • 持有真實狀態
  • 判定某一步是否已完成
  • 在條件未滿足時擋下後續步驟
  • 接住高風險副作用
  • 提供 retry、resume、rollback 與 audit
  • 持續量測控制是否退化

換句話說,prompt 負責把流程講清楚;至於完成條件、階段切換條件、工具結果怎麼確認、流程卡住時怎麼處理、失敗後怎麼恢復,則比較接近系統該接手的部分。11

這樣拆的好處是:不會把所有問題都塞回 prompt,也不會把所有任務都誤判成一定要上到很重的外部系統。

什麼情況需要把控制交給外部機制

談到這裡,我們可以歸納出,哪些要求值得外移,又該外移到什麼程度。

可以先看 workflow 的成敗,是否已經明顯依賴以下幾種能力:

若 workflow 需要…… 就不能只靠…… 至少需要……
前一步完成後才可切換 prompt 提醒「照順序做」 可檢查的階段切換門檻
根據真實執行結果判斷下一步 模型口頭自述 確認工具結果,並納入判斷
驗證成立才算完成 單方面宣告完成 明確的完成條件
發生錯誤後恢復流程 人工臨時補救 retry / resume / rollback
持續判斷控制是否退化 單次案例觀察 traces / evals / regression checks

只要遇到這幾種情況,相關控制責任通常就值得外移。像驗證是否成立、workflow 是否退化這類問題,已經需要可量測的 eval、trace 或 grader 來承接。像 retry、resume、rollback 這類恢復能力,則更明顯屬於系統層機制,而不是單靠語言承諾。12

相反地,若任務流程短、狀態依賴弱、錯誤成本低、副作用小,而且完成與否主要還是取決於文字品質、結構清楚或分析完整度,prompt 往往仍然是成本效益最高的主要承接方式。這種情況下,把要求留在 prompt,再配合適度的格式約束與中間產物揭露,通常就夠了。

不是每一個多步驟任務,都值得為了少量風險加上一整套外部控制。畢竟很多團隊真正需要的,未必是很重的 agent platform。常常只需要一層很薄的外層包裝,把幾件事真正接住。

所以判斷要不要外移,看的不是流程有幾步,也不是 prompt 已經寫了多長,而是:「完成」這件事,是不是已經需要由語言以外的東西來決定。

結論

步驟明明已經寫清楚了,agent 還是不照著做,很多時候不是因為 prompt 還不夠細,而是 workflow 已經進入另一種責任分配:怎麼才算完成、什麼時候才能往下走、工具結果要不要納入判斷、驗證是否成立、失敗後果由誰接住,這些都不能只靠語言承諾支撐。

多步驟 workflow 要穩,關鍵不是再把 prompt 寫長一倍,而是先分清楚:某一步算不算完成,最後由誰判定。

下一次遇到問題時,先不要急著把 prompt 再寫長一倍。


  1. Xinyi Chen et al., “The SIFo Benchmark: Investigating the Sequential Instruction Following Ability of Large Language Models” (2024). 這裡主要用來支撐本文的較窄主張:多步驟 sequential instruction following 的失敗是可量測的常見現象。 ↩︎

  2. Iok Tong Lei et al., “Hint of Pseudo Code (HoPC): Programmatic Prompting Improves Reasoning”. 這裡主要用來支撐本文的較窄主張:pseudo-code 形式的提示,可能改善局部步驟表達、問題分解與推理表現;但它不直接支撐多步驟 agent workflow 在整體控制上的穩定性。 ↩︎

  3. Wenhu Chen et al., “Program of Thoughts Prompting: Disentangling Computation from Reasoning for Numerical Reasoning Tasks”. 這裡主要支撐的是:把部分計算工作外部化,交給程式執行或解譯器處理,可以降低模型把推理與計算混在同一段生成裡的負擔。這裡只支撐「部分工作可外部化承接」這個較窄主張,不直接支撐一般性的 workflow 控制結論。 ↩︎

  4. Anthropic, “How Claude Code works”. 這裡主要支撐的是:Claude Code 在工具使用、檔案編輯與命令執行之後,會根據新取得的結果持續更新後續行動;也就是說,後續步驟會受執行結果影響,而不是只依賴先前的語言規劃。 ↩︎ ↩︎

  5. Anthropic, “Effective harnesses for long-running agents”. 這裡主要支撐的是:長時間執行的 agent application,通常需要外層 harness 來承接任務切換、artifact 傳遞、可恢復進度與執行環境互動,而不是只靠 prompt 在語言層維持流程。 ↩︎

  6. Anthropic, “Building Effective Agents”. 這裡主要支撐的是:Anthropic 把 prompt chaining、routing、parallelization、orchestrator-workers、evaluator-optimizer 等整理成 workflow patterns,而不是只把 agent 問題理解成單輪 prompt 技巧。 ↩︎

  7. OpenAI Developers, “Agents SDK” & “Agent Builder”. 這裡主要支撐的是:官方文件直接碰到 orchestration、results and state、tool use、workflow 組裝、multi-step work 與 runtime control。 ↩︎

  8. OpenAI Developers, “Sandbox agents”. 這裡主要支撐的是:sandbox agents 把 orchestration 與 execution 分離,並提供容器化 execution environment、files、commands、snapshots 與 memory。 ↩︎

  9. OpenAI Developers, “Testing Agent Skills Systematically with Evals”. 這裡主要支撐的是:evals 不應只看最終答案,而應系統性測試 workflow、skills 與 traces。 ↩︎

  10. OpenAI Developers, “Evaluate agent workflows”. 這裡主要支撐的是:evaluation runs、graders、datasets 與 traces 可用來量測 workflow 本身,而不只量測最終答案。 ↩︎

  11. OpenAI, “A practical guide to building AI agents”. 這裡主要支撐的是:OpenAI 把 orchestration、tools、guardrails、human review、memory / state 等放在 agent 系統設計的討論範圍內。 ↩︎

  12. Anthropic, “Checkpointing”. 這裡主要支撐的是:Claude Code 提供 checkpointing 機制,可 rewind code、fork conversation,或同時處理兩者。這裡主要用來支撐 rollback / resume 需要系統層能力,而不是單靠語言承諾。 ↩︎