Key Findings
  • AI Agent 正從「被動回答問題」演進為「主動感知環境、規劃步驟、呼叫工具、自我反思」的自主系統,ReAct 框架將推理與行動交織,是當前最主流的 Agent 設計模式
  • LangGraph 以有向圖狀態機為核心,提供最細粒度的控制能力,適合需要精確定義執行流程的生產級應用;CrewAI 以角色扮演與任務委派為核心,開發速度最快但靈活度較低
  • AutoGen(現為 AG2)採用對話驅動的多代理架構,在需要代理之間深度協商的場景表現最佳,但學習曲線較陡且調試難度較高
  • 本文附兩個完整 Google Colab 實作:使用 LangGraph 建構 ReAct 工具呼叫 Agent,以及使用 CrewAI 建構多 Agent 研究團隊,皆可一鍵執行

一、從聊天機器人到自主代理:AI Agent 的範式轉移

2023 年,大型語言模型(LLM)以驚人的速度滲透各行各業。然而,多數應用仍停留在「人類提問、AI 回答」的對話模式——本質上,這與傳統的搜尋引擎在使用範式上並無根本差異。真正的突破在於:當我們賦予 LLM 感知環境、規劃步驟、呼叫外部工具、並根據結果自我修正的能力時,它便從一個被動的語言模型,蛻變為一個自主的 AI 代理(Agent)[1]

Wang 等人在 2024 年發表的綜述研究中[1],將 LLM-based Agent 定義為:以大型語言模型為認知核心,具備感知(Perception)、規劃(Planning)、行動(Action)與記憶(Memory)四大模組的自主系統。這個定義精準地捕捉了 Agent 與傳統 chatbot 的本質差異——Agent 不僅能回答問題,更能主動地與外部世界互動、完成多步驟任務。

從產業實踐的角度觀察,Agent 的價值在於它能夠將人類從重複性的認知勞動中解放出來。一個設計良好的 Agent 可以自主完成市場調研、資料分析、報告撰寫、程式碼生成等複合性任務——這些原本需要一位分析師花費數小時的工作,Agent 可以在數分鐘內完成。Park 等人的「生成式代理」研究[7]更進一步展示了 Agent 之間的社會互動能力,預示了多代理協作的巨大潛力。

然而,建構一個可靠的 AI Agent 並非僅僅是「將 LLM 接上幾個 API」這麼簡單。Agent 的核心挑戰在於:如何確保 LLM 在多步驟推理中保持一致性?如何優雅地處理工具呼叫的失敗與重試?如何在多個 Agent 之間協調資訊流與決策權?這些工程挑戰催生了一系列 Agent 開發框架的誕生,其中 LangGraph、CrewAI 與 AutoGen 是當前最具代表性的三個選擇。

二、Agent 架構核心:Perceive、Plan、Act、Reflect

在深入比較三大框架之前,我們必須先理解 AI Agent 的通用架構模式。無論使用哪個框架,一個完整的 Agent 系統都包含四個核心階段[1]

2.1 感知(Perceive)

Agent 首先需要理解當前的任務環境。這包括:解析使用者的自然語言輸入、讀取外部資料來源(資料庫、API、文件)、獲取前幾輪對話的上下文記憶。感知模組的品質直接決定了 Agent 後續決策的準確度。

2.2 規劃(Plan)

這是 Agent 架構中最核心的環節。LLM 基於感知到的資訊,規劃出完成任務的步驟序列。Wei 等人提出的 Chain-of-Thought(CoT)推理[3]是規劃的基礎——透過逐步推理,LLM 能夠將複雜任務分解為可執行的子任務。而 Yao 等人的 ReAct 框架[2]則更進一步,將推理(Reasoning)與行動(Acting)交織在一起,形成「思考→行動→觀察→再思考」的迴圈。

ReAct 的核心洞見在於:LLM 不需要一次性規劃出所有步驟,而是可以在每一步行動之後,根據觀察到的結果動態調整後續規劃。這種「邊做邊想」的策略,大幅提升了 Agent 在不確定環境中的魯棒性。

2.3 行動(Act)

