01

Agent 是什麼?先想清楚要不要用

Anthropic 把所有相關系統統稱為代理系統,但在「照預定路徑走」與「自己決定怎麼走」之間畫出關鍵界線。

先讀原文段落,旁邊就是白話

這是一本英文書。左邊放原文、右邊放白話導讀——你既讀得懂,也順手碰了原文。

原文 · Agent 是什麼?先想清楚要不要用 # Building Effective AI Agents Source: https://www. com/engineering/building-effective-agents Over the past year, we've worked with dozens of teams building large language model (LLM) agents across industries. Consistently, the most successful implementations weren't using complex frameworks or specialized libraries. Instead, they were building with simple, composable patterns.
白話導讀

Anthropic 把所有相關系統統稱為代理系統,但在「照預定路徑走」與「自己決定怎麼走」之間畫出關鍵界線。

工作流 vs. Agent:兩種「代理系統」

Anthropic 把所有相關系統統稱為代理系統,但在「照預定路徑走」與「自己決定怎麼走」之間畫出關鍵界線。

STEP 1

深度探秘

「Agent」這個詞,其實是個大帽子

大家都在講 Agent,但講的是同一件事嗎?

過去一年 Anthropic 團隊和數十個產業的客戶一起打造 LLM Agent,發現一個有趣的現象:最成功的實作,往往不是靠複雜的框架或專門的函式庫,而是用簡單、可組合的模式堆出來的。

但「Agent」這個詞本身很模糊。有人說 Agent 是完全自主、能長時間獨立運作、自己選工具完成複雜任務的系統;也有人說 Agent 只是照著預先定義好的流程在跑的實作。

Anthropic 的做法是:把這些變體統稱為工作流與 Agent 兩種架構。">代理系統 (agentic systems),但在底下畫出一條重要的架構分界線:

類型 控制方式 特色
工作流 (Workflows) LLM 與工具依照預先寫好的程式路徑被編排 可預期、穩定
Agent LLM 自己動態決定流程與工具使用 靈活、但較難預測

為什麼要分清楚這條線?

因為這條線幾乎決定了你系統的性格:工作流像照著食譜做菜,步驟寫好了,每次做出來的味道都差不多;Agent 像請一位大廚自由發揮,做出來的菜可能驚喜連連,但也可能失控。

這個分界不是學術定義遊戲,而是實務上「你要多信任模型自己做決定」的核心問題。

💡
關鍵

代理系統分兩種:工作流靠預先寫好的程式路徑編排,Agent 靠 LLM 自己動態決定怎麼做。

STEP 2

生活妙喻

食譜 vs. 請大廚自由發揮

兩種做菜的方式

想像你今天想做一頓晚餐:

  • 工作流,就像照著食譜一步步做菜:先切菜、再熱鍋、下油、下料,每一步都寫得清清楚楚,你(程式)決定了整個流程,廚師(LLM)只負責在每個步驟裡把「切菜」「炒菜」這件事做好。不管做幾次,流程都一樣,結果也很穩定。
  • Agent,則像把廚房交給一位有經驗的大廚,只告訴他「我要一頓能讓客人驚艷的晚餐」,剩下的——買什麼菜、先做哪道、要不要臨時調整——全部交給大廚自己判斷。大廚會不斷嚐味道(從環境得到回饋),決定下一步要加鹽還是收汁。

兩者的取捨

照食譜做菜比較穩定可預期,但遇到食譜沒寫到的情況(客人臨時說不吃辣)就會手足無措;讓大廚自由發揮比較靈活,能應對各種突發狀況,但也更依賴大廚的判斷力——萬一大廚判斷失誤,整頓飯可能就毀了。

flowchart TD
    A[代理系統] --> B[工作流:照食譜做菜]
    A --> C[Agent:大廚自由發揮]
    B --> D[程式決定步驟順序]
    C --> E[LLM 自己決定怎麼做]
💡
關鍵

工作流是照食譜做菜、步驟由你決定;Agent 是把廚房交給大廚、怎麼做由他決定。

STEP 3

實用超能力

看到系統時,先問自己這個問題

一個實用的檢查問題

下次你在設計或評估一個 LLM 系統時,可以先問自己:

「決定下一步要做什麼的,是我寫的程式碼,還是模型自己?」

如果答案是「程式碼」,那你手上大概是個工作流;如果答案是「模型自己決定」,那你手上就是個Agent

為什麼這個問題很重要

這個問題會直接影響你怎麼除錯、怎麼測試、怎麼估算成本:

  • 工作流的每一步都可預測,出錯了你可以精準定位是哪一步的提示詞或邏輯有問題。
  • Agent 的每一步都可能不同,出錯了你得去看它在那個當下「看到了什麼、決定了什麼」。

本章接下來會先介紹一個最基礎的建構單元(加強型 LLM),再依序介紹幾種工作流模式,最後才談到真正的 Agent——這個順序本身就是在示範:先求簡單,再逐步增加複雜度,而不是一開始就跳去打造一個全自主的 Agent。

💡
關鍵

判斷工作流還是 Agent,看『下一步是誰決定的』——程式碼還是模型自己。

🔆
生活妙喻:工作流 ≈ 照食譜做菜

步驟、順序都事先寫好,廚師(LLM)只在每一步裡把當下的小任務做好,整體流程由程式掌控。

🔆
生活妙喻:Agent ≈ 把廚房交給大廚自由發揮

只給目標,剩下的規劃與臨場判斷都交給大廚(模型)自己決定,靠不斷嚐味道(環境回饋)調整下一步。

本節字彙

代理系統 (agentic systems)
Anthropic 用來統稱所有『讓 LLM 參與決策或行動』系統的總稱,底下再分工作流與 Agent 兩種架構。
🧠 看到「agentic」就想到「所有跟 LLM 自主行動有關的系統」這個大帽子。
工作流 (workflows)
LLM 與工具依照預先寫好的程式路徑被編排執行的系統,流程固定、可預期。
🧠 workflow = 流程早就『畫好路線圖』,照走就對了。
Agent
LLM 動態自行決定流程與工具使用方式的系統,掌控權在模型手中而非固定程式碼。
🧠 Agent 是有『代理權』的角色——它能自己做決定,不是被動照劇本演。
根據 Anthropic 的定義,用來區分「工作流」和「Agent」的最關鍵架構差異是什麼?
用「食譜」與「大廚自由發揮」的比喻,下列哪個說法最貼切?
一個客服系統嚴格按照「先問訂單編號 → 查詢資料庫 → 依查詢結果套用固定範本回覆」的流程執行,完全不會臨時改變步驟順序。這比較接近哪種代理系統?

什麼時候該用、什麼時候不該用

從『先求簡單再談複雜』出發,理解代理系統用延遲與成本換取表現,並學會挑選框架的原則。

STEP 1

深度探秘

先求簡單,複雜是最後手段

第一原則:不是每個問題都需要 Agent

打造 LLM 應用時,Anthropic 給的第一個建議聽起來可能有點反直覺:

先找最簡單能解決問題的方法,只有真的需要時才增加複雜度——這甚至可能意味著『完全不要打造代理系統』。

為什麼?因為代理系統(工作流和 Agent)通常會用更高的延遲與成本,去換取更好的任務表現。這是一筆交易,而不是免費的午餐。

這筆交易划不划算?

你需要誠實評估:

  • 這個任務真的需要多步驟、多工具、動態決策嗎?
  • 還是其實一次 LLM 呼叫,搭配好的檢索 (retrieval) 和情境內範例 (in-context examples),就已經綽綽有餘?

原文明確指出:對很多應用而言,優化單次 LLM 呼叫(搭配檢索與範例)通常就足夠了。 只有當任務真的複雜到需要拆解、或需要模型自己動態判斷路徑時,才進一步考慮工作流或 Agent。

複雜度該用在哪?

情境 建議
任務明確、可拆成固定步驟 工作流:追求可預測性與一致性
任務開放、需要模型大規模靈活判斷 Agent:追求彈性與模型主導的決策
任務單純,靠好提示詞就能解 兩者都不需要,優化單次呼叫即可
💡
關鍵

先追求最簡單的解法,只有在複雜度真的能換來更好表現時才加碼,代理系統是用延遲與成本換準確度的交易。

STEP 2

生活妙喻

叫計程車,還是自己組一個車隊?

用交通工具來想這件事

假設你只是要從家裡到公司,五分鐘的路程:

  • 如果你花大把時間去組織一支專屬車隊(配司機、調度員、後勤團隊),那真的是殺雞用牛刀——多花的時間、金錢遠遠超過你省下的移動時間。
  • 但如果你要做的是跨國巡演的樂團後勤,路線每天不同、突發狀況一堆(臨時改航班、場地異動),這時候一支能自己判斷、彈性調度的車隊反而是值得的投資。

對應到系統設計

  • 「叫一輛計程車」就像優化單次 LLM 呼叫:夠簡單、夠快、成本低,很多時候這就是最佳解。
  • 「規劃固定巡演路線的接送班表」就像工作流:路線固定、可預期,適合明確、可拆解的任務。
  • 「配一支能臨場應變的車隊調度團隊」就像Agent:靈活但成本高,適合真正開放、多變的場景。

關鍵問題永遠是:這趟路真的複雜到需要車隊嗎,還是叫車就好?

flowchart TD
    A[任務進來] --> B{夠簡單嗎}
    B -->|是| C[優化單次 LLM 呼叫]
    B -->|否 但步驟固定| D[使用工作流]
    B -->|否 且需要動態判斷| E[考慮使用 Agent]
💡
關鍵

先評估任務複雜度:簡單任務叫計程車就好,別為了五分鐘的路程組一支車隊。

STEP 3

實用超能力

決定要不要用框架的三個判斷點

框架能幫你,也能害你

市面上有不少框架能簡化打造代理系統的過程,例如 Claude Agent SDK、AWS 的 Strands Agents SDK,或是拖拉式的 Rivet、Vellum 等 GUI 工具。它們把呼叫 LLM、定義與解析工具、串接多次呼叫這些低階雜事都幫你包好了。

但原文也提出警告:

框架常常會多加一層抽象,模糊掉底層真正送出去、收回來的提示詞與回應,讓除錯變得更難;也容易讓人「順手」加了不必要的複雜度。

