Agent 是什麼?先想清楚要不要用
同一個字,工程師講的常常不是同一件事——先畫清界線,再談要不要動手蓋
「Agent」這個字,其實有點混亂
過去一年,Anthropic 團隊和數十個產業的客戶一起打造 LLM Agent, 發現一個有趣的現象:最成功的實作,往往不是靠複雜的框架或專門的函式庫堆出來的,而是用簡單、可組合的模式拼起來的。
但問題是,「Agent」這個詞本身很模糊。有人說它是完全自主、能長時間獨立運作、自己選工具完成複雜任務的系統;也有人拿它形容照著預先定義好的流程在跑的實作。同一個字,兩種完全不同的東西。
想像你今天要做一頓晚餐。有一種做法是照著食譜一步步來——切菜、熱鍋、下油、下料,每一步都寫得清清楚楚;另一種做法是把廚房直接交給一位經驗老到的大廚,只說「我要一頓讓客人驚艷的晚餐」,剩下的全部交給他自己判斷。這兩種,做出來的「晚餐」性質完全不同。
Anthropic 怎麼畫這條線:原文對照
Anthropic 的做法是:把所有變體都先歸類成 代理系統(agentic systems), 再在底下畫出一條真正重要的架構分界線——直接讀官方原文,比任何轉述都精準:
在 Anthropic,我們把這些變體統稱為「代理系統」,但在底下畫出一條重要的架構分界線——工作流(workflows)與 Agent(agents)。
工作流:LLM 和工具,是照著預先寫好的程式路徑被編排、被指揮的系統。
Agent 則相反:LLM自己動態決定流程要怎麼走、要用哪些工具,掌控權在它自己手上。
打造 LLM 應用時,我們建議先找出最簡單能解決問題的方法,只有真的需要時才增加複雜度。
這甚至可能意味著——根本不需要打造代理系統。
下次要分辨眼前這個系統是工作流還是 Agent,只要問:「決定下一步要做什麼的,是寫好的程式碼,還是模型自己?」答案是程式碼,就是工作流;答案是模型自己,就是Agent。
兩張卡片,定義兩種性格
這條分界線幾乎決定了你系統的「性格」。工作流像照著食譜做菜,每次做出來的味道都差不多;Agent 像請大廚自由發揮,可能驚喜連連,也可能失控。
LLM 與工具照著預先寫好的程式路徑被編排執行。流程固定,每次跑出來都差不多——換來的是可預測性與一致性。適合任務明確、可以乾淨拆成固定步驟的情境。
LLM自己動態決定流程怎麼走、用什麼工具,掌控權在它手上。換來彈性,能應付開放、多變的任務——代價是更高的 延遲 與成本,也更難預測。
代理系統(不管工作流還是 Agent)常常是拿更高的延遲與成本,去換更好的任務表現——這是一筆交易,你得先誠實評估划不划算。原文甚至直接說:對很多應用而言,優化單次 LLM 呼叫(搭配 情境內範例 與檢索)通常就已經足夠,根本不必勞師動眾上代理系統。
動手分分看:這個情境該用哪一種?
把下面六個實際情境,拖到它比較適合的分類——「用工作流」還是「用 Agent」。拖完按「對答案」。
不是「聽起來複雜」就該上 Agent。真正的判準是:這條路徑「能不能在寫程式的當下就先想清楚、寫死」。能,就是工作流的地盤;不能——得等模型看到當下狀況才知道下一步——才輪到 Agent 出場。
框架能幫你,也能害你
市面上有不少框架能簡化打造代理系統的過程,例如 Claude Agent SDK、AWS 的 Strands Agents SDK,或拖拉式的 Rivet、Vellum 等 GUI 工具。它們把呼叫 LLM、定義與解析工具、串接多次呼叫這些低階雜事都幫你包好了。
但原文也提出警告:框架常常會多加一層抽象,模糊掉底層真正送出去、收回來的提示詞與回應,讓除錯變得更難;也容易讓人「順手」加了不必要的複雜度。
很多模式其實幾行程式碼就能實作。親自用 LLM API 直接寫過一次,你才知道框架到底幫你省了什麼。
如果決定用框架,一定要懂它底層在做什麼——「對底層運作的錯誤假設」是客戶最常見的出錯來源。
框架適合起步,不代表適合正式環境。別怕拆掉不必要的抽象層,換成更貼近底層的基本元件。
小試身手
看懂這一格,你就抓到整章的核心判斷框架了。來兩題:
先搞懂什麼是「加強型 LLM」——所有代理系統共用的最小單位,再看最簡單的一種工作流:Prompt Chaining 接龍。往下捲。
基石:加強型 LLM 與鏈式工作流
先把新人變成配好裝備的專員,再學兩招最基本的排兵佈陣——接龍與分流
在疊工作流之前,先把「地基」打好
不管你最後想蓋的是一個簡單的三步驟流程,還是一個能自主決策的複雜 Agent, 一切都是從同一塊最小積木開始的: 加強型 LLM(the augmented LLM)。
它比一般 LLM 多了三樣裝備:
主動查找需要的資訊,不再只靠腦中記得的東西亂猜。
呼叫外部功能來完成任務——寄信、算數字、查天氣,通通能自己動手。
記住之前發生過的事,還會自己判斷什麼資訊值得留下來。
關鍵在於,現在的模型已經能主動使用這些能力——自己生成搜尋查詢、自己選該用哪個工具、自己判斷什麼資訊值得記住。這跟過去「工程師手動決定每一步要查什麼」是完全不同的層次。
一個普通 LLM,就像剛入職、什麼資源都沒有的新人:只能憑腦子裡記得的東西回答問題,問他公司上個月的業績,他只能靠印象亂猜。加強型 LLM,則是替這位新人配好了裝備的專員——給他一台能查資料庫的電腦(檢索)、一支萬用工具腰帶(工具)、一本隨身筆記本(記憶)。他不只是被動等你告訴他怎麼做,還會自己判斷現在該不該查、該用哪個工具、這件事值不值得記下來。
原文怎麼說:地基打好,後面才蓋得穩
這幾句話,是整篇文章從「打地基」進入「蓋工作流」的關鍵轉折。左邊是 Anthropic 原文,右邊是白話翻譯,一句對一句:
代理系統最基本的建構單元,是一個裝上檢索、工具、記憶等加強能力的 LLM。
現在的模型已經能主動使用這些能力——自己生成搜尋查詢、自己選合適的工具、自己判斷該記住什麼資訊。
我們建議聚焦兩個重點:把能力打磨到貼合你的具體使用情境,並確保這些能力對 LLM 而言介面清楚、文件完整。
從這裡開始,本文接下來的所有內容,都預設每次 LLM 呼叫背後,都已經具備這些加強能力。
「假設每次呼叫都已加強」這句話很好懂但很重要——後面要介紹的每一種工作流、每一種 Agent,骨子裡疊的都是這塊地基,不用每次重講一次「這次呼叫有沒有工具」。
怎麼實作這些加強能力?MCP 是其中一種答案
檢索、工具、記憶,實作方式有很多種。其中一種是 Anthropic 推出的 Model Context Protocol(MCP): 它讓開發者只需寫一個簡單的客戶端實作,就能接上一個不斷成長的第三方工具生態系,不必每個工具都重新造輪子。
不用替每個第三方工具重新設計一套介面,寫一個簡單的客戶端就能接上不斷成長的工具生態系——就像一個轉接頭適用所有插座,而不是每個國家的插座都自己買一顆變壓器。
在往上疊工作流或 Agent 之前,先問自己三個問題:我給模型的檢索能力,真的能查到它需要的資訊嗎?我給模型的工具,說明清楚到模型一看就懂該怎麼用嗎?模型需要記住的東西,有被妥善保留下來嗎?
很多團隊一開始就想直接打造複雜的多步驟 Agent,卻忽略了最基本的問題:你的加強型 LLM 本身夠不夠好用?地基沒打好,上面疊再多流程也是空中樓閣。
工作流一:Prompt Chaining(提示詞接龍)
Prompt Chaining 把一個任務拆解成一連串步驟,每一次 LLM 呼叫都處理前一步的輸出,像接龍一樣一步接一步往下傳。你還可以在中間插入 程式化檢查(gate), 確保流程沒有跑偏。
下面演給你看:一份雙語產品公告,怎麼從草稿一路接龍到中英文雙版本,中間還會被品管站攔一次。按「下一步」試試看——如果卡在關卡,流程會被打回上一步重做。
Prompt Chaining 就像工廠生產線:每一站的工人只專心做好自己那一站的工作,不需要同時煩惱裁切、組裝、包裝三件事。如果沒有品管站,第一站的瑕疵品會一路帶著錯誤流到最後才被發現,等到包裝完才報廢,浪費更多成本——這正是「用延遲換準確度」:多花幾道檢查的時間,換每一步都做對的機率。
這個工作流最適合任務能被乾淨拆解成固定子任務的情境,例如:先生成行銷文案再翻譯成另一種語言;或是先寫文件大綱、檢查大綱是否符合標準,通過後再依大綱寫出完整文件。這兩個例子都有一個共同特徵——後一步天生依賴前一步的結果,而且每一步都能被單獨檢查、單獨優化。
工作流二:Routing(路由分派)
Routing 會先替輸入分類,再依分類結果把它導向一個專門的後續任務。這樣就能做到 關注點分離—— 替不同類型的輸入各自打造更精準的提示詞,而不必用同一套提示詞硬扛所有情況。
原文提醒:如果沒有 Routing,「為某一種輸入優化提示詞」很容易傷害其他類型輸入的表現——因為你調整措辭去照顧 A 類型問題時,可能反而讓 B 類型問題的回答變差。
常見、簡單的客服問題,導向便宜、快速的小模型(如 Claude Haiku 4.5),秒回不浪費資源。
困難、少見的問題導向能力更強的模型(如 Claude Sonnet 4.5),在效能與成本之間取得平衡。
導向能存取訂單系統與退款 API 的專屬下游流程、提示詞與工具組合,跟一般問題、技術支援互不干擾。
Routing 就像醫院急診室的分診台:病人一進門,護理師先快速判斷是感冒、骨折還是心臟病發,再導向對應專科。如果沒有分診台,一位全科醫生同時要顧感冒又要顧心臟病發,為了兼顧所有病症調整判斷標準,結果每一種病都看得不夠精準。
Routing 特別適合:任務裡有清楚可分的類別、且這些類別最好分開處理;同時分類這件事本身能被準確地完成——不管是靠 LLM 分類,還是靠更傳統的分類模型或演算法。分類錯了,後面導向的整套專門流程就用錯了地方,所以「分類要準」是這個工作流成立的前提。
小試身手
兩招最基本的排兵佈陣,你已經摸過一輪了。來兩題檢查一下:
接龍與分流都是「一步一步、一次一條路」的排法。下一站,我們要看三種更聰明的組合方式——平行處理、指揮官帶工人、生成與互評,讓多個 LLM 呼叫同時開工、彼此把關。
更聰明的工作流:平行、指揮與互評
當「一步接一步」不夠用——讓多個 LLM 呼叫同時開工、互相監督、甚至反覆修稿
別再排隊,讓大家同時開工
前面看到的 Prompt Chaining、Routing 都是「一次一步」。但有些任務根本不需要排隊——子任務彼此互不相干,那就讓它們 Parallelization(平行處理) 同時跑,跑完再由程式把結果彙整起來。這個模式有兩種關鍵變體:
把一個任務拆成互相獨立的子任務,同時平行執行——各做各的事,最後彙整。
同一個任務跑好幾次,得到多個獨立且各異的輸出,再彼此比對或投票。
什麼時候該用?兩種情境特別有效:子任務可以平行化以加快速度;或是需要多個角度、多次嘗試才能得到更有信心的結果。原文還提到一個實務洞察——面對有多個考量因素的複雜任務,讓每個考量各自交給一個獨立的 LLM 呼叫處理,通常表現更好,因為每次呼叫能專注一個面向,不會被其他考量分心。
辦宴席若讓一位廚師依序做完每道菜,客人都要餓到睡著。聰明的做法是讓三位廚師同時各自負責一道菜——這是 Sectioning。選秀比賽若只找一位評審,難免有個人偏好;找三位評審各自獨立打分,再看多數意見,這是 Voting。三位廚師做的是不同的事,三位評審做的是同一件事——搞懂這個差異,才能選對變體。
直接讀原文:guardrails 為什麼要拆開處理
原文舉的第一個 Sectioning 範例,是聊天機器人的護欄機制(guardrails)——一起讀讀 Anthropic 怎麼寫的。
LLM 有時候可以同時對一項任務展開工作,再用程式把輸出彙整起來。
Sectioning:把一個任務拆成互相獨立的子任務,平行執行。
Voting:同一個任務跑好幾次,得到多樣化的輸出。
實作護欄機制時,讓一個模型實例處理使用者查詢,另一個獨立篩查是否包含不當內容或請求——這往往比讓同一次 LLM 呼叫同時兼顧護欄與核心回應,表現更好。
把「回答問題」和「檢查有沒有不當內容」丟進同一次呼叫,模型的注意力會被分散。拆成兩個獨立呼叫平行跑,各自專心做好一件事,最後再用程式決定「安全就放行,不安全就擋下」——這正是 Sectioning 的精神。
當任務沒辦法事先拆好:換指揮者上場
Sectioning 有個前提——你得事先知道怎麼拆。但如果任務千變萬化,沒辦法預先寫死拆法呢?這時候需要 Orchestrator-workers(指揮者-工人) 工作流:一個中央 LLM(指揮者)負責動態拆解任務,把子任務委派給工人 LLM執行,再把結果綜合成最終答案。
原文特別提醒:這個模式跟 Parallelization 拓樸結構很像(都是一個中心點連到多個並行處理),但關鍵差異在彈性——Parallelization 的子任務是事先定義好的固定拆法;Orchestrator-workers 的子任務則是當場由指揮者依輸入內容決定。原文舉的例子是寫程式:需要改動幾個檔案、每個檔案怎麼改,往往取決於這次具體的任務內容,沒辦法事先寫死。
Sectioning 像蓋制式樣品屋:設計圖早就畫好「這裡要三個工班」,各班同時進場、各做各的。Orchestrator-workers 則像監工到一棟從沒見過的老屋——他得現場勘查才知道壁癌要不要處理、電線要不要重拉,然後當場決定要叫幾個工班、怎麼分工。因為踏進這棟房子之前,根本沒人知道會遇到什麼狀況。
三種工作流放在一起,點點看差在哪
到目前為止出現了三種「多重 LLM 呼叫」的模式,長得都有點像。點下面每個方塊,看它的定義,以及跟另外兩種的關鍵差異。
分工同做/多次表決
中央指揮動態拆工
一評一改,迴圈打磨
子任務「早就知道怎麼拆」——用 Parallelization;子任務「要看情況才知道怎麼拆」——用 Orchestrator-workers;任務不是「拆」而是「同一份內容反覆修」——用 Evaluator-optimizer。
像作家改稿:生成、評分、打回重寫
Evaluator-optimizer(評估者-優化者) 工作流由兩個角色組成,在一個迴圈裡反覆運作: 生成者 產出一份內容, 評估者 給出明確的評估與回饋,生成者再依此修改,如此反覆,直到達到滿意品質或次數上限為止。原文用一個貼切的比喻:這很像人類作家反覆修稿的過程。
什麼時候該用?兩個訊號都成立時特別有效:人類清楚表達回饋時,LLM 回應確實能被明顯改善;而且LLM 本身也能提供這樣的回饋。原文舉的例子是文學翻譯——譯者 LLM 一開始可能沒抓到細膩的語感或雙關,但評估者 LLM 能指出這些細節,讓翻譯逐輪改善。
編輯若只會說「不夠好」卻說不出哪裡不好,作家根本無從修改。評估者的回饋必須具體、可操作——這正是這個工作流成敗的關鍵前提。也別忘了設「最大嘗試次數」當 迭代(iteration) 的煞車,不然生成者跟評估者可能永遠打不完收工。
小試身手
三種「多重呼叫」工作流都認識了,來兩題確認一下有沒有真的分清楚。
下一站:當任務真的需要「自己規劃、自己收尾」,我們就進入 Agent 本身,看它在真實世界怎麼運作。
Agent 本身、實務案例與打造好工具
當步驟數再也算不出來——放手讓模型自己規劃、行動、看真實回饋修正方向
前面都是工作流,這節終於輪到真正的 Agent
前幾個模組談的工作流,走的每一步都是你先想好、寫死在程式裡的。這節要談的 Agent 不一樣——流程不是你規劃的,是它自己邊做邊想出來的。
原文描述得很具體:Agent 從人類的一句指令、或一段互動討論開始;任務清楚之後,就獨立規劃、獨立行動,過程中不斷回頭跟環境要真實回饋,判斷自己走得對不對;卡關或到了檢查點就暫停等人類表態;任務完成就收尾,也常設停止條件兜底,避免它跑到失控。
一句指令,或一段互動討論,任務目標逐漸清楚。
Agent 獨立規劃下一步,呼叫工具、實際動手做。
從環境(工具結果、程式執行結果)拿到真實回饋,校正自己的判斷。
任務完成就結束;沒完成但踩到停止條件,也要收手回報人類。
你不會逐字告訴業務該說什麼話——只給目標,剩下交給他自己規劃、自己行動。他靠地面真相(客戶到底回信了沒、報價接受了沒)判斷進度,遇到超出權限的折扣要求就回頭找你——那就是檢查點。
跑一次看看:Agent 的自主迴圈
這不是一條直線流程,是一個會反覆繞回去的迴圈。按「下一步」,特別留意它怎麼繞回規劃那一步。
如果 Agent 只憑自己腦中的想像判斷進度,很容易愈走愈偏卻不自知。正因為它每一步都繞回環境要真實回饋,才能長時間自主運作、卻不至於完全失控。
直接讀原文:Agent 是怎麼被定義的
這一段是全文對 Agent 最完整的定義,值得逐句核對原文。
Agent 的工作,從人類的一句指令、或一段互動討論開始。
任務一旦清楚,Agent 就獨立規劃、獨立行動——過程中也可能回頭找人類要更多資訊或判斷。
執行過程中,Agent 必須在每一步都從環境取得「地面真相」(例如工具呼叫結果、程式執行結果),用來評估自己的進度。
Agent 可以在檢查點、或遇到卡關時暫停,等待人類回饋。
任務通常在完成時結束,但也常常設定停止條件(例如最多跑幾輪),藉此維持對系統的控制。
原文給了明確的判斷標準:任務是開放式問題、難以事先預測要跑幾步、沒辦法把路徑寫死,而且你對模型的判斷有一定信任。Agent 的自主性很適合把任務規模化,但也代表更高的成本、以及錯誤可能累積放大的風險——所以要先在沙盒裡大量測試,搭配護欄限制它能做的事。
兩個真正跑起來的案例:客服與寫程式
Anthropic 跟客戶合作的經驗發現,客服和寫程式是特別能發揮 Agent 價值的領域。原因不是巧合,而是它們剛好都具備四個共同特徵:既要對話又要真的做事、有清楚的成功標準、能形成回饋迴圈、能整合有意義的人類監督。
對話天然依循流程,同時要存取客戶資料、訂單紀錄、知識庫;退款、更新工單能直接程式化執行;成功與否由使用者定義的解決標準清楚衡量。
程式碼解法能被自動化測試客觀驗證;Agent 拿測試結果當回饋迭代;問題空間結構清晰;Anthropic 自己的 Agent 已能單靠 PR 描述解掉 SWE-bench Verified 的真實 GitHub issue。
有些任務像申論辯論,誰都說得通,Agent 很難自我校正。但客服和寫程式更像一場當場能打分數的考試——顧客滿不滿意、測試過不過,都是清楚的靶心回饋。已經有多家公司採用「只在成功解決問題才收費」的計費模式,這正說明他們對自家 Agent 的成效有相當高的信心。
但原文也提醒一句很關鍵的話:自動化測試能驗證程式碼是否如預期運作,人類審查仍然是確保解法符合更廣泛系統需求的關鍵——測試過關不代表可以完全省掉人來看一眼。
工具不是隨手寫的:Agent-電腦介面(ACI)
Agent 的實作往往很直白——基本上就是 LLM 根據環境回饋,在迴圈裡使用工具。正因如此,Agent-Computer Interface(ACI)設計得清不清楚,直接決定 Agent 表現的好壞。
原文舉了具體例子:同一個檔案編輯動作,可以寫成diff,也可以整檔重寫;結構化輸出可以包在 Markdown、也可以包在 JSON。這些差異在軟體工程角度看只是表面(cosmetic),但對 LLM 來說,寫 diff 得先算好會改幾行才能下筆,JSON 又得多處理換行跟引號的轉義——都是跟任務本身無關、卻容易出錯的額外負擔。
把自己想像成第一次拿到這個工具的人:光看描述和參數,能不能一眼看懂怎麼用?連設計者自己都要想很久,模型大概率也會卡住。實務打磨流程是:同理模型 → 改善命名與說明 → 在 workbench 裡實測觀察 → 用poka-yoke直接把犯錯的可能性設計掉。
Anthropic 打造 SWE-bench 用的 Agent 時就踩過真實的坑:模型用相對路徑工具時,一旦 Agent 移出根目錄就很容易犯錯,因為它很難時刻記住自己在哪個目錄。解法不是在提示詞裡叮嚀「請小心」,而是直接把工具改成永遠要求絕對路徑——改完之後,模型使用這個工具就變得完全正確、零失誤。
小試身手
Agent 的迴圈、實務案例、還有打磨工具的心法,來兩題檢查一下。
簡單:別為了複雜而複雜,維持 Agent 設計的簡單性。透明:明確展示 Agent 的規劃步驟,讓人類看得懂它在想什麼。打磨 ACI:工具說明跟提示詞一樣值得被精雕細琢、測試迭代、做好防呆——這往往是決定 Agent 成敗的隱藏關鍵。
讀完 Agent 怎麼被設計出來,下一篇文章要問一個更根本的問題——怎麼餵給 Agent「剛剛好」的情境?往下捲,進入 Context Engineering。