規劃完成後,Agent 需要實際執行行動。在 LLM-based Agent 的語境中,「行動」通常意味著呼叫外部工具(Tool Calling / Function Calling)。Qin 等人的研究[8]以及 Schick 等人提出的 Toolformer[9]系統性地探索了 LLM 學習使用工具的能力。典型的工具包括:搜尋引擎、計算器、程式碼執行器、資料庫查詢、API 呼叫等。

工具呼叫的關鍵挑戰在於:LLM 必須精確地產生工具所需的結構化輸入(例如 JSON 格式的函數參數),並正確地解析工具的回傳結果。Patil 等人的 Gorilla 研究[13]展示了透過微調提升 LLM 工具呼叫準確度的可行性。

2.4 反思(Reflect)

最後,一個成熟的 Agent 應該具備自我反思的能力。Shinn 等人提出的 Reflexion 框架[4],透過語言化的自我反饋機制,讓 Agent 能夠從失敗中學習,在後續嘗試中避免重複犯錯。這種「語言強化學習」的方法,不需要更新模型權重,僅透過提示工程即可實現,具有極高的工程實用性。

以下示意圖展示了一個典型的 ReAct Agent 執行流程:

使用者提問:「台積電 2025 年 Q4 營收是多少?與前一季相比成長了多少?」

[思考] 我需要查詢台積電的財務數據,先搜尋最新的營收報告。
[行動] 呼叫 search_tool("台積電 2025 Q4 營收報告")
[觀察] 搜尋結果顯示:台積電 2025 Q4 營收為 8,684 億新台幣。
[思考] 我已獲得 Q4 營收,現在需要 Q3 數據來計算成長率。
[行動] 呼叫 search_tool("台積電 2025 Q3 營收")
[觀察] 搜尋結果顯示:台積電 2025 Q3 營收為 7,596 億新台幣。
[思考] 現在我可以計算成長率:(8684 - 7596) / 7596 = 14.3%。
[行動] 呼叫 calculator(expression="(8684 - 7596) / 7596 * 100")
[觀察] 計算結果:14.32%
[最終回答] 台積電 2025 年 Q4 營收為 8,684 億新台幣,較 Q3 的 7,596 億成長約 14.3%。

三、LangGraph 深度解析:以圖為核心的狀態機架構

LangGraph 是 LangChain 團隊[10]推出的 Agent 編排框架,其設計哲學源自一個深刻的觀察:Agent 的執行流程本質上是一個有向圖(Directed Graph),其中節點(Node)代表計算步驟,邊(Edge)代表控制流轉。

3.1 核心架構:StateGraph

LangGraph 的核心抽象是 StateGraph——一個以共享狀態為中心的有向圖。每個節點是一個函數,接收當前狀態、執行計算、返回狀態更新。邊定義了節點之間的轉移邏輯,可以是無條件的(固定走向)或條件性的(根據狀態決定下一步)。

from langgraph.graph import StateGraph, START, END
from typing import TypedDict, Annotated
from operator import add

# 定義共享狀態結構
class AgentState(TypedDict):
    messages: Annotated[list, add]  # 訊息累加
    next_action: str

# 建構圖
graph = StateGraph(AgentState)

# 新增節點
graph.add_node("reason", reasoning_node)
graph.add_node("act", action_node)
graph.add_node("observe", observation_node)

# 定義邊(控制流)
graph.add_edge(START, "reason")
graph.add_conditional_edges(
    "reason",
    should_continue,  # 條件函數
    {"continue": "act", "end": END}
)
graph.add_edge("act", "observe")
graph.add_edge("observe", "reason")  # 回到推理節點

agent = graph.compile()

3.2 狀態管理與持久化

LangGraph 的一大優勢在於其內建的狀態管理機制。透過 Checkpointer,每一步的狀態都可以被持久化到資料庫(SQLite、PostgreSQL),使得 Agent 可以在中斷後從上次的狀態恢復執行。這對於長時間運行的任務至關重要。

此外,LangGraph 支援 Human-in-the-Loop 模式:在圖的特定節點設定斷點,暫停執行並等待人類審核,確認後再繼續。這對於涉及敏感操作(例如發送郵件、修改資料庫)的 Agent 尤為關鍵。

