Architecture Journal
Monolithic Agent vs Multi-Agent:先看 Context Isolation,再看 Context Cost
在比較 monolithic agent 和 multi-agent 時,真正最先出現的問題,通常不是成本。
更前面的問題是:agent 能不能先把任務做對。
當上下文太雜、太長、太互相干擾時,模型常見的失敗不是單純「變貴」,而是:
- 抓錯限制條件
- 把不相關資訊當成關鍵訊號
- 工具使用判斷漂移
- 在長流程裡累積狀態污染
也就是說,開發者一開始在意的,通常不是 token 單價,而是:
資訊過多時,agent 會不會開始 hallucinate、判斷錯誤,或把任務越做越偏。
這也是為什麼在成本之前,真正需要先回答的是:
這個任務更需要 context sharing,還是 context isolation?
因為這會先決定 agent 的任務品質,再進一步決定成本形狀。
這篇想講的核心可以濃縮成三句話:
Multi-agent 一階上通常在解 context pollution。
Monolithic agent 一階上通常在保留 context continuity。
cost 是這兩種選擇帶出的二階效果。
換句話說,這不是「哪個比較高級」的問題,也不是「哪個先天比較省」的問題,而是:
哪種上下文形狀,能先讓 agent 比較穩定地把任務做對。
然後才是:
這種做法的成本關係會長什麼樣子。
先把問題問對
monolithic agent 和 multi-agent 當然都和模組化、專精化、可維護性有關,但如果從實際設計順序來看,至少要把問題拆成兩層。
第一層是:
- 這個任務怎樣比較容易做對?
- 在這個前提下,整體 context cost shape 會長什麼樣子?
而第一層如果再拆開,通常問的就是:
- 這個任務更需要 context isolation,還是 context sharing?
- 哪種 context arrangement 比較能降低 hallucination、tool interference 與 state pollution?
順序很重要。因為 topology 改變之後,不只是 prompt 長短不同,而是整個 runtime 行為都會變。
更實際的成本模型通常比較像:
Per-task cost
= sum(每一次 model call 的 local context)
+ routing / handoff overhead
+ repeated prefix cost
+ final synthesis cost
所以真正該問的不是:
multi-agent 是不是天然比較便宜?
而是:
在我的任務分布下,哪一種 topology 能先維持較乾淨的上下文,讓 agent 比較穩定地完成任務?
然後才再問:
在這個前提下,哪一種 topology 的總成本更低?
Monolithic agent 的優勢,不只是比較少 call
monolithic agent 的核心價值,不是「系統比較原始」,而是它天然保留 shared context continuity。
如果一個任務反覆依賴同一份背景,例如同一個 repo、同一組 coding rules、同一批工具、同一段 session history,那 monolithic agent 通常比較自然。因為這些背景不需要一直在不同 agent 之間搬運。
它的優勢通常有三個。
-
共享背景比較完整
同一份架構摘要、repo state、工具使用脈絡,都能持續留在同一條推理鏈上。 -
stable prefix 比較容易重用
如果 system prompt、tool schema、repo policies 都很穩定,cache reuse 通常也比較直接。 -
model call 通常比較少
你少了 router、specialist invocation、final synthesis 這些額外步驟。
但 monolithic agent 的問題也很明顯。它常常會把不需要一起出現的東西,全都塞進同一個 decision surface。
典型情況像是:
- 不同 domain knowledge 一起進 prompt
- 長 session 的中間狀態殘留
- 多種 guardrails 和 tools 互相干擾
- 舊的 retrieval 片段持續佔位
這時候你先承擔的不是 token,而是任務品質風險。也就是 context competition、state inconsistency,以及由此帶出的判斷漂移。
成本通常是接著才浮現的 downstream effect。monolithic agent 的主要成本壓力,往往不在 routing,而在這些地方:
- session history 持續膨脹
- compaction 壓力越來越高
- tool traces 越堆越長
- retrieval snippets 不斷疊加
換句話說,monolithic agent 更依賴的是 cache discipline 和 compaction discipline。
Multi-agent 的核心價值,不是自動變便宜
multi-agent 真正吸引人的地方,不是把大 prompt 自動切成便宜的小 prompt,而是把一個容易互相污染的大問題,拆成幾個上下文邊界較乾淨的局部問題。
它通常在解的是:
context isolation
也就是把不應該一起競爭注意力的東西拆開,例如:
- 不同角色的 objective
- 不同 specialist 的知識域
- 不同工具的操作脈絡
- 不同階段的中間狀態
這樣做的好處很直接。每個 agent 只需要帶:
- 自己的 instructions
- 自己的 tools
- 自己需要的少量背景
但它的代價也很直接。當你先用隔離邊界換到比較乾淨的局部判斷之後,system-level cost 不再是一個大 prompt,而是很多 local prompt 的總和。
典型成本來源包括:
- routing call
- handoff summary
- duplicated prefix
- repeated retrieval
- final synthesis
其中最常被低估的是 handoff summary。
子 agent 不會憑空知道前面發生了什麼。你通常還是要把任務目標、限制條件、目前狀態、上一階段輸出重新整理後送進去。handoff 做得不好時,multi-agent 很容易退化成:
同一批事實,被不同 agent 用不同 wording 重講很多次。
所以 multi-agent 更依賴的是 routing discipline 和 handoff discipline。
真正改變成本模型的,常常是 execution mode
很多討論把 monolithic 與 multi-agent 當成固定成本模型,但實際上,execution mode 常常比「有幾個 agent」更影響成本。
關鍵差別在於:子 agent 是從 fresh context 開始,還是能繼承父 agent 的上下文、狀態,甚至 prompt cache。
如果每個 worker 都從 fresh context 開始,通常會看到三種成本一起上升:
- handoff summary 變長
- shared prefix 被重送
- 相同背景被重複 retrieval
反過來說,如果 runtime 支援 inherited context、shared state 或 shared cache,很多 coordination cost 都會下降。這時 multi-agent 的問題就不再是「重複付共享背景的錢」,而比較像是在共享背景上切出幾條工作支線。
這也是為什麼同樣叫 subagent,成本可能差很多。
以 Claude Code 的公開設計為例:
- named subagent 會從新的 context 開始,使用自己的 system prompt,快取也與主對話分開
- forked subagent 會繼承父對話的上下文、system prompt 與 tools,第一個 request 還能重用 parent prompt cache
這裡重要的不是哪個產品比較好,而是它提醒我們:
agent topology 不是純粹的模組化問題,它本身就是 runtime-level 的 context architecture。
兩個例子,比抽象原則更好理解
單領域請求:multi-agent 可能更合理
假設你的系統有四種 specialist:billing、support、compliance、analytics。
如果 monolithic agent 每次都要帶著四組 domain instructions 和 tools,那即使使用者只問 billing 問題,你仍然可能在每一輪都把大量不相關知識一起送進去。
這時 router 加 billing specialist 的架構常常更合理。因為它省下來的不只是 token,而是:
不相關的領域根本不需要進 context
這通常同時改善兩件事:
- local context 更小
- context pollution 更低
高共享長任務:monolithic agent 可能更合理
另一種情況是 coding agent。
如果 planner、coder、reviewer 都必須反覆讀同一份 repo summary、同一組 coding rules、同一批 tools、同一段逐步累積的 history,那拆成多 agent 之後,你很可能只是把共享背景重複付費。
這時候你付的通常不是「三個小 prompt」,而是:
- planner 讀一次
- coder 再讀一次
- reviewer 又讀一次
- 中間再加 handoff summary
如果 execution mode 還是 fresh spawn,總和甚至可能比單一 agent 更高。
所以在高共享、長連續任務裡,monolithic agent 常常不是比較笨,而是更符合成本形狀。
什麼情況值得拆,什麼情況不值得
multi-agent 比較值得拆,通常不是因為它看起來比較進階,而是因為隔離邊界真的有價值。
通常會同時滿足幾個條件:
- 不同 specialist 的知識域差異很大
- 一次任務只會啟用少數 specialists
- handoff 可以壓成小而穩定的 structured payload
- routing 準確率夠高
- execution mode 能共享部分背景或快取
反過來說,monolithic agent 較合理的情況通常是:
- 大多數步驟都依賴同一份背景
- 任務雖短,但互動連續
- tool surface 雖大,但實際使用模式高度重疊
- handoff 很難被壓縮
這也是為什麼真正該量的,不是單次 prompt 長短,而是整個 task-level 行為。例如:
- model calls per task
- total input tokens per task
- duplicated stable prefix ratio
- handoff summary tokens per task
- cache hit rate
- specialist activation rate
- final synthesis cost
這些指標比單看「某次 specialist prompt 比較短」更有判斷力。
結論
monolithic agent 和 multi-agent 最容易被誤解成「簡單架構」與「進階架構」的差別,但我覺得更準確的說法是:
Monolithic agent 優先保留 shared context continuity。
Multi-agent 優先建立 context isolation。
context cost shape 是這兩種設計的後果。
所以 monolithic agent 的典型問題是:
一個大腦背了太多共享上下文
multi-agent 的典型問題則是:
很多小腦在反覆協調與轉譯上下文
如果每個 worker 都從 fresh context 開始,後者的成本會特別高。
如果 runtime 支援 inherited context、shared state 或 shared cache,multi-agent 的成本曲線又會換一個樣子。
最後真正成熟的判準,不是 agent 數量,也不是單輪 prompt 長短,而是這三件事能不能對齊:
- 任務形狀
- 上下文形狀
- 成本形狀
從這個角度看,agent topology 不是單純的軟體模組化問題,也不是單純的成本問題。
它其實是 context architecture 的一部分。