三個實用判斷點

  1. 先直接用 LLM API 練過一輪:很多模式其實幾行程式碼就能實作,親自寫過一次,你才知道框架到底幫你省了什麼。
  2. 如果決定用框架,一定要搞懂底層在做什麼:原文特別點名,「對底層實際運作的錯誤假設」是客戶最常見的出錯來源。
  3. 框架適合起步,不代表適合正式環境:上線前,別怕拆掉不必要的抽象層,換成更貼近底層的基本元件。

記住這句話:先自己動手做過一次簡單版,再決定要不要借助框架的力量。

💡
關鍵

框架能加速起步,但務必先懂底層邏輯,避免因誤解框架而踩坑,正式環境更要考慮拆掉不必要的抽象層。

🔆
生活妙喻:代理系統的延遲/成本 vs. 表現交易 ≈ 五分鐘的路程要不要組車隊

簡單任務叫計程車(優化單次呼叫)就好;只有真正複雜、多變的任務(跨國巡演)才值得投入車隊(工作流/Agent)的成本。

🔆
生活妙喻:框架帶來的抽象層 ≈ 先自己走過一次流程,再決定要不要雇導遊

自己動手實作過一次基本模式,才能判斷框架到底幫你省了什麼、又藏了什麼,避免對底層運作有錯誤假設。

本節字彙

延遲 (latency)
系統從接收輸入到給出結果所花費的時間,代理系統常因多步驟、多次 LLM 呼叫而拉長延遲。
🧠 latency = 等待的時間,步驟越多、等得越久。
情境內範例 (in-context examples)
直接寫在提示詞裡的範例,讓模型參考範例輸出格式或風格,是優化單次 LLM 呼叫常用的技巧。
🧠 把範例直接『塞進』上下文(context)裡給模型看,不用額外訓練。
框架 (framework)
把呼叫 LLM、定義工具、串接多次呼叫等低階工作包裝好的開發工具,例如 Claude Agent SDK。
🧠 framework 就像現成的『骨架』,幫你把常見零件先搭好。
根據原文,開發 LLM 應用時的第一原則是什麼?
為什麼原文說使用代理系統(工作流或 Agent)常常是一種『交易』?
一個新創團隊要做「把使用者輸入的一句話翻成三種語言」的功能,任務單純且輸出格式固定。根據原文精神,最合理的起手式是什麼?
02

基石:加強型 LLM 與鏈式工作流

所有代理系統的最小單位——一個配備檢索、工具與記憶能力的 LLM,以及 MCP 如何幫忙接上生態系。

先讀原文段落,旁邊就是白話

這是一本英文書。左邊放原文、右邊放白話導讀——你既讀得懂,也順手碰了原文。

原文 · 基石:加強型 LLM 與鏈式工作流 LLM) agents across industries. Consistently, the most successful implementations weren't using complex frameworks or specialized libraries. Instead, they were building with simple, composable patterns. In this post, we share what we've learned from working with our customers and building agents ourselves, and give practical advice for developers on building effective agents.
白話導讀

所有代理系統的最小單位——一個配備檢索、工具與記憶能力的 LLM,以及 MCP 如何幫忙接上生態系。

地基:加強型 LLM

所有代理系統的最小單位——一個配備檢索、工具與記憶能力的 LLM,以及 MCP 如何幫忙接上生態系。

STEP 1

深度探秘

所有代理系統,都是從這個最小單位長出來的

最基本的建構單元

不管你最後要做的是簡單的工作流,還是複雜的自主 Agent,一切都是從同一個最小建構單元開始:檢索、工具、記憶等能力,且模型能主動決定何時、如何使用這些能力的版本,是所有代理系統的最小建構單元。">加強型 LLM (the augmented LLM)——一個裝上了額外能力的 LLM。

這些額外能力通常包括:

  • 檢索 (retrieval):主動查找需要的資訊。
  • 工具 (tools):呼叫外部功能來完成任務。
  • 記憶 (memory):記住之前發生過的事、決定要保留什麼資訊。

關鍵在於,現在的模型已經能主動使用這些能力——自己生成搜尋查詢、自己選該用哪個工具、自己判斷什麼資訊值得記住。這跟過去「工程師手動決定每一步要查什麼」是完全不同的層次。

打造加強型 LLM 該關注什麼?

原文建議聚焦兩個重點:

  1. 把能力打磨到貼合你的具體使用情境——不是隨便接個工具就好,而是這個工具、這份記憶,真的對這個任務有幫助。
  2. 確保這些能力對 LLM 而言介面清楚、文件完整——模型要「看得懂」怎麼用這些能力,就像我們前面提過的,好工具的說明書要寫給模型看得懂。

Model Context Protocol(MCP)

實作這些能力的方法有很多種,其中一種是 Anthropic 推出的 Model Context Protocol (MCP):它讓開發者只需寫一個簡單的客戶端實作,就能接上一個不斷成長的第三方工具生態系,不必每個工具都重新造輪子。

從這裡開始,本文接下來介紹的所有工作流與 Agent,都預設每次 LLM 呼叫背後,都已經具備這些加強能力。

💡
關鍵

加強型 LLM 是所有代理系統的地基:一個裝上檢索、工具、記憶能力,且能主動使用這些能力的 LLM。

STEP 2

生活妙喻

普通員工 vs. 配好裝備的專員

想像剛入職的新人 vs. 配好裝備的老手

一個普通 LLM,就像一位剛入職、什麼資源都沒有的新人:只能憑腦子裡記得的東西回答問題,問他公司上個月的業績,他只能靠印象亂猜。

一個加強型 LLM,就像替這位新人配好了裝備的專員:

  • 給他一台能查資料庫的電腦(檢索)——他可以自己去查上個月業績的真實數字。
  • 給他一支萬用工具腰帶(工具)——需要寄信、算數字、查天氣,通通能自己動手做。
  • 給他一本隨身筆記本(記憶)——重要的事情記下來,之後隨時能翻出來用。

這位配好裝備的專員,不只『被動等你告訴他怎麼做』,他還會自己判斷:現在該查資料庫嗎?該用哪個工具?這件事值得記下來嗎?

flowchart LR
    A[基本 LLM] -->|加裝| B[檢索能力]
    A -->|加裝| C[工具能力]
    A -->|加裝| D[記憶能力]
    B --> E[加強型 LLM]
    C --> E
    D --> E
💡
關鍵

加強型 LLM 就像替新人配好電腦、工具腰帶、筆記本,而且他還會自己判斷什麼時候該用哪個。

STEP 3

實用超能力

先把地基打好,才談上層建築

別急著蓋樓,先打地基

很多團隊一開始就想直接打造一個複雜的多步驟 Agent,卻忽略了最基本的問題:你的加強型 LLM 本身夠不夠好用?

在往上疊工作流或 Agent 之前,先問自己:

  • 我給模型的檢索能力,真的能查到它需要的資訊嗎?
  • 我給模型的工具,說明清楚到模型一看就懂該怎麼用嗎?(本章後面會深入談這點)
  • 模型需要記住的東西,有被妥善保留下來嗎?

實務上的第一步:先用好 MCP 或類似機制

如果你打算自己接一堆工具、串一堆 API,不如先看看 Model Context Protocol (MCP) 這類方案——它的價值在於用一套簡單、標準化的客戶端實作,就能接上外部生態系裡持續成長的工具,省去你自己重新設計每個介面的功夫。

記住:本文後面提到的每一次「LLM 呼叫」,背地裡都假設它已經是一個加強型 LLM。把這個地基打好,後面的工作流、Agent 才會蓋得穩。

💡
關鍵

打造任何代理系統前,先確保加強型 LLM 的檢索、工具、記憶能力本身夠好用、夠清楚。

🔆
生活妙喻:加強型 LLM ≈ 配好裝備的專員

基本 LLM 像空手新人,加裝檢索(能查資料的電腦)、工具(萬用工具腰帶)、記憶(隨身筆記本)後,變成能主動判斷、自己行動的專員。

🔆
生活妙喻:Model Context Protocol (MCP) ≈ 萬用轉接頭

不用替每個第三方工具重新設計一套介面,寫一個簡單的客戶端就能接上不斷成長的工具生態系,就像一個轉接頭適用所有插座。

本節字彙

加強型 LLM (the augmented LLM)
在基本 LLM 上加裝檢索、工具、記憶等能力,且模型能主動決定何時、如何使用這些能力的版本,是所有代理系統的最小建構單元。
🧠 augmented = 被『加強』過的,裝備比空手的基本 LLM 多。
檢索 (retrieval)
讓模型主動查找外部資訊(如資料庫、文件)的能力,而非只靠訓練時記住的內容回答。
🧠 retrieval = 取回,模型自己去『取回』需要的資料。
Model Context Protocol (MCP)
Anthropic 推出的協定,讓開發者用簡單的客戶端實作,就能接上持續成長的第三方工具生態系。
🧠 MCP 就像萬用轉接頭:一次接好,到處通用。
「加強型 LLM」相較於基本 LLM,最核心的差異是什麼?
用「配好裝備的專員」比喻,「記憶」能力對應到專員身上的什麼道具?
根據原文,打造加強型 LLM 時應該聚焦的兩個重點是什麼?

工作流一:Prompt Chaining 接龍

把一個任務拆成一連串固定步驟,每步都吃前一步的輸出,中間還能插入檢查關卡。

STEP 1

深度探秘

把大任務拆成一連串小任務

什麼是 Prompt Chaining?

Prompt Chaining(提示詞接龍)是最基礎的工作流模式:把一個任務拆解成一連串步驟,每一次 LLM 呼叫都處理前一步的輸出,像接龍一樣一步接一步往下傳。

你還可以在中間任何一個步驟加入程式化檢查——原文稱之為「gate(關卡)」——來確保流程還在正確的軌道上,沒有跑偏。

flowchart LR
    A[輸入] --> B[LLM 呼叫 1]
    B --> C{Gate 檢查}
    C -->|通過| D[LLM 呼叫 2]
    C -->|不通過| X[中止或修正]
    D --> E[LLM 呼叫 3]
    E --> F[輸出]

什麼時候該用?