3.3 子圖與模組化

複雜的 Agent 系統可以透過子圖(Subgraph)實現模組化。例如,一個主圖負責整體任務協調,而「資料蒐集」「分析推理」「報告撰寫」各由獨立的子圖負責。子圖擁有自己的狀態空間,僅透過定義好的介面與主圖互動,實現了關注點分離。

3.4 適用場景

四、CrewAI 深度解析:角色扮演的多代理協作

CrewAI[11]採用了截然不同的設計哲學:它不要求開發者定義圖結構或控制流,而是透過自然語言描述每個 Agent 的角色(Role)、目標(Goal)與背景故事(Backstory),讓框架自動協調 Agent 之間的協作。

4.1 核心抽象:Agent、Task、Crew

CrewAI 的三大核心概念直觀而優雅:

from crewai import Agent, Task, Crew, Process

# 定義 Agent(角色扮演)
researcher = Agent(
    role="資深市場研究員",
    goal="蒐集並驗證特定產業的最新市場數據與趨勢",
    backstory="你是一位擁有 15 年經驗的市場研究員,"
              "擅長從多元資料來源中提取關鍵洞見。",
    tools=[search_tool, scrape_tool],
    verbose=True
)

analyst = Agent(
    role="資料分析專家",
    goal="對蒐集到的數據進行深度分析,找出隱藏的模式與機會",
    backstory="你是一位量化分析師,具備統計學博士學位,"
              "擅長將複雜數據轉化為可執行的商業建議。",
    tools=[calculator_tool],
    verbose=True
)

# 定義 Task
research_task = Task(
    description="調查全球 AI Agent 市場在 2025 年的規模、"
                "主要參與者與成長趨勢。",
    expected_output="一份結構化的市場調研報告,包含數據來源。",
    agent=researcher
)

# 組成 Crew
crew = Crew(
    agents=[researcher, analyst],
    tasks=[research_task, analysis_task],
    process=Process.sequential,
    verbose=True
)

4.2 流程模式

CrewAI 支援兩種主要的流程模式:

Hierarchical 模式借鑒了 MetaGPT[6]的組織架構思想——透過角色分工與層級管理來協調多 Agent 的行為,使其更接近真實團隊的運作方式。

4.3 內建工具生態

CrewAI 提供了豐富的內建工具套件(crewai-tools),包括網路搜尋、網頁爬取、PDF 讀取、程式碼執行等。開發者也可以輕鬆地自訂工具,只需繼承 BaseTool 類別並實作 _run 方法。

4.4 優勢與限制

優勢:

限制:

五、AutoGen 深度解析:對話驅動的多代理框架

AutoGen(現已更名為 AG2)是由 Microsoft Research 團隊開發的多代理對話框架[5]。與 LangGraph 的圖結構和 CrewAI 的角色扮演不同,AutoGen 的核心設計原則是對話驅動:Agent 之間透過多輪對話來協商、辯論、分工與彙整結果。

5.1 核心概念:ConversableAgent

AutoGen 中所有 Agent 都繼承自 ConversableAgent——一個可以接收訊息、處理訊息、並回覆訊息的實體。最常用的兩種 Agent 類型為:

from autogen import AssistantAgent, UserProxyAgent, config_list_from_json

# 設定 LLM
config_list = [{
    "model": "gpt-4o",
    "api_key": os.environ["OPENAI_API_KEY"]
}]

# 建立 AssistantAgent
assistant = AssistantAgent(
    name="research_assistant",
    llm_config={"config_list": config_list},
    system_message="你是一位 AI 研究助理,擅長蒐集資料、"
                   "分析數據並撰寫結構化報告。"
)

# 建立 UserProxyAgent(自動執行程式碼)
user_proxy = UserProxyAgent(
    name="user_proxy",
    human_input_mode="NEVER",  # 全自動模式
    code_execution_config={
        "work_dir": "workspace",
        "use_docker": False
    }
)

