AI 代理框架的設計光譜:從 LangGraph 的單行道到企業級巨獸

AI 代理框架的設計光譜:從 LangGraph 到企業級平台

今天的任務是研究 Agentic Design Patterns 附錄 C:當前科技界最熱門的 AI 代理(AI Agents)到底怎麼被建造出來。這不僅僅是一堆程式碼的集合,而是一場設計哲學的抉擇——不同建築師會用截然不同的理念去設計同一棟大樓。在討論如何打造一個由幾十個 AI 組成的複雜團隊之前,我們得先了解單一 AI 的大腦怎麼運作。

基礎設施之爭:LangChain 的單行道對上 LangGraph 的迴圈

首先遇到的是基礎設施層面的對決:LangChain 對上 LangGraph。LangChain 的核心使用有向無環圖(DAG)架構——用最白話的方式說,它就是一條單行道。資料流動完全線性,任務從 A 點進去、走到 B 點、從 C 點出來,而「無環」意味著整個流程沒有迴圈,AI 不能走回頭路。

當任務明確、步驟固定時,這種高度可預測的設計非常適合。例如常見的 RAG(檢索增強生成)系統:去資料庫找一份文件,跟問題打包在一起丟給模型,模型吐出答案,就是一條筆直的流水線。

LangChain:得來速車道(DAG,單行道)
────────────────────────────────────
① 點餐 ──► ② 付錢 ──► ③ 拿漢堡 ──► 離開
   │
   └─ 突然想換玉米湯?這條車道沒有倒車機制,整條卡住

這個得來速的比喻很貼切——它追求流水線式的效率,但現實世界的複雜任務往往不是直線。這正是同一個開發團隊後來推出 LangGraph 的原因。

LangGraph 在原本的基礎上引入了節點的概念,最大的變革在於徹底打破那條單行道:它允許迴圈(Loops)狀態(State)管理。透過狀態管理,AI 就像有了一塊共享黑板——每執行完一個步驟,就把結果寫在黑板上,然後自行解釋這個結果。若發現走錯方向,或呼叫的外部工具失敗,因為有迴圈的機制,它可以退回上一步重試,或換一個方法。

LangGraph:廚師試喝湯(節點 + 邊 + 迴圈)
─────────────────────────────────────────
把食材放進鍋裡(節點)
   │
   ▼
舀一口試喝(評估當下狀態) ◄──────────────┐
   │                                      │
   ├─ 不夠鹹 ──► 加鹽(進入迴圈)──────────┘
   └─ 味道對了 ─► 端上桌

而且它可以在發現自己無法做決定時暫停整個迴圈,傳送通知給人類,等待人類在黑板上寫下新的指令後再繼續——這就是人機迴圈(Human-in-the-Loop)。當任務需要規劃與執行、複雜到不能只給 AI 一份固定的 SOP 時,就需要這種能自行試錯並修正的結構。開發者可以極度精細地控制這個「廚師大腦」裡的每一個思考迴路。

LangChain 與 LangGraph 的實作差異

面向 LangChain LangGraph
核心抽象 鏈(LCEL) 節點圖(StateGraph)
工作流類型 線性(有向無環圖) 迴圈(帶迴圈的圖)
狀態管理 每次執行通常無狀態 明確且持久的狀態物件
主要用途 簡單、可預測的序列 複雜、動態、有狀態的代理

以 LangGraph 定義狀態與節點的示意:

// Graph state:在節點之間傳遞並持續更新的狀態物件
type AgentState = {
  topic: string
  plan?: string
  result?: string
  attempts: number
  errors: string[]
}

// 節點:一個函式,接收狀態、回傳更新後的狀態
function planStep(state: AgentState): Partial<AgentState> {
  const plan = llm.invoke(`規劃如何處理:${state.topic}`)
  return { plan }
}

function retryWithFallback(state: AgentState): Partial<AgentState> {
  // 迴圈機制:失敗就重試,直到成功或耗盡次數
  if (state.attempts < 3) {
    return { attempts: state.attempts + 1 }
  }
  throw new Error('超過重試上限')
}

關鍵判斷很直接:如果應用程式有清晰、可預測、線性的步驟流程(A → B → C),選擇 LangChain;如果代理需要迴圈推理、反思結果、用不同方法重試,選擇 LangGraph。

團隊協作層次:Google ADK 的裝配線對上 CrewAI 的辦公室

