去年我打造了一個代理,我為此感到很自豪。
它有規劃器。它有工具。它有一個推理迴圈,會決定接下來要做什麼、反思自己的輸出,並把各個步驟串接起來完成真正的工作。做展示時,它真的很驚人——那種會讓整個房間發出「喔」一聲的東西。
然後它上了正式環境,結果又慢、又貴,而且失敗方式是我無法重現的。同樣的輸入,星期二和星期三的行為卻不同。它出錯時,原因是上游有三個我無法控制、也看不見的「自主決策」。
所以我做了件不華麗的事:我把它重寫成一個無聊的線性管線。固定步驟。沒有推理迴圈。然後它在所有重要面向上都更好了——更快、更便宜、可測試、可除錯。
接著我看了舊「代理」的日誌,忽然覺得有點噁心。它每一次都做同樣三個步驟。 擷取、轉換、回應。每次執行都一樣。它從來沒有用它那珍貴的自主性去做任何不同的事。我其實只是做了一個 for 迴圈,給它一段系統提示詞,然後把它叫做代理。
我不覺得只有我這樣。我認為 2026 年大家所稱的「代理」,大多其實只是穿著風衣的管線——而我想主張,這不是在貶低它。這反而是種解脫。
「代理」已經變成那種什麼都能指、因此什麼都不指的詞。那我就先釘住唯一真正重要的差別,因為整個論點都建立在這上面。
代理會在執行時自行決定控制流程。 要呼叫哪個工具、下一步是什麼、要不要再迴圈一次、什麼時候停止——模型根據它所看到的內容,動態選擇路徑。
管線則是在設計時就由你把控制流程固定好。 第一步、第二步、第三步。每次都走同一條路徑。LLM 只是在各個步驟內部做事,但它沒有資格決定步驟。
這就是全部差異。而大家常常跳過的是:LLM 在固定步驟內做得很聰明,不代表它有自主性。 擷取欄位、分類工單、生成摘要——那只是使用 LLM。那是一個聰明的函式呼叫。自主性特指的是:模型被交給方向盤,並且能自己選路。
大多數「代理」其實從來沒有真的把方向盤交出去。它們只是用流暢的自然語言把固定路線講述出來,然後把這段講述稱為「推理」。
這裡有一個一句話的試金石,幾乎能解決所有問題:
如果你能在系統執行之前就畫出它會怎麼運作的流程圖,那你就沒有代理。你只有一條管線。
先停一下,想想你的「代理」。第一步:它擷取一些上下文。第二步:它呼叫一個工具。第三步:它格式化回應。你在寫任何一行程式碼之前,能不能先把這個畫在白板上?如果可以,那就是管線。模型不是在決定路徑——路徑早就是你決定的。模型只是在人為指定的每個節點上做工,卻聽起來像是在決定。
只有當流程圖真的無法事先畫出來時,你才需要真正的自主性——也就是下一步取決於你事先不可能知道、必須先發現的東西。這種情況很少見。大多數商業任務都有你已經理解的形狀。你知道步驟。你只是讓模型用很高的成本去即興演出,卻沒有任何好處。
「好吧,」你可能會說,「所以它技術上算是管線。但它能用啊,誰在乎?」在乎的人可多了:任何要執行它、為它付錢、或在凌晨兩點除錯它的人。把管線假裝成代理,代價很真實,而且是明碼標價的。
非決定性。 當模型決定路徑時,同樣的輸入在不同執行中可能走不同路徑。展示時很棒,正式環境就很痛苦,因為你的錯誤再也無法重現。「我試的時候是正常的」會變成永久狀態。
可除錯性崩壞。 固定管線壞掉時,你知道 точно 是哪一步失敗。代理壞掉時,它可能是在第 12 步失敗,但真正原因是它在第 4 步做了某個你無法控制、也很難重播的決策。你不再是在除錯程式碼;你是在對一個選擇做鑑識。
失敗面積倍增。 每一個自主決策都是另一個出錯點,而這些失敗會在各步驟之間疊加。一個有五個固定步驟的管線,有五件事要檢查。一個做五次決策的代理,就有五個可能出錯的決策,而且還會以不同組合、不同順序在每次執行中變化。
成本與延遲。 推理迴圈會比固定序列呼叫更多次模型——它思考、重新思考、反思、決定再迴圈一次。你是在按 token 付費,讓模型去思量一條你本來就知道的路線。
你無法測試它。 回歸測試需要一組固定路徑可供驗證。代理,按定義來說,沒有這種東西。所以那個在正式環境中做自主決策的東西,也正是你無法為它寫出可靠測試的東西。真棒。
把這些加起來,結論很殘酷:你付出了所有代價——非決定性、除錯惡夢、token 帳單——只為了讓模型去決定一件你本來就知道答案的事。
這裡才是那個無聊、但真正勝出的做法。
管線是一連串固定步驟,在模型真正有價值的地方插入 LLM 呼叫,而控制流程則由你掌握。它可重現:同樣輸入,同樣路徑。它可測試:固定路徑意味著真正的回歸測試。它便宜:不需要推理迴圈燃燒 token 來重新決定顯而易見的事。它也好除錯:第 3 步壞了,就看第 3 步。
而大家常忽略的是——LLM 依然完成所有聰明的部分。 它依然擷取、分類、對內容做推理、生成語言。你並沒有把事情變笨。你只是停止讓它去即興決定工作的結構,因為那個結構從來就不是需要智慧的部分。結構本來就是你已經理解的東西。
仔細看那些在正式環境中真正能運作的「代理式」系統,通常你會發現這點:它們大多是固定管線,只在一兩個經過嚴格限制的決策點上使用模型,而不是讓它自由運轉的推理迴圈。好的系統都把自主性壓縮到最小的範圍。它們是管線,只是偶爾、有意地讓模型做一個有限的選擇——而不是把整場戲都交給代理。
現在我要反過來替自己辯護一下,因為「代理永遠都不好」和「一切都必須是代理」一樣愚蠢。真正的自主性確實有它的價值,而且是在特定情況下才值回票價:
如果你的任務符合其中一種,那就打造代理吧——你是有資格的。即便如此,做法仍然是盡量縮小自主性:能硬編碼的就硬編碼,把模型在執行時做決策的能力,保留給那個真正需要它的點。自主性是成本。只有在它能換來東西時才花。
重點從來不是「代理很糟」。重點是自主性是一項你應該先證明其必要性的成本,而大多數自稱是代理的系統,從來沒有證明過這件事——它們只是喜歡這個詞。
那麼,如果管線更便宜、更安全、也更容易除錯,為什麼大家還是一直在做代理?答案其實很不舒服:代理是為了建造者,不是為了任務。
代理更適合展示。「看它自主地推理問題」會讓整個房間往前傾;「我寫了一個會呼叫模型三次的函式」就不會。代理感覺更像真正的 AI、更像未來、也更像你當初投入這件事的原因。而「agentic」是履歷詞,也是募資詞——它在每日站會和簡報投影片上,都能傳達「高深」的感覺,而「決定性管線」永遠不會。
這些理由都和你的任務到底需不需要代理沒有半點關係。它們只跟這個架構讓你感覺和看起來如何有關。而這正是為什麼無聊的管線才是資深者的做法——因為在更炫、更會獲得掌聲的方案本來就會贏得更多喝采時,仍然選擇那個不那麼驚人、但真的會工作的東西,這種克制正是炒作最不喜歡的。沒有人會截圖你的 while 迴圈。你的 while 迴圈只是安安靜靜地持續運作。
「代理」應該是當管線明確無法完成工作時,你升級採用的東西——而不是因為這個詞聽起來很先進,就把它當成預設選項。
先從無聊開始。畫出流程圖。如果你畫得出來,那就做管線——固定步驟、在它該出現的地方使用 LLM、控制流程由你掌握。只有在固定路徑明確失效、而且沒有更進一步的替代方案時,才在那個特定點加入真正的自主性。能在正式環境中上線並持續穩定運作的系統,幾乎總是比贏得展示的系統更無聊。
現在大多數被稱為代理的東西,其實只是穿著風衣的管線。而我要再重申一次開頭那句話:這不是在貶低它。這反而是種解脫。因為管線才是你真正能執行、能測試、能負擔、也能除錯的東西——而「展示時很驚人」從來就不是目標。「到了星期三還能正常運作」才是。
把外套脫掉吧。你會更喜歡裡面的樣子。
我有兩個問題,而且我希望你在留言裡都回答。第一個是有趣的:你曾經做過哪個「代理」,結果發現它其實只是偽裝成代理的管線?第二個才是重點——你心中的分界線在哪裡?你認為最小到什麼樣的任務,真正的代理才值得它的複雜度?我猜我們每個人畫的線都不一樣,而這正是值得討論的原因。
原文出處:https://dev.to/james_anderson_h/most-ai-agents-are-just-if-statements-in-a-trench-coat-3960