# 啟動對話
user_proxy.initiate_chat(
    assistant,
    message="請分析 AI Agent 市場的最新趨勢,"
            "並用 Python 繪製成長曲線圖。"
)

5.2 群組聊天(GroupChat)

AutoGen 最強大的功能之一是 GroupChat——讓多個 Agent 在一個共享的對話空間中互動。GroupChatManager 負責決定每一輪由哪個 Agent 發言,可以基於規則、輪流制或 LLM 自動選擇。

from autogen import GroupChat, GroupChatManager

# 定義多個 Agent
researcher = AssistantAgent(name="researcher", ...)
coder = AssistantAgent(name="coder", ...)
critic = AssistantAgent(name="critic", ...)

# 組成群組聊天
groupchat = GroupChat(
    agents=[user_proxy, researcher, coder, critic],
    messages=[],
    max_round=15,
    speaker_selection_method="auto"  # LLM 自動選擇發言者
)

manager = GroupChatManager(
    groupchat=groupchat,
    llm_config={"config_list": config_list}
)

# 啟動多 Agent 對話
user_proxy.initiate_chat(
    manager,
    message="設計一個自動蒐集並視覺化台灣股市資料的系統。"
)

5.3 程式碼執行與沙盒

AutoGen 的一大特色是內建的程式碼執行能力。AssistantAgent 可以生成 Python 程式碼,UserProxyAgent 自動在本地或 Docker 沙盒中執行。如果執行失敗,AssistantAgent 會自動修正程式碼並重試——這形成了一個「生成→執行→修正」的自動迭代迴圈。

5.4 優勢與限制

優勢:

限制:

六、Hands-on Lab 1:使用 LangGraph 建構 ReAct 工具呼叫 Agent

本實作將引導你在 Google Colab 中從零建構一個 ReAct Agent。這個 Agent 能夠自主決定何時呼叫搜尋工具或計算器,遵循「思考→行動→觀察」的迴圈,直到找到最終答案。

環境需求:Google Colab(免費版即可),需自備 OpenAI API Key。

完整程式碼如下——可直接複製到 Colab 執行:

###############################################
# Hands-on Lab 1:LangGraph ReAct Agent
# 在 Colab 中一鍵執行
###############################################

# ── Cell 1:安裝套件 ──
# !pip install -q langgraph langchain-openai langchain-community tavily-python

# ── Cell 2:設定環境變數 ──
import os
from getpass import getpass

# 使用 getpass 安全輸入,不會顯示在 notebook 中
if "OPENAI_API_KEY" not in os.environ:
    os.environ["OPENAI_API_KEY"] = getpass("請輸入你的 OpenAI API Key: ")

# Tavily 搜尋 API(免費版每月 1000 次)
if "TAVILY_API_KEY" not in os.environ:
    os.environ["TAVILY_API_KEY"] = getpass("請輸入你的 Tavily API Key: ")

# ── Cell 3:定義工具 ──
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.tools import tool

# 搜尋工具
search_tool = TavilySearchResults(
    max_results=3,
    search_depth="basic",
    include_answer=True
)

# 計算器工具
@tool
def calculator(expression: str) -> str:
    """計算數學表達式。輸入應為合法的 Python 數學運算式。
    例如: '2 + 3 * 4' 或 '100 / 7'"""
    try:
        result = eval(expression, {"__builtins__": {}}, {})
        return f"計算結果: {result}"
    except Exception as e:
        return f"計算錯誤: {e}"

tools = [search_tool, calculator]
print(f"已載入 {len(tools)} 個工具: {[t.name for t in tools]}")

# ── Cell 4:建構 ReAct Agent 圖 ──
from langgraph.graph import StateGraph, START, END
from langgraph.prebuilt import ToolNode
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from typing import TypedDict, Annotated
from operator import add

# 定義狀態
class AgentState(TypedDict):
    messages: Annotated[list, add]

# 初始化 LLM(綁定工具)
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
llm_with_tools = llm.bind_tools(tools)