了解單一大腦的運作方式後,我們把規模擴大一點。當需要一整群 AI 解決更大的問題時,若還手動規劃每個節點與迴圈,就太沒有效率了。這就進入團隊協作的層次,兩個對比極其強烈的框架:Google 的 ADK(代理開發套件)CrewAI

Google ADK:固執的工廠裝配線

資料描述 Google 的 ADK 為「高度固執(opinionated)」。日常生活中說人固執不是好話,但在軟體工程裡,固執是中性甚至偏正面的詞——意味著 Google 的工程師已經替我們決定了最佳實踐。ADK 把底層複雜的節點、邊、狀態傳遞全部隱藏起來,直接提供預先建構好的架構。

例如它提供循序代理(SequentialAgent)平行代理(ParallelAgent),我們不需要煩惱這些 AI 底層怎麼溝通,軌道都鋪好了。這就像一條工廠自動化裝配線:把擁有特定技能的機器人放進對應的工作站,生產線就能穩定運轉。對需要高度穩定、可預期的企業級應用來說,這種固執能省下大量開發時間。

// Google ADK:用預先建構的代理型別組合,不必手動連接節點與邊
import { LlmAgent, SequentialAgent, ParallelAgent } from '@google/adk'

const researchAgent = new LlmAgent({
  name: 'research',
  model: 'gemini-2.5-flash',
  instruction: '搜尋資料並整理重點',
})

const writingAgent = new LlmAgent({
  name: 'writer',
  model: 'gemini-2.5-pro',
  instruction: '根據研究結果撰寫報告',
})

const team = new SequentialAgent({
  name: 'report_team',
  sub_agents: [researchAgent, writingAgent], // 依序執行,控制流由框架自動管理
})

CrewAI:定義角色、目標與背景故事

CrewAI 走的完全相反——它專注於模擬人類團隊。我們不再是冰冷的工廠廠長,而是辦公室的 CEO:不去畫流程圖,而是定義任務與參與者。CrewAI 要求為每個 AI 代理定義他的角色、目標,甚至背景故事

這看起來像在玩龍與地下城的桌遊,但從大型語言模型的底層運作機制來看,這是嚴謹的系統工程。語言模型本質上是透過龐大的機率預測下一個字,如果不給它明確的限制,它給出的答案就會是最平均、最平庸的那個。設定背景故事,其實是在收縮機率分佈——例如告訴 AI「你是華爾街二十年風險控管經驗、說話嚴謹、總優先考慮最壞情況的資深分析師」,就是在嚴格收縮它的運算空間,改變行為模式與決策邏輯。當它與扮演樂觀行銷總監的 AI 溝通時,那種化學反應就出來了。

// CrewAI:定義代理的角色、目標與背景故事(TypeScript 示意)
const riskAnalyst = new Agent({
  role: '資深風險分析師',
  goal: '優先考慮最壞情況,評估每個方案的風險',
  backstory: '在華爾街有二十年風險控管經驗,說話嚴謹',
})

const marketingLead = new Agent({
  role: '行銷總監',
  goal: '放大方案的成長潛力與市場機會',
  backstory: '天生的樂觀主義者,擅長找出機會',
})

const crew = new Crew({
  agents: [riskAnalyst, marketingLead],
  process: Process.sequential,
})

專業領域框架:MetaGPT、LlamaIndex 與 AutoGen

前述框架偏向通才管理,但有些框架已針對特定領域把標準作業程序(SOP)固化下來。資料提到的三個框架是 MetaGPTLlamaIndex 與微軟的 AutoGen,各有專攻。

框架 核心理念 強項 限制
MetaGPT SOP 就是一切 模擬軟體開發公司,強制角色之間傳遞結構化文件(如 PRD),生成複雜程式碼時穩定度極高 過度專業化,超出軟體工程 SOP 的創意任務會不知所措
LlamaIndex 本質是資料框架 強大的資料攝取與檢索管線,把 PDF、資料庫切塊向量化,讓模型能看懂私有資料 缺乏複雜的代理控制流與多代理編排
AutoGen 對話驅動 把多個代理丟進群組聊天室腦力激盪,動態解決複雜問題 對話式範例可能造成執行路徑不可預測,需要嚴謹的提示工程控制

MetaGPT 模仿一間軟體開發公司,內建產品經理、架構師、工程師等角色,且強制規定角色之間必須傳遞結構化的檔案——扮演產品經理的 AI 必須真的產出一份標準的 PRD(產品需求文件),架構師拿到這份文件後才能開始畫系統設計圖。這種強制性 SOP 讓它在生成複雜程式碼時穩定度極高。