這個工作流最適合任務能被乾淨拆解成固定子任務的情境。核心目的是:用延遲換準確度——把一個大任務拆成幾個小任務,每個小任務對模型來說都變得更簡單、更容易做對,整體出錯的機率就降低了。

常見應用範例

  • 先生成一份行銷文案,再把它翻譯成另一種語言。
  • 先寫文件大綱,檢查大綱是否符合特定標準,通過後再依大綱寫出完整文件。

這兩個例子都有一個共同特徵:後一步天生就依賴前一步的結果,而且每一步都可以被單獨檢查、單獨優化。

💡
關鍵

Prompt Chaining 把任務拆成循序步驟,每步吃前一步輸出,可插入檢查關卡,用延遲換準確度。

STEP 2

生活妙喻

工廠的生產線,一站一站往下傳

想像一條生產線

Prompt Chaining 就像工廠裡的生產線

  • 第一站:裁切原料,做成半成品。
  • 品管站(gate):檢查半成品尺寸對不對,不對就退回重做,不會讓瑕疵品流到下一站。
  • 第二站:把合格的半成品組裝成成品。
  • 第三站:包裝出貨。

每一站的工人(LLM 呼叫)只需要專心做好自己那一站的工作,不需要同時煩惱裁切、組裝、包裝三件事——這正是分工帶來的好處:每個小任務都變簡單了,整體品質反而更穩定

為什麼要在中間放品管站?

如果生產線上沒有品管站,一旦第一站出了瑕疵品,會一路帶著錯誤流到最後,等到包裝完才發現整批報廢,浪費更多成本。Gate 就是那位站在生產線中間,隨時檢查有沒有走偏的品管員——及早抓到問題,及早止損。

這也是為什麼原文說,這個工作流是用延遲(多了幾道檢查、多了幾站)去換準確度(每站都做對、整體品質更穩)。

💡
關鍵

Prompt Chaining 像生產線分站作業,每站專心做好一件事;Gate 就是品管站,及早抓錯避免整批報廢。

STEP 3

實用超能力

動手拆解一個真實任務

練習:把「寫一篇雙語產品公告」拆成鏈

假設任務是:寫一篇產品公告,先用中文寫好,再翻譯成英文,並確保翻譯後語氣一致。用 Prompt Chaining 拆解會是:

  1. LLM 呼叫 1:根據產品資訊,生成一份中文公告草稿。
  2. Gate:程式檢查字數是否在規定範圍內、是否包含必要的產品名稱關鍵字。
  3. LLM 呼叫 2:把通過檢查的中文公告翻譯成英文,同時要求保持語氣一致。
  4. Gate:檢查英文版是否仍包含相同的產品名稱、連結等關鍵資訊。
  5. 輸出:中英文公告雙版本。
# 概念示意:Prompt Chaining 的簡化程式骨架
draft_zh = call_llm(prompt="寫產品公告", context=product_info)
if not gate_check(draft_zh, rules=["字數", "關鍵字"]):
    raise ValueError("中文草稿未通過檢查")

draft_en = call_llm(prompt="翻譯成英文,語氣一致", context=draft_zh)
if not gate_check(draft_en, rules=["關鍵資訊保留"]):
    raise ValueError("英文翻譯未通過檢查")

判斷小技巧

下次遇到一個任務時,可以問自己:這個任務能不能被拆成幾個『後一步需要前一步結果』的固定步驟? 如果答案是「能」,且每一步都能被單獨檢查,那 Prompt Chaining 通常就是最划算的第一選擇。

💡
關鍵

把任務拆成『固定步驟+中間檢查點』,每步驟只做一件事,就是實作 Prompt Chaining 的具體方法。

🔆
生活妙喻:Prompt Chaining ≈ 工廠生產線分站作業

任務被拆成固定的幾站,每站專心處理自己的部分,再把結果傳給下一站,整體出錯率因為每站任務變簡單而降低。

🔆
生活妙喻:Gate(檢查關卡) ≈ 生產線上的品管站

在中間步驟安插程式化檢查,及早抓出偏離軌道的輸出,避免錯誤一路帶到最後才被發現,浪費更多成本。

本節字彙

Prompt Chaining(提示詞接龍)
把任務拆解成一連串步驟,每次 LLM 呼叫處理前一步輸出的工作流模式。
🧠 chain = 鏈子,一環接一環,前一環的輸出是下一環的輸入。
Gate(關卡)
插在工作流中間步驟的程式化檢查,用來確認流程仍在正確軌道上,未通過就中止或修正。
🧠 gate = 關口,過關才能繼續往下走。
用延遲換準確度
透過拆解成更多步驟(增加時間成本),讓每一步任務更簡單,從而降低整體出錯率、提升最終準確度的取捨。
🧠 多花點時間一步一步做,換來做對的機率變高。
Prompt Chaining 工作流的核心運作方式是什麼?
用生產線比喻,Gate(檢查關卡)在 Prompt Chaining 裡對應的角色是什麼?
「先寫文件大綱、檢查大綱是否符合標準,通過後再依大綱寫出完整文件」,這個流程最適合用哪種工作流實作?

工作流二:Routing 路由分派

先分類輸入,再送到對應的專門處理流程,讓每種輸入都有『量身訂做』的處理方式。

STEP 1

深度探秘

先分類,再交給專家處理

什麼是 Routing?

Routing(路由)工作流會先替輸入分類,再依分類結果把它導向一個專門的後續任務

這個模式的價值在於:它讓你能做到關注點分離 (separation of concerns),替不同類型的輸入各自打造更專門、更精準的提示詞,而不必用同一套提示詞硬扛所有情況。

原文提醒:如果沒有 Routing,「為某一種輸入優化提示詞」很容易在傷害其他類型輸入的表現——因為你調整措辭去照顧 A 類型問題時,可能反而讓 B 類型問題的回答變差。

flowchart TD
    A[輸入] --> B[分類器]
    B -->|類型一| C[專門流程 一]
    B -->|類型二| D[專門流程 二]
    B -->|類型三| E[專門流程 三]

什麼時候該用?

Routing 特別適合:

  • 任務裡有清楚可分的類別,且這些類別最好分開處理
  • 分類這件事本身能被準確地完成——不管是靠 LLM 分類,還是靠更傳統的分類模型/演算法。

常見應用範例

  • 客服分流:把一般問題、退款請求、技術支援分別導向不同的下游流程、提示詞、工具組合。
  • 依難度分流模型:簡單、常見的問題導向便宜、快速的小模型(如 Claude Haiku 4.5),困難、少見的問題導向能力更強的模型(如 Claude Sonnet 4.5),在效能與成本之間取得最佳平衡。
💡
關鍵

Routing 先分類輸入、再導向專門流程,達到關注點分離,避免一套提示詞打天下傷害不同類型輸入的表現。

STEP 2

生活妙喻

醫院的分診台

急診室的分診邏輯

Routing 就像醫院急診室的分診台 (triage)

病人一進門,分診護理師不會把所有人都塞給同一位醫生用同一套流程處理。她會先快速判斷:這是感冒、骨折,還是心臟病發?然後把病人導向對應的專科——感冒去內科、骨折去骨科、心臟病發直接送急救室。

如果沒有分診台,會發生什麼事?可能是一位全科醫生同時要顧感冒又要顧心臟病發,為了兼顧所有病症調整自己的判斷標準,結果每一種病都看得不夠精準——這正是原文說的「優化一種輸入會傷害其他輸入表現」。

分流也可以用在「找誰看診」上

醫院也會把普通感冒分給資源較少、速度較快的社區診所醫生(對應便宜的小模型),把複雜罕見病症分給專科主治醫師(對應能力更強的大模型),讓資源用在真正需要的地方。

flowchart LR
    A[病人 輸入] --> B[分診台 分類器]
    B -->|感冒| C[社區診所 小模型]
    B -->|罕見重症| D[專科醫師 大模型]
💡
關鍵

Routing 像醫院分診台:先判斷病症類型,再導向對應專科或資源等級,避免一位醫生兼顧所有病症反而顧不好。

STEP 3

實用超能力

設計一個客服 Routing 系統

動手設計:三分類客服系統

假設你要打造一個客服系統,先用一次 LLM 呼叫(或傳統分類模型)判斷使用者輸入屬於哪一類,再分派:

# 概念示意:Routing 的簡化程式骨架
category = classify(user_message)  # 回傳 "一般問題" / "退款請求" / "技術支援"

if category == "一般問題":
    response = call_llm(prompt=GENERAL_PROMPT, tools=[knowledge_base])
elif category == "退款請求":
    response = call_llm(prompt=REFUND_PROMPT, tools=[order_system, refund_api])
elif category == "技術支援":
    response = call_llm(prompt=TECH_PROMPT, tools=[diagnostic_tool])

每個分支都有自己專屬的提示詞與工具組合,不必勉強共用同一套。

判斷小技巧

下次遇到輸入類型混雜的任務,問自己:

  1. 這些輸入真的可以被清楚分成幾類嗎?
  2. 不同類別分開處理,真的能讓表現變更好嗎?
  3. 分類這一步,我能做得準嗎?(分類錯了,後面全盤皆錯)

三個問題如果都是「能」,Routing 通常就是值得投入的工作流模式;如果分類本身就很難做準,硬上 Routing 反而可能引入新的錯誤來源。

💡
關鍵

設計 Routing 系統要先確認『能否準確分類』與『分開處理是否真的更好』,兩者缺一都值得重新考慮。

🔆
生活妙喻:Routing ≈ 醫院急診室的分診台

分診護理師先判斷病症類型,再導向對應專科(不同提示詞與工具),避免一位全科醫生同時兼顧所有病症反而顧不好任何一種。

🔆
生活妙喻:依難度分流模型 ≈ 社區診所醫生 vs. 專科主治醫師

簡單常見的問題交給資源較輕、速度快的小模型(社區診所),複雜罕見的問題交給能力更強的大模型(專科醫師),把資源用在真正需要的地方。

本節字彙