# 系統提示
SYSTEM_PROMPT = """你是一個專業的研究助理。你可以使用以下工具:
1. tavily_search_results_json:搜尋網路上的最新資訊
2. calculator:進行數學計算

請遵循以下規則:
- 需要事實資訊時,務必使用搜尋工具驗證
- 需要數值計算時,使用計算器確保精確
- 回答請使用繁體中文
- 在最終回答中說明你的推理過程"""

# 推理節點
def reasoning_node(state: AgentState):
    messages = state["messages"]
    # 確保系統提示在最前面
    if not any(isinstance(m, SystemMessage) for m in messages):
        messages = [SystemMessage(content=SYSTEM_PROMPT)] + messages
    response = llm_with_tools.invoke(messages)
    return {"messages": [response]}

# 判斷是否需要繼續呼叫工具
def should_continue(state: AgentState):
    last_message = state["messages"][-1]
    if hasattr(last_message, "tool_calls") and last_message.tool_calls:
        return "tools"
    return "end"

# 建構圖
workflow = StateGraph(AgentState)

# 新增節點
workflow.add_node("reason", reasoning_node)
workflow.add_node("tools", ToolNode(tools))

# 定義邊
workflow.add_edge(START, "reason")
workflow.add_conditional_edges(
    "reason",
    should_continue,
    {"tools": "tools", "end": END}
)
workflow.add_edge("tools", "reason")  # 工具結果送回推理節點

# 編譯
agent = workflow.compile()
print("ReAct Agent 圖已編譯完成!")

# ── Cell 5:視覺化 Agent 圖結構 ──
from IPython.display import Image, display

try:
    display(Image(agent.get_graph().draw_mermaid_png()))
    print("上圖展示了 ReAct Agent 的狀態機結構:")
    print("  reason(推理)→ tools(工具呼叫)→ reason(再推理)→ ...")
except Exception:
    # 如果 mermaid 渲染失敗,印出文字版
    print(agent.get_graph().draw_ascii())

# ── Cell 6:執行 Agent ──
def run_agent(question: str):
    """執行 Agent 並印出完整的思考過程"""
    print(f"\n{'='*60}")
    print(f"問題:{question}")
    print(f"{'='*60}\n")

    inputs = {"messages": [HumanMessage(content=question)]}

    step = 0
    for event in agent.stream(inputs, stream_mode="values"):
        last_msg = event["messages"][-1]
        step += 1

        if hasattr(last_msg, "tool_calls") and last_msg.tool_calls:
            for tc in last_msg.tool_calls:
                print(f"[步驟 {step}] 呼叫工具: {tc['name']}")
                print(f"  參數: {tc['args']}")
        elif hasattr(last_msg, "content") and last_msg.content:
            msg_type = type(last_msg).__name__
            if msg_type == "ToolMessage":
                print(f"[步驟 {step}] 工具回傳: {last_msg.content[:200]}...")
            elif msg_type == "AIMessage":
                print(f"\n[最終回答]\n{last_msg.content}")

    print(f"\n{'='*60}\n")

# 測試問題 1:需要搜尋的問題
run_agent("2025 年全球 AI 市場規模大約是多少美元?"
          "如果以每年 35% 的速度成長,2028 年會達到多少?")

# 測試問題 2:純計算問題
run_agent("一家公司年營收 5 億美元,淨利率 12%,"
          "本益比 25 倍,請計算其市值。")

# ── Cell 7:自訂問題 ──
# 你可以修改下方的問題,測試 Agent 的表現
# run_agent("你的問題")
print("Lab 1 完成!你已成功建構了一個 ReAct 工具呼叫 Agent。")
print("嘗試修改 Cell 7 中的問題,觀察 Agent 如何選擇工具。")

程式碼解說:

七、Hands-on Lab 2:使用 CrewAI 建構多 Agent 研究團隊

本實作將建構一個由三個 Agent 組成的研究團隊:研究員負責蒐集資料、分析師負責數據分析、作家負責撰寫報告。三者以循序流程協作,自動完成一個完整的研究任務。

環境需求:Google Colab(免費版即可),需自備 OpenAI API Key。

完整程式碼如下——可直接複製到 Colab 執行:

###############################################
# Hands-on Lab 2:CrewAI 多 Agent 研究團隊
# 在 Colab 中一鍵執行
###############################################

# ── Cell 1:安裝套件 ──
# !pip install -q crewai crewai-tools

# ── Cell 2:設定環境變數 ──
import os
from getpass import getpass

if "OPENAI_API_KEY" not in os.environ:
    os.environ["OPENAI_API_KEY"] = getpass("請輸入你的 OpenAI API Key: ")

# 設定模型(CrewAI 預設使用 GPT-4o)
os.environ["OPENAI_MODEL_NAME"] = "gpt-4o-mini"

print("環境設定完成!")

# ── Cell 3:定義工具 ──
from crewai_tools import SerperDevTool, WebsiteSearchTool
from crewai import Agent, Task, Crew, Process
from crewai_tools import tool as crewai_tool

# 自訂簡易搜尋工具(不需額外 API Key)
@crewai_tool("Web Search Tool")
def simple_search(query: str) -> str:
    """搜尋網路資訊。輸入搜尋關鍵字,回傳相關結果摘要。"""
    # 在實際應用中,這裡會呼叫真正的搜尋 API
    # 為了 Lab 演示,我們使用 LLM 模擬搜尋結果
    from langchain_openai import ChatOpenAI
    llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.3)
    response = llm.invoke(
        f"假設你是一個搜尋引擎,針對以下查詢提供 3 條相關的搜尋結果摘要"
        f"(包含來源名稱與關鍵數據):\n\n查詢:{query}"
    )
    return response.content

@crewai_tool("Calculator Tool")
def calc_tool(expression: str) -> str:
    """計算數學表達式。例如: '100 * 1.35' 或 '500 / 7'"""
    try:
        result = eval(expression, {"__builtins__": {}}, {})
        return f"計算結果: {result}"
    except Exception as e:
        return f"計算錯誤: {e}"

print("工具定義完成!")

# ── Cell 4:定義三個 Agent ──

# Agent 1:研究員
researcher = Agent(
    role="資深產業研究員",
    goal="針對指定主題蒐集最新、最權威的市場數據與產業趨勢",
    backstory=(
        "你是一位在頂級管理顧問公司工作了 15 年的產業研究員。"
        "你的強項是從海量資訊中篩選出最具洞察力的數據點,"
        "並能清楚區分一手來源與二手轉述。你重視數據的時效性,"
        "偏好引用 2024-2026 年的最新研究。"
    ),
    tools=[simple_search],
    verbose=True,
    allow_delegation=False
)

# Agent 2:分析師
analyst = Agent(
    role="量化分析專家",
    goal="對蒐集到的數據進行深度分析,找出隱藏模式、計算關鍵指標、"
         "並產出可視化建議",
    backstory=(
        "你擁有統計學博士學位,曾在對沖基金擔任量化研究員。"
        "你擅長從雜亂的數據中提取信號,能夠計算 CAGR、市場份額、"
        "成長率等關鍵商業指標。你的分析總是附帶計算過程,"
        "確保結論的可驗證性。"
    ),
    tools=[calc_tool, simple_search],
    verbose=True,
    allow_delegation=False
)

# Agent 3:作家
writer = Agent(
    role="技術內容策略師",
    goal="將研究數據與分析結論整合為一份專業、易讀的繁體中文報告",
    backstory=(
        "你曾在 McKinsey 擔任資深編輯,專精於將複雜的技術分析"
        "轉化為高階管理者可理解的策略報告。你的寫作風格簡潔有力,"
        "善用類比與視覺化建議來傳達核心觀點。"
        "你的報告一律使用繁體中文撰寫。"
    ),
    tools=[],
    verbose=True,
    allow_delegation=False
)

print("三個 Agent 定義完成:研究員、分析師、作家")

# ── Cell 5:定義任務 ──

# 定義研究主題(你可以修改這裡!)
RESEARCH_TOPIC = "AI Agent 開發框架市場:LangGraph、CrewAI、AutoGen 的競爭格局與未來趨勢"

