🎯 什麼情境該想到我

當你發現「一次呼叫模型」做不好,想多呼叫幾次來換品質,卻不知道該串、該分流、該平行,還是該讓它自己改到好的時候。先從這五種固定流程挑,真的不夠再升級成自主 agent。

⚙️ 怎麼用(步驟 / 公式)

0. 先記住共同的代價

五種模式都是用更多的呼叫次數(成本、延遲)換品質。repo 範例全部只靠兩個小工具:llm_call(prompt) 送一次訊息拿回文字,extract_xml(text, tag) 用正規表示式抽出 <tag>…</tag> 之間的內容。模型輸出用 XML 標籤包起來,程式才好拆。

1. 提示鏈 Prompt Chaining:一步做一件事,接力傳下去

  • 做法:準備一串 prompt,上一步的輸出當下一步的 Input:,依序呼叫。
  • 範例:季報文字 → ① 抽出「數值: 指標」→ ② 換成百分比 → ③ 由大到小排序 → ④ 排成 Markdown 表格。
  • 何時用:步驟固定、每步都比整件事簡單。
  • 好處:每一步都能單獨檢查輸出。範例的輸出就看得到第 2 步把「$43 每位用戶獲客成本」變成 43.0,到最後表格還混在百分比欄裡。錯在哪一步一目了然。

2. 路由 Routing:先分類,再交給專門的 prompt

  • 做法:第一次呼叫只做分類。prompt 列出可選的路線,要求先寫 <reasoning> 再寫 <selection>。程式抽出選擇、轉小寫,查表拿對應的專用 prompt,再呼叫第二次。
  • 範例:客服工單分到 billing/technical/account/product 四組。每組 prompt 規定開頭、語氣、必含段落。
  • 何時用:輸入種類差很多,一個 prompt 很難同時處理好。
  • 自己補(看程式推論):範例直接 routes[route_key],模型若回了表外的名字就會 KeyError。正式用要加預設路線。

3. 平行化 Parallelization:同一個 prompt,同時處理多份輸入

  • 做法:ThreadPoolExecutor 開 3 個 worker,每份輸入各呼叫一次,最後收齊。
  • 範例:同一份「市場變化影響分析」prompt,同時套到客戶、員工、投資人、供應商四個群體。
  • 何時用:子任務彼此獨立,而且事先就知道要切成哪幾份。

4. 協調者—工作者 Orchestrator-Workers:切法由模型當場決定

  • 兩階段:
    1. 分析規劃:協調者模型讀任務,輸出 <analysis> 和一串 <task><type>…</type><description>…</description></task>。prompt 要求切成 2–3 個不同做法。
    2. 執行:每個工作者拿到「原始任務+自己的 type+description+其他 context」,輸出 <response>。
  • 和平行化的差別:子任務不是事先寫死,而是每次依輸入產生。範例是環保水壺文案,協調者自己決定寫「規格型/生活情感型/實用效益型」三版。
  • 成本:N+1 次呼叫(1 個協調者+N 個工作者)。
  • 範例沒做、要自己補的:
    • 工作者是一個接一個跑的,可改用 asyncio 或執行緒池平行。
    • 工作者回空字串時,範例會塞一段錯誤訊息當結果。正式用應加重試。
    • 範例沒有彙整階段,可加一個模型把工作者的結果合起來。
    • 可以用 Opus 當協調者、Haiku 當工作者來壓成本。
  • 會壞在哪:協調者切得不好(prompt 最關鍵)、工作者回空或格式錯、模型沒照 XML 格式導致解析失敗(可改用 JSON)。

5. 評估者—優化者 Evaluator-Optimizer:一個寫,一個挑,改到過關

  • 做法:
    1. 生成者輸出 <thoughts> 和 <response>。
    2. 評估者只評不寫,輸出 <evaluation>(PASS/NEEDS_IMPROVEMENT/FAIL)和 <feedback>。只有完全沒建議時才能給 PASS。
    3. 不是 PASS,就把「之前所有版本+這次回饋」塞回生成者的 context,再生一版。
  • 範例:實作 O(1) 的 push/pop/getMin 堆疊。第一版演算法正確,評估者仍要求改:空堆疊要丟例外、補型別標註和 docstring。
  • 適用的兩個訊號:① 給了回饋,產出確實會變好;② 模型自己就能給出有意義的回饋。前提是評分標準清楚。
  • 自己補(看程式推論):範例的迴圈是 while True,沒有次數上限。評估者標準太嚴(「沒有任何建議才 PASS」)時可能停不下來。一定要加最大輪數。

6. 怎麼選

你的狀況選
步驟固定、可以拆成依序的小步提示鏈
輸入分好幾類,各類處理方式不同路由
子任務獨立,切法事先知道平行化
子任務獨立,但切法要看輸入才知道協調者—工作者
有明確評分標準,改一輪會更好評估者—優化者

模式可以疊:路由之後接提示鏈,協調者的工作者再各自跑評估迴圈。

7. 什麼時候才升級成自主 agent

repo 對「何時升級」沒有直接寫判準。以下是推論:上面五種的步驟數和分支都由你的程式碼決定;當「要做幾步、下一步做什麼」得看中途查到的結果才知道,固定流程寫不出來時,才換成讓模型自己決定下一步的 agent。

升級後,repo 的研究型 agent prompt(prompts/research_lead_agent.md、research_subagent.md)示範了要另外加的預算規則:

  • 先判斷題型再決定派幾個子 agent:直接題 1 個;一般 2–3 個;中等 3–5 個;高複雜 5–10 個,上限 20 個。「更多子 agent=更多開銷」,寧可少而能幹。
  • 子 agent 自訂工具呼叫預算:簡單題 5 次以下、中等約 5 次、難題約 10 次、非常難最多 15 次;硬上限 20 次呼叫、約 100 個來源,超過就被終止。
  • 報酬遞減就停:已經能給夠好的答案,就不再派新的子 agent,直接寫報告。
  • 最終報告由主 agent 自己寫,不外包給子 agent。

🧪 我實際套用的紀錄

  • 2026-11-02:(待填)

⚠️ 注意 / 什麼時候不適用

  • repo 明說這些是示範核心概念的範例,不是正式產品程式碼:沒有重試、逾時、輪數上限。
  • 單一輸出、一次呼叫就夠好的任務,不要硬套。協調者—工作者在「簡單任務」「延遲很敏感」「子任務永遠一樣」時都不建議用。
  • 用 XML 標籤解析時,模型漏標籤 extract_xml 會回空字串,不會報錯。下游要檢查空值。
  • 多個模型分頭做會有上下文分裂、錯誤放大的問題,見 多 Agent 編排與 Agent Drift。

🔗 相關工具