Routing(路由)
先對輸入分類,再依分類結果導向對應的專門後續任務、提示詞與工具組合的工作流模式。
🧠 routing = 選路線,先判斷方向,再送去對的路。
關注點分離 (separation of concerns)
把不同類型的問題拆開處理,各自用專門設計的方式應對,而不是用同一套邏輯硬扛所有情況。
🧠 concern = 該關心的事,separation = 把不同該關心的事分開處理。
分類器 (classifier)
負責判斷輸入屬於哪一類的元件,可以是 LLM,也可以是傳統的分類模型或演算法。
🧠 classifier 就是分診台前的護理師,先判斷病症類型再分流。
Routing 工作流的核心運作方式是什麼?
原文提到,如果沒有 Routing、硬用同一套提示詞處理所有類型的輸入,可能發生什麼問題?
一個團隊想把客服問題依難度分流:簡單常見問題給便宜快速的小模型處理,複雜少見問題給能力更強的大模型處理。這最適合用哪種工作流?
03

更聰明的工作流:平行、指揮與互評

拆分任務同時跑(Sectioning)或多次跑同一任務取多數決(Voting),提升速度與信心。

先讀原文段落,旁邊就是白話

這是一本英文書。左邊放原文、右邊放白話導讀——你既讀得懂,也順手碰了原文。

原文 · 更聰明的工作流:平行、指揮與互評 Parallelization LLMs can sometimes work simultaneously on a task and have their outputs aggregated programmatically. This workflow, parallelization, manifests in two key variations: - **Sectioning**: Breaking a task into independent subtasks run in parallel. - **Voting:** Running the same task multiple times to get diverse outputs. The parallelization workflow **When to use this workflow:** Parallelization is effective when the divided subtasks can be parallelized for speed, or when multiple perspectives or attempts are needed for higher confidence results.
白話導讀

拆分任務同時跑(Sectioning)或多次跑同一任務取多數決(Voting),提升速度與信心。

工作流三:Parallelization 平行處理

拆分任務同時跑(Sectioning)或多次跑同一任務取多數決(Voting),提升速度與信心。

STEP 1

深度探秘

同時開工,再把結果彙整起來

什麼是 Parallelization?

Parallelization(平行處理)讓 LLM 同時對一項任務展開工作,再用程式把這些輸出彙整起來。這個模式有兩種關鍵變體:

  • Sectioning(分段):把一個任務拆成互相獨立的子任務,同時平行執行。
  • Voting(投票)同一個任務跑好幾次,得到多個獨立且各異的輸出,再彼此比對或投票。
flowchart TD
    A[任務] --> B[Sectioning 拆成獨立子任務]
    A --> C[Voting 同任務跑多次]
    B --> D[子任務一]
    B --> E[子任務二]
    D --> F[彙整結果]
    E --> F
    C --> G[輸出一]
    C --> H[輸出二]
    C --> I[輸出三]
    G --> J[比對 / 投票]
    H --> J
    I --> J

什麼時候該用?

Parallelization 在兩種情境特別有效:

  1. 子任務可以被平行化以加快速度——原本要依序做的事,同時做能省下大把時間。
  2. 需要多個角度或多次嘗試才能得到更有信心的結果——單一次嘗試不夠可靠時,多做幾次互相驗證。

原文還特別提到一個實務洞察:面對有多個考量因素的複雜任務,讓每個考量各自交給一個獨立的 LLM 呼叫處理,通常表現更好——因為每次呼叫能專注處理一個特定面向,不會被其他考量分散注意力。

常見應用範例

Sectioning:

  • 護欄機制 (guardrails):一個模型實例處理使用者查詢,另一個獨立篩查是否包含不當內容或請求——分開處理比同一次呼叫兼顧護欄與正常回應表現更好。
  • 自動化評測 (evals):每次 LLM 呼叫只評估模型表現的某一個面向。

Voting:

  • 程式碼安全審查:讓多個不同的提示詞分別審查同一段程式碼、各自標記發現的漏洞。
  • 內容審核:多個提示詞從不同角度評估內容是否不當,或要求不同的投票門檻,來平衡誤判與漏判。
💡
關鍵

Parallelization 分兩種:Sectioning 把任務拆成獨立子任務平行跑,Voting 讓同一任務跑多次取多角度結果。

STEP 2

生活妙喻

廚房同時開三個爐火,還是找三位評審打分

Sectioning:一人一菜,同時開工

想像辦一場宴席,如果所有菜都要一位廚師依序做完,客人可能餓到睡著。聰明的做法是:讓三位廚師同時各自負責一道菜——一位炒青菜、一位煎魚、一位煮湯,三個爐火同時開工,互不干擾,最後一起上桌。這就是Sectioning:任務彼此獨立,平行處理,省下大把時間。

Voting:找三位評審各自打分

另一種情境是選秀比賽:如果只找一位評審打分,難免有個人偏好或看走眼的風險。找三位評審各自獨立打分,再看多數意見或平均分數,結果通常更可靠、更有信心——這就是Voting:同一件事重複做幾次,用多個獨立視角互相驗證。

flowchart LR
    A[Sectioning] --> B[廚師一 炒青菜]
    A --> C[廚師二 煎魚]
    A --> D[廚師三 煮湯]
    E[Voting] --> F[評審一打分]
    E --> G[評審二打分]
    E --> H[評審三打分]

兩者的差別

Sectioning 的三位廚師做的是不同的事(不同的菜);Voting 的三位評審做的是同一件事(打同一道菜的分)。搞清楚這個差異,才能選對變體。

💡
關鍵

Sectioning 像多位廚師分工做不同菜同時開工;Voting 像多位評審各自獨立打同一道菜的分,取多數意見更可靠。

STEP 3

實用超能力

把護欄機制拆成獨立的第二個 LLM

練習:guardrails 的 Sectioning 實作

假設你在做一個客服聊天機器人,需要同時做到「正常回應使用者」和「篩查不當內容」。原文建議:不要讓同一個 LLM 呼叫兼顧兩件事,而是拆成兩個獨立的呼叫平行進行:

# 概念示意:Sectioning 實作 guardrails
import concurrent.futures

def main_response(query):
    return call_llm(prompt=MAIN_PROMPT, context=query)

def safety_check(query):
    return call_llm(prompt=SAFETY_PROMPT, context=query)

with concurrent.futures.ThreadPoolExecutor() as executor:
    future_response = executor.submit(main_response, user_query)
    future_safety = executor.submit(safety_check, user_query)
    response = future_response.result()
    is_safe = future_safety.result()

final_output = response if is_safe else "抱歉,這個請求無法處理"

練習:程式碼審查的 Voting 實作

如果要審查一段程式碼是否有漏洞,可以讓多個不同角度的提示詞(例如「檢查 SQL 注入」「檢查權限控管」「檢查輸入驗證」)各自獨立審查,只要任何一個標記出問題就整合起來回報——這樣比單一提示詞包山包海更不容易漏掉。

判斷小技巧

問自己:這些子任務彼此需要對方的輸出嗎? 如果不需要(各自獨立),且能同時進行,Parallelization 通常比循序處理(Prompt Chaining)更有效率或更可靠。

💡
關鍵

護欄機制適合用 Sectioning 拆成獨立呼叫平行跑;多角度審查適合用 Voting 讓多個提示詞各自獨立檢查再彙整。

🔆
生活妙喻:Sectioning ≈ 多位廚師同時各做一道菜

任務被拆成互相獨立的子任務,各自平行進行不互相干擾,最後把所有菜(結果)一起端上桌(彙整)。

🔆
生活妙喻:Voting ≈ 選秀比賽找三位評審各自打分

同一件事讓多個獨立視角各做一次,再看多數意見或平均結果,比單一次嘗試更可靠、更有信心。

本節字彙

Parallelization(平行處理)
讓 LLM 同時對任務展開工作,再用程式彙整輸出的工作流模式,包含 Sectioning 與 Voting 兩種變體。
🧠 parallel = 平行線,多條線同時往前走,不互相等待。
Sectioning(分段)
把一個任務拆成互相獨立的子任務,平行執行以節省時間或聚焦各自面向。
🧠 section = 分段,把整塊蛋糕切成幾段,各段同時處理。
護欄機制 (guardrails)
獨立於主要回應之外,用來篩查輸入或輸出是否包含不當內容、請求的安全檢查機制。
🧠 guardrail = 護欄,車道旁的護欄防止車子偏出軌道。
Parallelization 工作流裡的「Sectioning」與「Voting」兩種變體,最主要的差異是什麼?
原文提到,實作聊天機器人的護欄機制(guardrails)時,為什麼建議用「另一個獨立的模型實例」篩查不當內容,而不是讓同一次呼叫兼顧回應與篩查?
一個團隊想審查一段程式碼是否有安全漏洞,決定讓五個不同的提示詞分別從『SQL 注入』『權限控管』『輸入驗證』等不同角度各自審查同一段程式碼,最後彙整所有發現。這最符合哪種 Parallelization 變體?

工作流四:Orchestrator-workers 指揮與工人

中央 LLM 動態拆解任務、派給多個工人 LLM,再整合結果;與 Parallelization 的關鍵差異在「彈性」。

STEP 1

深度探秘

指揮官當場決定要派幾個人、做什麼

什麼是 工人 LLM、綜合結果的中央 LLM。">Orchestrator-workers?

在**Orchestrator-workers(指揮者-工人)工作流裡,有一個中央 LLM(指揮者)**負責:

  1. 動態拆解任務——把大任務拆成幾個子任務。
  2. 委派給工人 LLM——把拆好的子任務分派下去執行。
  3. 綜合結果——把工人們回報的結果整合成最終答案。
flowchart TD
    A[使用者輸入] --> B[指揮者 LLM]
    B -->|動態拆解並派工| C[工人 LLM 一]
    B -->|動態拆解並派工| D[工人 LLM 二]
    B -->|動態拆解並派工| E[工人 LLM 三]
    C --> F[指揮者彙整結果]
    D --> F
    E --> F
    F --> G[最終輸出]

跟 Parallelization 長得很像,但差在哪?

原文特別提醒:Orchestrator-workers 在拓樸結構上跟 Parallelization 很像(都是一個中心點連到多個並行處理),但關鍵差異在於彈性

Parallelization Orchestrator-workers
子任務內容 事先定義好的固定拆法 當場由指揮者依輸入內容決定
適合情境 任務結構已知、可預先拆分 任務結構無法預先預測