# Task 1:市場研究
research_task = Task(
    description=(
        f"針對以下主題進行全面的市場研究:\n\n"
        f"主題:{RESEARCH_TOPIC}\n\n"
        f"你需要調查並蒐集以下資訊:\n"
        f"1. 各框架的 GitHub 星數、貢獻者數量、版本迭代頻率\n"
        f"2. 各框架的主要企業用戶與使用案例\n"
        f"3. 開發者社群的規模與活躍度\n"
        f"4. 各框架的融資背景與商業化策略\n"
        f"5. 2025-2026 年的重大更新與路線圖"
    ),
    expected_output=(
        "一份結構化的研究備忘錄,包含上述五個面向的具體數據,"
        "每個數據點標註資料來源與日期。"
    ),
    agent=researcher
)

# Task 2:數據分析
analysis_task = Task(
    description=(
        "基於研究員提供的數據,進行以下分析:\n\n"
        "1. 計算各框架的年複合成長率(CAGR)——以 GitHub 星數為代理指標\n"
        "2. 製作功能比較矩陣(控制粒度、學習曲線、多 Agent 支援等維度)\n"
        "3. 分析各框架的技術護城河與潛在風險\n"
        "4. 預測未來 12 個月的市場走向\n"
        "5. 針對不同使用場景給出框架選擇建議"
    ),
    expected_output=(
        "一份包含定量分析結果的報告。包含計算過程、"
        "比較表格、以及基於數據的策略建議。"
    ),
    agent=analyst
)

# Task 3:報告撰寫
writing_task = Task(
    description=(
        "整合研究員與分析師的所有成果,撰寫一份完整的繁體中文分析報告。\n\n"
        "報告結構:\n"
        "1. 摘要(3-5 句話概述核心發現)\n"
        "2. 市場概覽(規模、趨勢、主要參與者)\n"
        "3. 框架深度比較(功能、效能、社群、商業化)\n"
        "4. 決策建議(按使用場景推薦框架)\n"
        "5. 風險提示與未來展望\n\n"
        "要求:語言為繁體中文,風格專業但易讀,"
        "關鍵數據以粗體標示,適當使用表格與列表。"
    ),
    expected_output=(
        "一份 800-1200 字的繁體中文專業分析報告,"
        "包含摘要、正文、比較表格與策略建議。"
    ),
    agent=writer
)

print("三個任務定義完成:研究 → 分析 → 撰寫")

# ── Cell 6:組裝 Crew 並執行 ──

crew = Crew(
    agents=[researcher, analyst, writer],
    tasks=[research_task, analysis_task, writing_task],
    process=Process.sequential,  # 循序執行
    verbose=True
)

print("Crew 已組裝完成!開始執行多 Agent 協作...\n")
print("=" * 60)

# 執行!
result = crew.kickoff()

print("\n" + "=" * 60)
print("多 Agent 協作完成!")
print("=" * 60)

# ── Cell 7:顯示最終報告 ──
print("\n\n" + "=" * 60)
print("最終報告")
print("=" * 60 + "\n")
print(result.raw)

# ── Cell 8:檢視執行統計 ──
print("\n\n" + "=" * 60)
print("執行統計")
print("=" * 60)

# 檢視 Token 使用量
if hasattr(result, "token_usage"):
    usage = result.token_usage
    print(f"總 Token 消耗: {usage.total_tokens:,}")
    print(f"  - Prompt tokens: {usage.prompt_tokens:,}")
    print(f"  - Completion tokens: {usage.completion_tokens:,}")

# 檢視各 Task 的輸出
if hasattr(result, "tasks_output"):
    for i, task_output in enumerate(result.tasks_output):
        print(f"\nTask {i+1} ({['研究', '分析', '撰寫'][i]}):")
        print(f"  Agent: {task_output.agent}")
        print(f"  輸出長度: {len(task_output.raw)} 字元")

print("\n\nLab 2 完成!")
print("你可以修改 Cell 5 中的 RESEARCH_TOPIC 變數,")
print("讓研究團隊針對不同主題產出報告。")

程式碼解說:

進階挑戰:嘗試將 Process.sequential 改為 Process.hierarchical,觀察框架如何自動引入一個「經理 Agent」來協調任務分配。