LlamaIndex 就像一個盡責的圖書館員:問它任何歷史財報,它都能把資料整理得井井有條端到面前,但缺乏主動性,不會自行規劃新專案。AutoGen 則像一群被關在會議室裡的天才,創意十足但極度不可預測——如果沒有嚴謹的提示工程控制,就會演變成多代理系統最常見的災難:無止境的發散。它們可能為了一個網頁按鈕該用深藍色還是淺藍色爭論三個小時,消耗大量運算資源,最後什麼程式碼都沒產出。

企業級火力展示:從穩定、監控到老系統手術

當我們把實驗室裡運作良好的小工具搬進大型企業,變成需要二十四小時維持生命週期、處理海量流量的系統時,就需要更重型的解決方案。企業級考量的重點從「這個 AI 多聰明」變成「這個系統多穩定、可用性多高」。

框架 定位 強項 代價
Haystack 開源搜尋框架 專為大規模資訊檢索設計,模組化、可立即投入生產,企業級效能極高 針對搜尋管線最佳化,對動態創意的代理行為支援較僵硬
SuperAGI 完整生命週期管理 代理設定、監控、圖形介面,內建處理迴圈等常見失敗模式的機制 平台非常龐大複雜
Semantic Kernel 微軟 SDK 透過外掛與規劃器,把語言模型當作推理引擎,與既有 .NET / Python 程式碼深度整合 學習曲線陡峭
AWS Bedrock Agents 輕量 SDK 與模型無關、原生整合 MCP、易上手,支援從基本對話助理到複雜多代理系統 監控、日誌、迴圈保護等外圍設施需自行建置

失敗迴圈為什麼是企業的剛需

為什麼處理失敗迴圈在企業環境裡這麼重要?因為 AI 代理一旦失控,就直接造成成本損失。假設我們用 LangGraph 寫了一個自動上網找資料的 AI,它剛好遇到一個失效的網頁連結——如果系統沒有妥善的管理機制,這個 AI 可能在一秒鐘之內重試一千次,而這一千次 API 呼叫全部要付費。若發生在週末,星期一看到帳單就為時已晚。所以像 SuperAGI 這種能監控資源、自動中斷失控迴圈的機制,是企業應用的剛需。

Semantic Kernel:給老系統植入思考的腦袋

Semantic Kernel 透過外掛(Plugins)規劃器(Planners)將語言模型與常規程式碼深度整合。很多大型企業已經有幾百萬行、穩定運行十幾年的舊系統,那個系統可能比年輕工程師的年紀還大,不可能為了導入 AI 就把整個訂單系統打掉重練。Semantic Kernel 的強大在於規劃器可以理解使用者的意圖,自動呼叫那些舊有的 C# 或 Python 函式來完成任務——把語言模型當作一個推理引擎,等於為老舊僵硬的系統植入一顆懂思考的頭腦,自動指揮舊系統的各種手腳。這符合企業對漸進式創新的保守需求。

// Semantic Kernel:語言模型作為推理引擎,呼叫既有函式(TypeScript 示意)
const orderService = kernel.addPlugin(new OrderPlugin()) // 既有訂單系統函式

// 規劃器理解使用者意圖,自動組合並呼叫既有函式
const result = await kernel.invokeAsync('查詢訂單 O-12345 的退款狀態', {
  plugins: [orderService],
})

AWS Bedrock Agents:輕量、與模型無關、原生 MCP

AWS 走的是另一條路:輕量、與任何模型無關,甚至原生整合了 MCP(模型上下文協定)。過去要讓 AI 讀取公司的 Slack 或在 Jira 建立任務,開發者必須針對每個外部工具手寫客製化的 API 串接程式碼;MCP 就像萬用轉接頭,只要外部工具支援 MCP,代理就能立刻無縫讀取或操作,大幅降低整合的摩擦力。MCP 的完整架構可參考這裡-MCP:讓 AI 從只會聊天到真正做事

但輕量也有代價,這引出工程界永恆的權衡難題:自建還是購買(Build vs Buy)。AWS Bedrock Agents 只提供了核心代理邏輯與萬用轉接頭,至於外圍的監控儀表板、錯誤日誌追蹤、甚至防止 AI 燒錢的迴圈保護機制,全部要自己一磚一瓦蓋起來,與 SuperAGI 那種包山包海的完整平台形成對比——這是每個技術長都要面對的選擇。