什麼時候該用?

這個工作流特別適合你無法預先預測會需要哪些子任務的複雜任務。原文舉的例子是寫程式:需要改動幾個檔案、每個檔案要怎麼改,往往取決於這次具體的任務內容,沒辦法事先寫死。

常見應用範例

  • 一次改動多個檔案的程式產品:指揮者依任務描述判斷要動哪些檔案、怎麼動。
  • 蒐集多來源資訊的搜尋任務:指揮者依查詢內容決定要去哪些來源蒐集、分析可能相關的資訊。
💡
關鍵

Orchestrator-workers 由中央 LLM 當場動態拆解任務並派工,跟 Parallelization 拓樸相似但子任務是動態決定而非預先定義。

STEP 2

生活妙喻

工地監工,現場決定怎麼分工

兩種蓋房子的方式

Parallelization(Sectioning) 像是蓋一棟制式樣品屋:設計圖早就畫好了,一開始就知道「這裡要三個工班:水電班、泥作班、油漆班」,各班同時進場、各做各的,事先分配好,照計畫執行。

Orchestrator-workers 則像是監工到了一個從沒見過的老屋,要進行不知道範圍多大的翻修工程。監工到現場當場勘查:喔,這裡壁癌要處理、那裡電線要重拉、屋頂可能要換——他當場決定要叫幾個工班、叫哪些工班、怎麼分工,因為在踏進這棟房子之前,根本沒人知道會遇到什麼狀況。

關鍵差異:計畫是「先畫好」還是「現場決定」

flowchart LR
    A[樣品屋 Parallelization] --> B[設計圖早就寫好三個工班]
    C[老屋翻修 Orchestrator-workers] --> D[監工現場勘查才決定怎麼分工]

監工(指揮者 LLM)的價值就在這裡:他能看著眼前的實際狀況,靈活決定該找誰、找幾個人、怎麼分配工作,而不是照著一份寫死的清單機械式執行。

💡
關鍵

Orchestrator-workers 像監工到現場才決定怎麼分工的老屋翻修,而非事先畫好設計圖的樣品屋施工。

STEP 3

實用超能力

設計一個能改多檔案的 Coding Agent 骨架

練習:程式修改任務的指揮者-工人架構

假設使用者說「幫我把整個專案裡所有用到已棄用函式 old_api() 的地方,換成新的 new_api(),並確認呼叫方式相容」。這個任務沒辦法事先知道要改幾個檔案:

# 概念示意:Orchestrator-workers 的簡化程式骨架
def orchestrator(task_description):
    # 指揮者先動態分析,決定要拆成哪些子任務(可能是任意數量的檔案)
    subtasks = call_llm(
        prompt="分析任務,列出需要修改的檔案與各自的修改要點",
        context=task_description
    )
    # 每個子任務交給一個工人 LLM 處理
    results = []
    for subtask in subtasks:
        result = call_llm(prompt="依修改要點編輯這個檔案", context=subtask)
        results.append(result)
    # 指揮者彙整所有工人的結果,確認整體一致性
    final = call_llm(prompt="彙整所有檔案修改,檢查是否有遺漏或衝突", context=results)
    return final

注意這裡的 subtasks 不是寫死的清單,而是指揮者依這次任務內容當場分析出來的。

判斷小技巧

問自己:如果換一個輸入,子任務的數量和內容會不會完全不同? 如果答案是「會」,那就代表這是 Orchestrator-workers 的地盤,而不是能用固定拆法的 Parallelization。

💡
關鍵

Orchestrator-workers 的程式骨架關鍵在於:子任務列表由指揮者當場分析產生,而非程式裡寫死的固定拆法。

🔆
生活妙喻:Orchestrator-workers ≈ 監工到從沒見過的老屋現場勘查後才決定分工

監工(指揮者)無法事先知道老屋狀況,必須現場勘查才能決定要叫哪些工班、怎麼分配任務,對應指揮者依輸入內容動態拆解任務。

🔆
生活妙喻:Parallelization 的 Sectioning 對比 ≈ 蓋制式樣品屋,設計圖早就畫好三個工班

任務結構已知、子任務事先定義好,各工班同時進場各做各的,對應 Sectioning 的固定拆分方式,與 Orchestrator-workers 的動態拆解形成對比。

本節字彙

指揮者 (orchestrator)
Orchestrator-workers 工作流中負責動態拆解任務、委派工人 LLM、綜合結果的中央 LLM。
🧠 orchestrator 像交響樂團指揮,現場依樂曲進行指揮各聲部,而非事先寫死每個人要做什麼。
工人 LLM (worker)
在 Orchestrator-workers 工作流中,接收指揮者委派的子任務並實際執行的 LLM 呼叫。
🧠 worker 就是被指派做特定子任務的執行者,做完回報給指揮者。
拓樸結構 (topology)
描述系統中各元件如何連接、資料如何流動的結構樣貌,原文用它來比較 Parallelization 與 Orchestrator-workers 的相似外型。
🧠 topology 就是『長得像不像』的結構圖,就算長得像,內部規則可能完全不同。
Orchestrator-workers 工作流與 Parallelization 工作流「拓樸結構相似」,但關鍵差異是什麼?
原文用「寫程式」作為 Orchestrator-workers 適用情境的例子,理由是什麼?
一個搜尋任務需要依查詢內容,當場決定要去哪些來源蒐集資訊、分析多少篇文章,這個數量和來源會隨每次查詢完全不同。這最適合用哪種工作流?

工作流五:Evaluator-optimizer 生成與互評

一個 LLM 產生內容,另一個 LLM 評估並給回饋,在迴圈中反覆打磨,像人類寫作反覆修稿。

STEP 1

深度探秘

一個寫、一個改,寫到滿意為止

什麼是 Evaluator-optimizer?

**Evaluator-optimizer(評估者-優化者)**工作流由兩個角色組成,在一個迴圈裡反覆運作:

  • 生成者 (generator):產生一份回應或內容。
  • 評估者 (evaluator):針對這份內容給出明確的評估與回饋

生成者根據評估者的回饋修改內容,再交給評估者檢查,如此反覆,直到達到滿意的品質或次數上限為止。

flowchart LR
    A[生成者 產生內容] --> B[評估者 給出評估與回饋]
    B -->|需要修改| A
    B -->|已達標準| C[輸出最終結果]

什麼時候該用?

原文指出這個工作流特別有效的兩個訊號

  1. 當人類清楚表達出回饋時,LLM 的回應確實能被明顯改善——也就是說,這類任務「改進空間」是存在且可被具體描述的。
  2. LLM 本身也能提供這樣的回饋——評估者角色需要有能力做出有意義、可操作的評價,不是隨口說好或不好。

原文用一個貼切的比喻:這很像人類作家反覆修稿的過程——寫一版,自己或編輯挑出問題,修一版,再挑,直到滿意為止。

常見應用範例

  • 文學翻譯:翻譯者 LLM 一開始可能沒抓到某些細膩的語感或雙關,但評估者 LLM 能指出這些細節,給出有用的批評,讓翻譯逐輪改善。
  • 複雜搜尋任務:需要多輪搜尋與分析才能蒐集到完整資訊,評估者負責判斷「目前資訊夠不夠、還要不要再搜尋一輪」。
💡
關鍵

Evaluator-optimizer 讓生成者與評估者在迴圈裡反覆互動,生成者依評估者的具體回饋修改,直到達標,像人類反覆修稿的過程。

STEP 2

生活妙喻

作家與編輯的反覆修稿

寫一本小說的真實過程

很少有作家能一次就寫出完美的定稿。真實的創作過程通常是:

  1. 作家(生成者)寫出第一版草稿
  2. 編輯(評估者)讀完後,給出具體的意見:「第三章節奏太快」「這個角色的動機不清楚」「這段對話不自然」——不是模糊地說「不夠好」,而是明確、可操作的回饋。
  3. 作家根據這些具體意見修改,交出第二版
  4. 編輯再讀一次,看看問題解決了沒,可能又挑出新的細節。
  5. 如此反覆,直到編輯覺得**「這樣可以出版了」**。

為什麼這個模式有效?

關鍵在於:編輯的回饋必須是具體、有建設性的,而不是空泛的「再加油」。如果編輯只會說「感覺不太對」卻說不出哪裡不對,作家根本無從修改——這正是原文說的「LLM 能提供這樣的回饋」這個前提有多重要。

flowchart TD
    A[作家寫草稿] --> B[編輯給具體意見]
    B --> C[作家依意見修改]
    C --> D{編輯滿意了嗎}
    D -->|否| B
    D -->|是| E[定稿出版]
💡
關鍵

Evaluator-optimizer 就像作家與編輯反覆修稿:編輯給具體、可操作的意見,作家據此修改,直到編輯點頭出版。

STEP 3

實用超能力

打造一個文學翻譯的評估-優化迴圈

練習:翻譯品質的反覆優化

假設任務是把一段有大量雙關語和文化梗的文學作品翻成中文,直接翻一次很難完美,適合用 Evaluator-optimizer:

# 概念示意:Evaluator-optimizer 的簡化迴圈
draft = call_llm(prompt="翻譯這段文學文字", context=source_text)

for attempt in range(MAX_ROUNDS):
    feedback = call_llm(
        prompt="評估這份翻譯是否保留原文語感、雙關、文化脈絡,給出具體修改建議",
        context={"original": source_text, "translation": draft}
    )
    if feedback["is_satisfactory"]:
        break
    draft = call_llm(
        prompt="根據以下具體建議修改翻譯",
        context={"translation": draft, "feedback": feedback["comments"]}
    )

final_translation = draft

注意這裡的停止條件:不是無限迴圈,而是「評估者滿意」或「達到最大嘗試次數」就停止——這跟 Agent 一節會提到的『停止條件』概念是相通的。

判斷小技巧

問自己兩個問題:

  1. 這類內容,改進空間是不是真實存在、且能被具體描述?(不是隨便猜)
  2. 評估者角色,是不是真的能給出有意義、可操作的回饋?

兩個答案都是「能」,Evaluator-optimizer 才值得投入;如果評估標準模糊到連人類都說不清楚哪裡該改,這個工作流很可能也幫不上忙。