八、決策框架:三大框架比較與選擇指南

在經過前面的深度分析與實作之後,我們現在可以系統性地比較三大框架,幫助你根據具體需求做出最適選擇。

8.1 綜合比較表

比較維度 LangGraph CrewAI AutoGen (AG2)
核心抽象 有向圖(StateGraph) Agent + Task + Crew ConversableAgent + GroupChat
設計哲學 狀態機、圖計算 角色扮演、任務委派 對話驅動、多方協商
控制粒度 極高——可定義每條邊與條件 低——框架自動協調 中——可配置但不如圖直觀
學習曲線 中等——需理解圖與狀態概念 低——直覺的角色定義 高——概念層級多、API 複雜
多 Agent 支援 透過子圖實現 原生支援(Crew) 原生支援(GroupChat)
狀態管理 內建 Checkpointer,支援持久化 基本的上下文傳遞 對話歷史自動管理
Human-in-the-Loop 原生支援斷點與人類審核 有限支援 支援(human_input_mode)
程式碼執行 需自行整合 透過工具支援 原生內建(Docker 沙盒)
可觀測性 優秀——LangSmith 整合 基本的 verbose 日誌 中等——對話日誌
生態系統 LangChain 生態(最豐富) 獨立但快速成長 Microsoft 生態系統
適合團隊 有經驗的後端工程師 快速原型開發團隊 研究導向團隊
生產就緒度
授權協議 MIT MIT Apache 2.0(原)/ CC BY 4.0(AG2)

8.2 場景導向選擇指南

根據你的具體使用場景,我們建議以下選擇策略:

選擇 LangGraph,如果你:

選擇 CrewAI,如果你:

選擇 AutoGen(AG2),如果你:

8.3 混合使用策略

在企業實踐中,我們經常建議客戶採用混合策略:使用 CrewAI 快速驗證概念(POC 階段),確認可行性後再用 LangGraph 重寫為生產級系統。對於需要程式碼生成與執行的子模組,可以嵌入 AutoGen 的程式碼執行能力。這種策略兼顧了開發速度與生產穩定性。

Xie 等人在 TravelPlanner 基準測試[12]中的發現也支持這一觀點:單一框架在所有場景中都表現最佳是不現實的,針對不同任務特性選擇最適合的工具組合,才是工程上的最優解。

九、結語與展望

AI Agent 開發正處於一個激動人心的轉折點。從單一的 ReAct 迴圈到多 Agent 協作系統,從簡單的工具呼叫到複雜的任務規劃與自我反思,Agent 的能力邊界正在以驚人的速度擴張。

然而,我們也必須正視當前的挑戰:

展望未來,我們看到幾個重要趨勢正在匯聚:

第一,Model Context Protocol(MCP)[15]的標準化。Anthropic 提出的 MCP 協議正在成為 Agent 與外部工具互動的通用標準,這將大幅降低工具整合的工程成本,並促進 Agent 生態系統的互通性。

第二,Agent 原生的基礎模型。未來的 LLM 將不再是被「套上」Agent 功能的語言模型,而是從預訓練階段就針對 Agent 場景最佳化——更好的工具呼叫準確度、更強的多步驟規劃能力、更低的幻覺率。

第三,框架的融合與標準化。目前三大框架各有所長但互不相容,未來可能出現更高層級的抽象,讓開發者可以在統一的介面下混用不同框架的優勢。

對於企業而言,現在正是佈局 Agent 技術的最佳時機。不需要等待「完美」的框架出現——選擇一個適合你當前需求的工具,開始動手建構,在實踐中累積經驗與資料集。我們在超智諮詢的經驗表明,最成功的 Agent 專案不是一步到位的,而是從簡單的 ReAct 工具呼叫開始,逐步擴展到多 Agent 協作,在每一步都驗證商業價值。

如果你的團隊正在評估 AI Agent 的導入方案,或在框架選擇上遇到困難,歡迎與我們聯繫。我們的博士研究團隊持續追蹤 Agent 技術的最新進展,能夠協助你從架構設計、框架選型到生產部署的每一個環節。