對 UI/UX 的影響:代理框架的選擇如何決定使用者體驗

框架選擇表面上是後端工程決策,實際上會直接影響使用者與 AI 互動的體驗,可以從三個面向觀察。

第一,框架的「能見度」決定使用者能看到多少代理行為。 LangChain 的線性流程適合把「步驟清單」呈現給使用者——目前執行到第幾步、還有幾步;LangGraph 的迴圈結構則需要把「重試與反思」也視覺化,否則使用者會看到代理在同一件事上反覆嘗試卻不明白原因。CrewAI 的角色扮演框架則適合用「任務看板」呈現——哪個角色負責什麼、現在進行到哪個任務。UI 設計應該對應框架的抽象層級,而不是一律用聊天視窗呈現。

第二,人機迴圈的介面是關鍵節點。 LangGraph 支援暫停迴圈等待人類在黑板上寫下指令,這類 HITL 節點若沒有好的介面,就會變成卡死的工作流。完整的授權與介入介面設計,可參考這裡-AI 為什麼需要人類救場:Human-in-the-Loop 架構探討

第三,企業級框架的選擇影響「信任感」的呈現。 選擇 Semantic Kernel 改造老系統時,使用者需要看到「AI 正在呼叫哪個既有系統的哪個函式」;選擇 AWS Bedrock Agents 這類輕量框架時,因為監控設施要自己建,介面更要主動呈現代理的每一次工具呼叫與結果,才能補足信任感。

前後端技術怎麼實作

對應上述 UI/UX 影響,前後端有一條清晰的分工線。

後端:以框架的原生事件為單位串流輸出

不管選擇哪個框架,後端都應該把代理的執行軌跡轉成結構化事件推送給前端,而不是等整個流程結束才回傳一個結果:

type AgentEvent =
  | { type: 'step'; step: number; total: number; label: string }        // LangChain 線性步驟
  | { type: 'retry'; reason: string; attempt: number }                  // LangGraph 迴圈重試
  | { type: 'tool_call'; tool: string; input: string; output: string }  // 工具呼叫
  | { type: 'hitl_wait'; reason: string }                               // 等待人類介入
  | { type: 'done'; result: string }

前端:依事件型別渲染對應的介面元件

這個分工讓框架的執行軌跡變成使用者看得懂的流程,也讓「代理到底在忙什麼」不再是一個黑箱。

總結

整個 AI 代理框架生態圈其實是一條光譜。在最左邊,是提供細緻控制權的基礎工具,像是 LangGraph——適合需要精確控制 AI 每一個思考步驟的場景。在最右邊,是幫我們把架構、角色、甚至 SOP 都固化下來的平台,像是 CrewAI 或 MetaGPT——犧牲底層控制權,換來開箱即用與開發速度。而在光譜的另一端,是像 Semantic Kernel 這樣專注與既有 IT 基礎設施深度融合的企業級方案。

選擇框架不該看哪個框架在 GitHub 上的星星比較多,而是要問自己:目前面臨的具體商業問題是什麼? 是找資料(LlamaIndex)、要突破性創意(AutoGen)、穩定開發軟體(MetaGPT),還是要穩定與監控(SuperAGI)、整合老系統(Semantic Kernel)、輕量靈活(AWS Bedrock Agents)?

深入思考:既然 MetaGPT 這樣的框架已經強大到能讓 AI 扮演軟體工程師、根據需求文件寫出高品質程式碼,那麼在不久的將來,是不是會有這些聰明的 AI 代理,自行運用光譜上的框架,開始為自己設計下一代更強大的 AI 代理框架?當代理開始建造代理、虛擬員工開始自己設計下一代虛擬員工時,人類在這條流水線上的位置又會在哪裡?這是一個值得深思的問題。

參考資料


Agentic Design Pattern Agentic AI LangChain LangGraph Google ADK CrewAI MetaGPT LlamaIndex AutoGen Semantic Kernel SuperAGI Haystack AWS Bedrock MCP AI Engineering Architecture AI Design Pattern Agentic AI 401

Summer Tang
Sponsored
Summer Tang 一對一諮詢
Summer|TSMC 主任工程師|擁有 15 年資深 Web 架構經驗,職涯歷經跨國頂尖企業與新創。專精於高流量企業級應用開發,核心技術涵蓋微前端、效能優化、測試自動化與 SEO。曾出版多本技術著作,並多次擔任 MOPCON、WebConf 等大型技術年會講者。
了解更多 →