💡
關鍵

打造 Evaluator-optimizer 迴圈時要設好停止條件,並確認評估者真的能給出具體、可操作的回饋,而非模糊評價。

🔆
生活妙喻:Evaluator-optimizer ≈ 作家與編輯反覆修稿

作家(生成者)寫草稿,編輯(評估者)給具體意見,作家依意見修改,反覆幾輪直到編輯滿意,才算定稿。

🔆
生活妙喻:評估者的回饋品質 ≈ 「感覺不太對」vs.「第三章節奏太快」

模糊的回饋讓生成者無從下手,具體、可操作的回饋才能真正帶來下一輪的改善,這是這個工作流能否成功的關鍵前提。

本節字彙

生成者 (generator)
Evaluator-optimizer 工作流中負責產生內容或回應的角色,會根據評估者的回饋反覆修改。
🧠 generator 就是負責『生出』內容的那一方,像作家寫草稿。
評估者 (evaluator)
負責檢查生成者輸出、給出明確評估與可操作回饋的角色,判斷是否已達標準或需要再修改。
🧠 evaluator 就是打分數、給意見的編輯,負責把關品質。
迭代 (iteration)
反覆執行同一個生成與評估的循環過程,每一輪都根據上一輪的回饋做出改善。
🧠 iteration = 一輪一輪重複做,直到滿意為止。
Evaluator-optimizer 工作流的核心運作方式是什麼?
原文指出,判斷一個任務是否適合用 Evaluator-optimizer 的兩個關鍵訊號是什麼?
一位編輯只對作家說「這篇文章感覺不太對」,卻說不出具體哪裡有問題。根據本節內容,這會對 Evaluator-optimizer 工作流造成什麼影響?
04

Agent 本身、實務案例與打造好工具

Agent 從人類的指令或對話出發,規劃後獨立行動,靠環境回饋確認進度,並在停止條件下收尾。

先讀原文段落,旁邊就是白話

這是一本英文書。左邊放原文、右邊放白話導讀——你既讀得懂,也順手碰了原文。

原文 · Agent 本身、實務案例與打造好工具 agent **When to use agents:** Agents can be used for open-ended problems where it's difficult or impossible to predict the required number of steps, and where you can't hardcode a fixed path. The LLM will potentially operate for many turns, and you must have some level of trust in its decision-making. Agents' autonomy makes them ideal for scaling tasks in trusted environments. The autonomous nature of agents means higher costs, and the potential for compounding errors.
白話導讀

Agent 從人類的指令或對話出發,規劃後獨立行動,靠環境回饋確認進度,並在停止條件下收尾。

Agent:自己規劃、自己行動、自己收尾

Agent 從人類的指令或對話出發,規劃後獨立行動,靠環境回饋確認進度,並在停止條件下收尾。

STEP 1

深度探秘

從指令到收尾,Agent 怎麼運作

Agent 的完整生命週期

前面幾節談的都是工作流——流程由程式決定。現在終於輪到真正的Agent:LLM 自己動態決定流程與工具使用。

原文描述 Agent 的典型運作流程:

  1. 開始:Agent 從人類的一句指令、或一段互動討論開始。
  2. 規劃與行動:一旦任務清楚,Agent 就獨立規劃、獨立操作,可能過程中回頭找人類確認資訊或判斷。
  3. 取得地面真相:執行過程中,Agent 必須不斷從環境取得回饋(例如工具呼叫的結果、程式執行的結果),用這些真實訊號評估自己的進度——原文稱之為「ground truth」。
  4. 人類checkpoint:Agent 可以在檢查點、或遇到卡關時暫停,等待人類回饋。
  5. 收尾:任務完成就結束,但也常見設定停止條件(例如最多跑幾輪迭代),避免失控。
flowchart TD
    A[人類指令 或 互動討論] --> B[任務清楚]
    B --> C[Agent 獨立規劃並行動]
    C --> D[從環境取得地面真相]
    D --> E{進度如何}
    E -->|需要調整| C
    E -->|卡關或到檢查點| F[暫停等待人類回饋]
    F --> C
    E -->|完成或達停止條件| G[任務結束]

為什麼「地面真相」這麼關鍵?

如果 Agent 只憑自己腦中的想像判斷進度,很容易愈走愈偏卻不自知。必須靠環境的真實回饋(工具回傳的資料、程式碼是否真的執行成功)校正自己的方向,這也是 Agent 能長時間自主運作、卻不至於完全失控的關鍵機制。

💡
關鍵

Agent 從人類指令出發,獨立規劃行動,靠環境的『地面真相』校正進度,並設有檢查點與停止條件避免失控。

STEP 2

生活妙喻

放手讓資深員工去談成一筆生意

一個貼切的職場場景

想像你是主管,交給一位資深業務一個任務:「幫我把這家客戶談下來」。你不會逐字逐句告訴他該說什麼話、該走哪個流程——你只給目標,剩下的交給他。

  • 他會自己規劃:先打電話還是先發信?該準備什麼提案?
  • 他會自己行動:實際去談,過程中根據對方反應調整策略。
  • 他會靠真實的回饋判斷進度:客戶回信了嗎?報價對方接受了嗎?——這就是他的「地面真相」,不是憑自己想像「應該差不多談成了」。
  • 遇到卡關時,他會回來找你:「客戶要求的折扣超出我的權限,你要不要親自出面?」——這就是檢查點。
  • 任務結束時,他知道該收尾了(合約簽了),也知道該停手了(談了三個月還沒進度,該報告放棄或改變策略)——這對應「停止條件」。

這跟工作流有什麼不同?

如果是工作流,你可能會寫一套死板的流程:「第一天打電話,第二天發信,第三天……」不管客戶實際反應如何都照表操課。而 Agent(資深業務)的價值正在於:他能依現場真實狀況隨時調整下一步

flowchart LR
    A[主管給目標] --> B[業務自己規劃行動]
    B --> C[依客戶真實反應 地面真相 調整]
    C --> D{卡關嗎}
    D -->|是| E[回頭找主管 checkpoint]
    D -->|否| B
💡
關鍵

Agent 像被放手去談生意的資深業務:只給目標,自己規劃行動、靠客戶真實反應調整策略,卡關才回頭找主管。

STEP 3

實用超能力

什麼任務值得放手讓 Agent 做?

判斷「值得放手」的三個條件

原文給出清楚的判斷標準:

  1. 開放式問題:很難或不可能預先預測需要多少步驟。
  2. 無法寫死路徑:任務的走法沒辦法事先用固定程式邏輯規劃出來。
  3. 可以信任模型的決策:因為 LLM 會運作多輪,你必須對它在這過程中的判斷有一定程度的信任。

原文強調:Agent 的自主性很適合在「受信任的環境」裡把任務規模化——但這份自主也意味著更高的成本錯誤累積、放大的風險

實務建議:先在沙盒裡跑

正因為風險存在,原文建議:

  • 在沙盒環境中做大量測試,觀察 Agent 實際會怎麼行動、會不會走偏。
  • 搭配適當的護欄 (guardrails),限制 Agent 能做的事情的邊界(例如不能直接刪除生產資料庫的資料)。

兩個 Anthropic 自己的實例

  • Coding Agent:用來解決 SWE-bench 的任務,根據任務描述直接修改多個檔案——這正是前一節談過、無法預先寫死子任務的典型情境。
  • 「Computer use」參考實作:讓 Claude 直接操作電腦畫面完成任務,是完全開放式問題的極端例子。
flowchart TD
    A[任務進來] --> B{能預測步驟數嗎}
    B -->|能| C[考慮用工作流]
    B -->|不能| D{能信任模型決策嗎}
    D -->|能,且已做好護欄與沙盒測試| E[考慮用 Agent]
    D -->|不能| F[先降低任務開放度或加強護欄]
💡
關鍵

Agent 適合開放式、無法預先寫死路徑的任務,但要先在沙盒中大量測試並搭配護欄,因為自主性帶來更高成本與犯錯風險。

🔆
生活妙喻:Agent 的自主運作 ≈ 放手讓資深業務去談成一筆生意

只給目標,業務自己規劃、自己行動,靠客戶的真實反應(地面真相)調整策略,卡關才回頭找主管(人類checkpoint)。

🔆
生活妙喻:地面真相 (ground truth) ≈ 業務看客戶是否真的回信、真的簽約,而非憑自己猜測

Agent 必須依賴環境給出的真實回饋(工具結果、程式執行結果)判斷進度,不能只憑自己內部的想像做判斷。

本節字彙

地面真相 (ground truth)
Agent 執行過程中從環境(如工具呼叫結果、程式執行結果)取得的真實回饋,用來確認自己的進度是否正確。
🧠 ground truth = 腳踏實地的真相,不是憑空想像出來的進度。
檢查點 (checkpoint)
Agent 執行過程中暫停、等待人類回饋或判斷的節點,通常出現在關鍵決策點或遇到障礙時。
🧠 checkpoint 就是路上的檢查哨,過站要停下來給人看一下。
停止條件 (stopping conditions)
為避免 Agent 無限制運作而預先設定的終止規則,例如最大迭代次數,用來維持對系統的控制。
🧠 stopping condition = 喊停的規則,跑太久就自動打住。
根據原文,Agent 執行任務過程中,為什麼必須不斷從環境取得「地面真相」?
用「放手讓資深業務談生意」的比喻,業務「回頭找主管詢問是否能給超出權限的折扣」對應到 Agent 架構裡的什麼機制?
根據原文,適合放手讓 Agent 處理的任務通常具備哪些特徵?

實務現場:客服與寫程式 Agent

看客服與 Coding Agent 兩個真實案例,理解怎樣的任務特質最適合交給 Agent。

STEP 1

深度探秘

兩個真實案例的共同特徵

Appendix 1:Agent 在實務中最亮眼的兩個領域

Anthropic 與客戶合作的經驗中,發現兩個特別能展現 Agent 價值的應用領域:客服寫程式。它們有一個共同的深層特徵——原文總結為四點:

  1. 需要對話與行動兼具(不是只回答問題,還要真的做事)。
  2. 清楚的成功標準(能明確判斷這次任務算不算成功)。
  3. 能形成回饋迴圈(做完能立刻知道結果好不好)。
  4. 能整合有意義的人類監督(在關鍵時刻讓人類把關)。

A. 客服:對話介面 + 工具整合

客服場景天然適合開放式 Agent,因為:

  • 支援互動本身自然依循對話流程,但同時需要存取外部資訊與執行動作。
  • 工具可以整合客戶資料、訂單紀錄、知識庫文章。
  • 動作(如發放退款、更新工單)可以直接程式化執行。
  • 成功能透過使用者自訂的解決標準清楚衡量。

原文提到一個很有意思的商業訊號:已有多家公司採用「只在成功解決問題時才收費」的計費模式,這代表他們對自家 Agent 的成效有相當高的信心。

B. Coding Agents:程式碼的可驗證特質

軟體開發領域展現出驚人潛力,從單純的程式碼補全演變到自主解決問題,因為:

  • 程式碼解法可以透過自動化測試驗證
  • Agent 能用測試結果作為回饋來迭代改進解法。
  • 問題空間結構清晰、定義明確
  • 輸出品質能被客觀衡量

Anthropic 自己的實作已經能單靠 pull request 描述,解決 SWE-bench Verified 基準測試中的真實 GitHub issue。不過原文也提醒:自動化測試能驗證功能是否正確,但人類審查仍然是確保解法符合更廣泛系統需求的關鍵

💡
關鍵

客服與寫程式 Agent 之所以特別成功,是因為都具備『對話與行動兼具、成功標準清楚、有回饋迴圈、有人類監督』四個共同特徵。

STEP 2

生活妙喻

為什麼這兩個領域像「量身訂做的舞台」

想像一場考試 vs. 一場開放式辯論

有些任務像申論題沒有標準答案的辯論:誰都說得通,很難判斷誰對誰錯,這種任務讓 Agent 難以自我校正,因為它不知道自己做得好不好。

但客服和寫程式,更像有明確評分標準的考試

  • 客服像客服中心的「案件是否結案」制度:顧客滿意度、問題是否解決,都是可以打勾的具體指標。就像一場口試,考官(顧客)當場就會告訴你「這題答對了沒」。
  • 寫程式像一場自動評分的程式測驗:寫完程式碼,跑一下測試案例,馬上知道「通過」還是「失敗」,不需要等人來主觀評分。

為什麼「當場知道對錯」這麼重要?

如果 Agent 做完一步卻不知道自己做得對不對,它就沒辦法自我修正、往正確方向前進——就像一個人在黑暗中射箭,永遠不知道有沒有中靶。而客服與寫程式恰好都提供了清楚、即時的靶心回饋:訂單有沒有處理成功?測試有沒有通過?

flowchart LR
    A[Agent 採取行動] --> B[明確的成功標準]
    B --> C[即時回饋 顧客滿意 或 測試結果]
    C --> D[Agent 據此調整下一步]
    D --> A
💡
關鍵

客服與寫程式像有明確評分標準的考試,Agent 能立刻知道自己做得對不對,這種即時回饋是它們特別適合用 Agent 的關鍵原因。

STEP 3

實用超能力

用四個特徵檢視你的任務適不適合做成 Agent

拿你手邊的任務對照四個特徵

下次你在評估「這個任務適不適合做成 Agent」時,可以拿出這張檢查清單,逐項對照:

特徵 檢查問題 客服案例 寫程式案例
對話 + 行動 是否既要溝通、又要真的做事? 對話 + 查資料/退款 需求討論 + 改程式碼
清楚成功標準 能明確判斷成功與否嗎? 使用者定義的解決標準 通過自動化測試
回饋迴圈 做完能立刻知道好不好嗎? 顧客反應、工單狀態 測試結果
人類監督 有沒有安排人類把關的節點? 客服升級人工處理 人工審查 PR

如果你的任務四項都能打勾,這通常是投入 Agent 的好時機;如果成功標準模糊沒有回饋迴圈,那麼即使任務看起來很「智能」,也可能更適合用工作流,甚至只是單次 LLM 呼叫。

別忘了人類審查這一關

原文特別強調:即使自動化測試能驗證功能正確性,人類審查仍然不可或缺,因為測試只能驗證「程式碼是否如預期運作」,卻無法完全確認解法是否符合更廣泛的系統設計、商業邏輯或架構考量。這提醒我們:Agent 的自主性再高,人類監督這一環都不該被省略。

💡
關鍵

評估任務是否適合做成 Agent,可用『對話+行動、清楚成功標準、回饋迴圈、人類監督』四項特徵逐一檢查,缺一項就要謹慎考慮。

🔆
生活妙喻:客服與寫程式適合 Agent 的原因 ≈ 有明確評分標準的考試,而非沒有標準答案的辯論

客服有顧客滿意度、寫程式有自動化測試結果,都能當場給出清楚的對錯回饋,讓 Agent 能像考生一樣即時知道自己表現如何、據此調整。

🔆
生活妙喻:自動化測試 vs. 人類審查 ≈ 考試通過不代表面試官不用再看一眼

測試能驗證程式碼功能是否正確,但無法確認解法是否符合更廣泛的系統需求,就像筆試過關仍需要面試官從更全面的角度把關。

本節字彙

回饋迴圈 (feedback loop)
行動後能立即得到結果好壞的訊號,並據此調整下一步行動的機制,是 Agent 能自我校正的關鍵條件。
🧠 feedback loop = 回饋一圈接一圈,做了馬上知道好不好,再繼續調整。
SWE-bench Verified
一個用真實 GitHub issue 評估 Coding Agent 能力的基準測試,衡量 Agent 能否僅憑 pull request 描述解決真實軟體問題。
🧠 SWE-bench = Software Engineering 的『考試題庫』,考的是真實世界的程式問題。
人類監督 (human oversight)
在 Agent 自主運作的流程中,保留人類在關鍵節點審查、把關的機制,確保結果不僅功能正確,也符合更廣泛的需求。
🧠 oversight = 站在旁邊多看一眼,不完全放手不管。
根據原文,客服與寫程式這兩個領域之所以特別適合用 Agent,共同具備哪四個特徵?
原文提到「有多家公司採用只在成功解決問題時才收費的計費模式」,這個現象在文中主要用來說明什麼?
為什麼原文特別強調「自動化測試能驗證功能,但人類審查仍然關鍵」?

把工具打磨好:Agent-Computer Interface

工具定義值得和提示詞一樣被精雕細琢;透過同理模型、測試迭代與『防呆』設計打造好用工具。

STEP 1

深度探秘

工具定義值得和提示詞一樣被精雕細琢

為什麼工具設計這麼重要?

Agent 的實作往往很直白:基本上就是 LLM 根據環境回饋,在迴圈裡使用工具。正因如此,工具與工具說明文件設計得清不清楚,直接決定了 Agent 表現的好壞。原文用一整篇附錄(Appendix 2)專門討論這件事。

同一個動作,可以有很多種表達方式

原文舉例:要指定一次檔案編輯,你可以:

  • 寫一份diff(差異片段);或
  • 直接重寫整個檔案

要回傳結構化輸出,你可以:

  • 把程式碼包在Markdown 裡;或
  • 包在JSON 裡。

這些差異在軟體工程角度看是表面的 (cosmetic)——可以無損地互相轉換。但對 LLM 來說,某些格式比其他格式難寫得多

  • 寫 diff 需要先知道這段變更會改幾行(在寫新程式碼之前,就要算出 chunk header 的行數)——這對模型是額外的認知負擔。
  • 把程式碼包進 JSON(相較於 Markdown)需要額外處理換行與引號的escaping——這也是無關緊要卻容易出錯的細節。

三個挑選工具格式的建議

  1. 給模型足夠的 token『思考』,別讓它還沒想清楚就被迫寫死答案,把自己寫進死角。
  2. 格式盡量貼近模型在網路文本中自然見過的樣子——模型見過越多次的格式,用起來越順手。
  3. 消除不必要的格式『overhead』——像是要求精確計算幾千行程式碼的行號,或是要求把程式碼字串轉義,這些都是與任務本身無關、卻容易產生錯誤的額外負擔。
💡
關鍵

工具格式的選擇看似只是表面差異,但對 LLM 的『好寫程度』影響很大:貼近自然文本格式、減少無關的格式負擔,能大幅降低出錯率。

STEP 2

生活妙喻

把 HCI 的用心,搬來做 ACI

人機介面設計,早就是一門顯學

我們都知道,設計一支好用的手機、一個好用的網站,需要投入大量心力做人機互動介面 (Human-Computer Interface, HCI)——按鈕要放在哪、字要多大、操作邏輯要多直覺,這些都被反覆打磨過。

原文提出一個關鍵類比:

該投入多少心力在 HCI 上,就該投入多少心力在「Agent-電腦介面」(Agent-Computer Interface, ACI)上。

也就是說,你替 LLM 設計的工具,就像替一位新來的『數位員工』設計操作介面。如果按鈕標示不清、操作邏輯彆扭,一般人類使用者會用得很挫折;同樣道理,如果工具的參數名稱模糊、說明不清楚,LLM 也會頻頻用錯。

站在模型的角度,重新審視你的工具

把自己想像成第一次拿到這個工具的人:

  • 光看工具描述和參數,我能不能一眼看懂怎麼用?還是得反覆猜測、試錯?
  • 如果連我自己(設計者)都要想很久才搞懂,那模型大概率也會卡住。

一個好的工具定義,通常會包含使用範例、邊界情況、輸入格式要求,以及與其他工具的清楚界線——就像一份寫給新進工程師的優質文件。

flowchart LR
    A[HCI 人機介面] -->|投入等量心力| B[ACI Agent電腦介面]
    A --> C[按鈕清楚 操作直覺]
    B --> D[工具說明清楚 參數命名直覺]
💡
關鍵

投入多少心力打磨人機介面,就該投入多少心力打磨 Agent 與工具間的介面;好工具說明要像寫給新人的優質文件。

STEP 3

實用超能力

四步驟打磨你的工具

實務打磨流程

原文給出具體的操作建議,可以整理成四個實用步驟:

  1. 同理模型:問自己「光看描述和參數,這個工具好不好上手,還是需要仔細想過才會用?」如果連你自己都要想,模型大概也會卡住。
  2. 改善命名與說明:把參數名稱、描述寫得更明確——想像自己在替團隊裡的新人寫一份清楚的文件,尤其在有很多相似工具時,這一步特別重要。
  3. 實測、觀察、迭代:在 workbench 這類環境中,跑大量範例輸入,觀察模型實際上會在哪裡犯錯,然後不斷調整工具設計。
  4. poka-yoke 你的工具:這是一個源自日文的品管術語,意思是改造設計讓犯錯變得更困難——透過修改參數形式,讓模型幾乎不可能用錯。

Anthropic 自己踩過的坑:相對路徑 vs. 絕對路徑

原文分享了一個真實案例:在打造 SWE-bench 用的 Agent 時,他們發現模型使用相對檔案路徑的工具時,一旦 Agent 已經移出根目錄,就很容易犯錯——因為模型很難時刻記住自己目前在哪個目錄。

解法:把工具改成永遠要求絕對路徑。改完之後,模型使用這個工具的方式變得完全正確、零失誤

# 修改前:容易因為目前工作目錄不確定而出錯
edit_file(path="src/utils.py")

# 修改後:poka-yoke,強制使用絕對路徑,消除歧義
edit_file(path="/home/project/src/utils.py")

這個真實案例完美示範了「poka-yoke」的精神:不是靠提示詞叮嚀模型『請小心使用相對路徑』,而是直接改造工具,讓犯錯的可能性從結構上被消除

💡
關鍵

打磨工具的四步驟:同理模型、改善命名說明、實測迭代、poka-yoke 防呆設計;絕對路徑取代相對路徑就是典型的防呆案例。

🔆
生活妙喻:Agent-Computer Interface (ACI) ≈ 替新來的數位員工設計操作介面,就像設計人機介面一樣用心

投入在 HCI(人類使用者介面)上的心力,也該同等投入在 ACI(Agent 與工具的介面)上,工具說明要清楚到讓模型一看就懂怎麼用。

🔆
生活妙喻:poka-yoke 防呆設計 ≈ 把插頭設計成只能用一種方向插進插座

不是靠提醒使用者小心,而是直接改造設計讓犯錯在結構上變得不可能,例如強制工具使用絕對路徑,讓模型幾乎不會用錯。

本節字彙

Agent-Computer Interface (ACI)
Agent 與其使用的工具之間的介面設計,類比於人機介面 (HCI),值得投入同等的設計與打磨心力。
🧠 ACI 就是『機器人版的 HCI』,一樣要講究好不好用。
poka-yoke(防呆)
源自日文的品管術語,指透過改造設計讓犯錯在結構上變得困難或不可能,而不是靠提醒或叮囑避免犯錯。
🧠 poka-yoke = 防止呆錯,把犯錯的可能性直接設計掉。
escaping(轉義)
在字串中插入特殊符號,避免換行、引號等字元被誤判為程式結構的一部分,是把程式碼包進 JSON 時常見的額外負擔。
🧠 escape = 逃脫,讓特殊字元『逃脫』被誤解的命運,乖乖被當成普通文字。
原文用「寫 diff」與「重寫整個檔案」的例子想說明什麼?
原文提出的類比「該投入多少心力在 HCI 上,就該投入多少心力在 ACI 上」,最想傳達的核心觀念是什麼?
Anthropic 團隊在打造 SWE-bench 的 Coding Agent 時,發現模型使用「相對路徑」工具容易出錯,他們的解法「強制要求絕對路徑」,這個做法體現了原文提到的哪個原則?

總結:簡單、透明、打磨好工具

回顧三個核心原則——簡單、透明、把 Agent-Computer Interface 磨好——收尾整章的實務建議。

STEP 1

深度探秘

成功不是做出最複雜的系統

全文最重要的一句話

讀完整篇文章,原文用一段話總結核心精神:

LLM 領域的成功,不是做出最精巧複雜的系統,而是做出剛好適合你需求的系統。

具體的實踐路徑是:

  1. 簡單提示詞開始。
  2. 完整的評估 (comprehensive evaluation) 來優化它們。
  3. 只有當更簡單的方案明顯不夠用時,才加入多步驟的代理系統。

這句話呼應了本章開頭第一節就強調的原則——先求簡單,再談複雜,現在我們繞了一圈回到這個起點,但多了整整一章的具體知識支撐它。

三個核心原則

實作 Agent 時,原文提出三個應該遵循的核心原則:

原則 具體做法
簡單 (simplicity) 維持 Agent 設計的簡單性,別為了複雜而複雜
透明 (transparency) 明確展示 Agent 的規劃步驟,讓人類看得懂它在想什麼
打磨 ACI (documentation and testing) 透過完整的工具文件與測試,仔細打磨 Agent-Computer Interface

這三個原則,其實正好對應了整篇文章的三大主題:要不要用代理系統的判斷(簡單)Agent 執行過程中的可觀察性(透明)、以及工具設計的打磨(ACI)

💡
關鍵

成功的關鍵不是系統多複雜,而是多合適;三大原則——簡單、透明、打磨工具介面——貫穿整篇文章的核心精神。

STEP 2

生活妙喻

蓋房子不是比誰的藍圖線條最多

建築師的智慧

一位好的建築師,不會因為想炫技就把房子設計得越複雜越好——樑柱交錯得越花俏、機關越多,房子反而越容易出問題、越難維護。真正厲害的建築師,設計出的房子是剛好符合居住者需求的:夠用、耐用、住起來順手。

對應到三個原則:

  • 簡單:不會為了展現設計能力硬塞多餘的結構,房間夠用就好,不需要為了「看起來厲害」多蓋一層根本用不到的樓層。
  • 透明:好房子的管線圖、電路圖都清楚標示,維修工人一看就知道問題在哪,不必砸開牆壁到處猜。
  • 打磨介面門把、開關、水龍頭都設計得直覺好用——這正對應 ACI,讓使用者(模型)一用就懂,不需要說明書都能上手。
flowchart TD
    A[好的 Agent 系統] --> B[簡單 不多蓋沒用的樓層]
    A --> C[透明 管線電路圖清楚標示]
    A --> D[打磨 ACI 門把開關直覺好用]

框架就像請了設計顧問

原文提到框架能幫助快速起步,就像請一位設計顧問幫你套用現成的設計範本,能加快初期規劃;但等你真的要長期住進這棟房子(正式環境),別怕依照自己真正的需求,把不合用的部分拆掉重建

💡
關鍵

好系統像一棟剛好符合需求的房子:不多蓋沒用的結構(簡單)、管線清楚標示(透明)、門把開關直覺好用(打磨 ACI)。

STEP 3

實用超能力

把整章知識串成一張決策地圖

從頭到尾的決策流程

走過這一整章,我們可以把所有知識串成一張實用的決策地圖,下次遇到「該怎麼設計這個 LLM 系統」的問題時直接拿出來用:

flowchart TD
    A[有個任務要用 LLM 解決] --> B{單次呼叫加檢索/範例夠嗎}
    B -->|夠| C[優化單次呼叫 收工]
    B -->|不夠| D{任務能拆成固定步驟嗎}
    D -->|能 且循序依賴| E[Prompt Chaining]
    D -->|能 且需先分類| F[Routing]
    D -->|能 且子任務彼此獨立| G[Parallelization]
    D -->|能 且需要反覆生成評估| H[Evaluator-optimizer]
    D -->|不能 步驟數無法預測| I{子任務能動態決定嗎}
    I -->|能 有中央指揮| J[Orchestrator-workers]
    I -->|開放式 需要模型自主決策| K[Agent]
    K --> L[別忘了 打磨工具 ACI]
    K --> M[別忘了 設護欄與停止條件]
    K --> N[別忘了 沙盒測試]

三句話收尾

如果只能記住三句話,就記住:

  1. 先求簡單,只有真的需要才加複雜度——複雜是最後手段,不是起手式。
  2. 搞懂你在用的是工作流還是 Agent,這決定了你的除錯方式與信任程度。
  3. 不管做的是工作流還是 Agent,工具與介面都值得像人機介面一樣被認真打磨——這往往是決定成敗的隱藏關鍵。

框架能幫你快速起步,但別忘了:走向正式環境時,勇於拆掉不必要的抽象層,用基本元件打造出真正可靠、可維護、被使用者信任的系統。

💡
關鍵

整章知識可以串成一張決策地圖:先試單次呼叫,再依任務特性選工作流模式,真的需要開放式自主才上 Agent,且務必打磨好工具介面。

🔆
生活妙喻:好的 Agent 系統設計 ≈ 剛好符合居住需求的房子,而非炫技的複雜建築

不多蓋沒用的樓層(簡單)、管線電路標示清楚(透明)、門把開關直覺好用(打磨 ACI),這正是三個核心原則的具體展現。

🔆
生活妙喻:邁向正式環境時拆掉框架 ≈ 請設計顧問幫忙起步,但長住之後依自己需求裝修

框架像設計顧問提供的現成範本,能加速初期規劃,但長期使用時應該依真實需求調整,不怕拆掉不合用的抽象層重新打造。

本節字彙

簡單 (simplicity)
Agent 設計應遵循的第一原則,避免為了複雜而複雜,只在真正需要時才增加設計的複雜程度。
🧠 simplicity = 越簡單越好,複雜是不得已才用的最後手段。
透明 (transparency)
Agent 設計應遵循的第二原則,明確展示 Agent 的規劃步驟,讓人類能理解與追蹤它的決策過程。
🧠 transparency = 看得透,規劃步驟像玻璃一樣清楚可見,不是黑箱。
完整的評估 (comprehensive evaluation)
在優化簡單提示詞的階段就該建立的評估機制,用來確認方案表現是否足夠好,判斷要不要進一步增加複雜度。
🧠 comprehensive evaluation = 全面體檢,先把簡單方案的表現徹底檢查清楚,再決定要不要動大手術。
根據原文的總結,LLM 領域的成功關鍵是什麼?
原文提出的三個核心原則——簡單、透明、打磨 ACI——其中「透明」具體指的是什麼?
用「蓋房子」的比喻,「管線圖、電路圖清楚標示,維修工人一看就知道問題在哪」對應到三個核心原則中的哪一個?