CrewAI 完全指南(一):入門與核心概念——用多 Agent 協作解決複雜問題

前言

你有沒有遇過這樣的情境?
你想讓 AI 幫你完成一個任務,但任務太複雜,單一的 ChatGPT 對話沒辦法做好:

  • 需要同時搜尋網路、分析資料、寫報告
  • 不同步驟需要不同的「專業角色」
  • 任務很長,單一 context window 放不下

CrewAI 就是為了解決這個問題而生的。它讓你可以建立一個由多個 AI Agent 組成的團隊,每個 Agent 有自己的角色、工具和目標,協作完成複雜任務。


什麼是 CrewAI?

CrewAI 是一個開源的 Python 框架,專門用來建立多 Agent 協作系統

用一個類比來說:

傳統 LLM 呼叫:你問一個全才顧問所有問題
CrewAI:你僱用一個團隊——研究員、分析師、文案、專案經理——各司其職

CrewAI 的核心理念是角色扮演 + 任務分工

  • 每個 Agent 有明確的職責(role)目標(goal)背景故事(backstory)
  • 任務按照依賴關係自動排序和傳遞
  • Crew 負責協調整個流程

CrewAI vs 其他 Multi-Agent 框架

框架特點學習曲線
CrewAI角色扮演導向,強調協作,設定直覺
LangGraph圖形化流程,狀態機,彈性高中高
AutoGenMicrosoft 出品,對話式協作
LangChain Agents工具豐富,但單 Agent

CrewAI 的設計哲學:讓非工程師也能理解 Agent 的邏輯(因為你在描述一個「團隊」,而不是寫演算法)。


安裝與環境設定

 1# 建立虛擬環境
 2python -m venv crewai_env
 3source crewai_env/bin/activate  # Windows: crewai_env\Scripts\activate
 4
 5# 安裝 CrewAI(含常用工具)
 6pip install crewai crewai-tools
 7
 8# 設定 API Key(CrewAI 預設使用 OpenAI)
 9export OPENAI_API_KEY="your-api-key"
10
11# 如果要用 Anthropic Claude
12export ANTHROPIC_API_KEY="your-api-key"

建立第一個專案:

1crewai create crew my_first_crew
2cd my_first_crew

這會自動產生標準專案結構:

my_first_crew/
├── src/my_first_crew/
│   ├── config/
│   │   ├── agents.yaml    ← 定義 Agent
│   │   └── tasks.yaml     ← 定義 Task
│   ├── crew.py            ← 組合 Crew
│   └── main.py            ← 執行入口
└── pyproject.toml

核心元件詳解

元件 1:Agent(智能體)

Agent 是 CrewAI 的基本單位,代表一個有特定職責的 AI 角色。

三個必要屬性:

 1from crewai import Agent
 2from crewai_tools import SerperDevTool  # Google 搜尋工具
 3
 4search_tool = SerperDevTool()
 5
 6researcher = Agent(
 7    role="資深市場研究員",           # 角色名稱(影響 LLM 的行為)
 8    goal="找出目標市場的最新趨勢與競爭對手動態",  # Agent 的個人目標
 9    backstory="""你是一位有十年經驗的市場研究專家,
10    擅長從海量資訊中找出關鍵洞察。你特別注重數據的可靠性,
11    只引用可信來源,並以清晰的結構呈現研究結果。""",
12    tools=[search_tool],            # 這個 Agent 可以用的工具
13    llm="gpt-4o",                   # 使用的 LLM 模型
14    verbose=True,                   # 開發時建議開啟,顯示思考過程
15    max_iter=10,                    # 最多嘗試 10 次
16    memory=True,                    # 啟用記憶功能
17)

為什麼 backstory 很重要?

backstory 不只是裝飾,它直接影響 LLM 的行為。一個有「謹慎的研究員」背景的 Agent 和一個「大膽的創業家」背景的 Agent,面對同樣的任務會給出非常不同的結果。


元件 2:Task(任務)

Task 定義了 Agent 要完成的具體工作。

 1from crewai import Task
 2
 3research_task = Task(
 4    description="""研究 {topic} 的市場現況。
 5    具體需要找出:
 6    1. 市場規模(如有數據請引用來源)
 7    2. 前三名競爭對手及其核心優勢
 8    3. 最近 6 個月的重要趨勢
 9    4. 潛在市場機會""",
10    
11    expected_output="""一份結構清晰的市場研究報告,包含:
12    - 市場規模概述(附數據來源)
13    - 競爭對手分析表格
14    - 趨勢摘要(3-5 個重點)
15    - 機會評估
16    格式:Markdown,長度約 800-1200 字""",
17    
18    agent=researcher,               # 指定由哪個 Agent 負責
19    # context=[previous_task],      # 可以依賴其他 Task 的輸出
20    # output_file="report.md",      # 可以直接輸出到檔案
21)

description 的撰寫技巧:

  • 越具體越好,列出清單,明確說明需要什麼格式
  • 使用 {topic} 這類佔位符,在執行時動態替換
  • 把「期望輸出」寫得越詳細,LLM 越不容易跑偏

元件 3:Crew(團隊)

Crew 把 Agents 和 Tasks 組合起來,定義協作模式。

 1from crewai import Crew, Process
 2
 3crew = Crew(
 4    agents=[researcher, analyst, writer],  # 團隊成員
 5    tasks=[research_task, analysis_task, writing_task],  # 任務清單
 6    
 7    process=Process.sequential,    # 循序執行(任務一個接一個)
 8    # process=Process.hierarchical,  # 階層式(由 manager 分配)
 9    
10    verbose=True,
11    memory=True,                   # 讓 Crew 在任務間保留記憶
12)
13
14# 啟動執行(inputs 的值會替換 description 裡的 {佔位符})
15result = crew.kickoff(inputs={"topic": "台灣電動車市場"})
16print(result.raw)

兩種執行模式:

Sequential(循序):
  Task 1 → Task 2 → Task 3 → 輸出
  前一個 Task 的結果自動傳給下一個 Task

Hierarchical(階層):
  Manager Agent 拆解目標
    ├── 分配給 Agent A
    ├── 分配給 Agent B
    └── 彙整結果
  適合更動態、需要判斷的場景

元件 4:Tool(工具)

Tool 是 Agent 可以呼叫的外部能力。CrewAI 內建許多工具,也可以自訂。

 1from crewai_tools import (
 2    SerperDevTool,       # Google 搜尋
 3    FileReadTool,        # 讀取本地檔案
 4    FileWriterTool,      # 寫入檔案
 5    ScrapeWebsiteTool,   # 網頁爬取
 6    PDFSearchTool,       # PDF 內容搜尋
 7    CSVSearchTool,       # CSV 資料查詢
 8    CodeInterpreterTool, # 執行 Python 程式碼
 9)
10
11# 自訂工具
12from crewai.tools import tool
13
14@tool("台灣股市查詢工具")
15def get_stock_price(ticker: str) -> str:
16    """查詢台灣股票的即時價格。輸入股票代號(例如:2330)。"""
17    # 實際上會呼叫 API,這裡用 mock
18    prices = {"2330": 950, "2317": 120, "0050": 185}
19    price = prices.get(ticker, "找不到此股票代號")
20    return f"{ticker} 的即時股價:{price} 元"
21
22
23# 掛載工具給 Agent
24stock_analyst = Agent(
25    role="股票分析師",
26    goal="分析台灣股市動態",
27    backstory="有多年台股投資經驗的分析師",
28    tools=[get_stock_price, SerperDevTool()],
29)

第一個完整範例:自動內容研究與撰寫

這是一個可以直接執行的完整範例:自動研究一個主題,並產出一篇部落格文章草稿

  1import os
  2from crewai import Agent, Task, Crew, Process
  3from crewai_tools import SerperDevTool
  4
  5os.environ["OPENAI_API_KEY"] = "your-api-key"
  6os.environ["SERPER_API_KEY"] = "your-serper-key"  # serper.dev 免費額度
  7
  8search_tool = SerperDevTool()
  9
 10# ---- 定義 Agents ----
 11
 12researcher = Agent(
 13    role="內容研究員",
 14    goal="深入研究指定主題,收集最新、最精確的資訊",
 15    backstory="""你是一位經驗豐富的內容研究員,擅長快速找到高品質的資訊。
 16    你會從多個來源交叉驗證,確保資料的準確性。
 17    你的研究報告結構清晰,重點突出。""",
 18    tools=[search_tool],
 19    verbose=True,
 20    llm="gpt-4o-mini",
 21)
 22
 23writer = Agent(
 24    role="科技部落客",
 25    goal="根據研究資料,撰寫吸引人且資訊豐富的部落格文章",
 26    backstory="""你是一位擁有五年經驗的科技部落客,
 27    擅長將複雜的技術概念用淺顯易懂的方式呈現。
 28    你的文章既有深度,又不失趣味,讀者回饋極佳。
 29    你會搭配具體例子,讓讀者容易理解。""",
 30    verbose=True,
 31    llm="gpt-4o",
 32)
 33
 34editor = Agent(
 35    role="資深編輯",
 36    goal="審閱並優化文章,確保品質、準確性和可讀性",
 37    backstory="""你是一位嚴謹的資深編輯,有豐富的科技媒體編輯經驗。
 38    你會檢查事實準確性、邏輯連貫性、文字流暢度,
 39    並給出具體的修改建議。""",
 40    verbose=True,
 41    llm="gpt-4o",
 42)
 43
 44# ---- 定義 Tasks ----
 45
 46research_task = Task(
 47    description="""請深入研究以下主題:{topic}
 48
 49    需要收集的資訊:
 50    1. 最新發展動態(最近 3 個月內)
 51    2. 核心技術原理(用非技術語言解釋)
 52    3. 主要玩家和代表性產品
 53    4. 實際應用案例(至少 2-3 個)
 54    5. 未來發展趨勢
 55
 56    請附上資訊來源。""",
 57
 58    expected_output="""詳細的研究筆記,包含:
 59    - 主題概述(200 字內)
 60    - 最新動態清單(3-5 條,每條附來源連結)
 61    - 技術原理說明(300 字內)
 62    - 應用案例(各 100-200 字)
 63    - 趨勢預測(3 點)
 64    格式:Markdown""",
 65
 66    agent=researcher,
 67)
 68
 69writing_task = Task(
 70    description="""根據研究員提供的資料,撰寫一篇關於 {topic} 的部落格文章。
 71
 72    文章要求:
 73    - 標題要吸睛,能引起好奇心
 74    - 開頭要有一個引人入勝的問題或故事
 75    - 內容要有邏輯層次(基礎 → 進階)
 76    - 加入 2-3 個具體的應用案例
 77    - 結尾要有行動呼籲(讀者下一步可以做什麼)
 78    - 語氣:專業但親切,像在跟朋友解釋""",
 79
 80    expected_output="""一篇完整的部落格文章:
 81    - 長度:1200-1800 字
 82    - 有清晰的段落結構和小標題
 83    - 格式:Markdown
 84    - 包含一個「延伸閱讀」區塊""",
 85
 86    agent=writer,
 87    context=[research_task],  # 這個 Task 會收到 research_task 的輸出
 88)
 89
 90editing_task = Task(
 91    description="""審閱寫作者提交的文章,並給出具體的改進建議。
 92
 93    審閱重點:
 94    1. 事實正確性(是否與研究資料一致?)
 95    2. 邏輯連貫性(段落之間是否順暢?)
 96    3. 讀者體驗(是否容易理解?)
 97    4. 標題和副標題的吸引力
 98    5. 錯別字和語法問題
 99
100    如果文章整體良好,可以直接輸出最終版本。
101    如果需要修改,請提供修改後的完整版本。""",
102
103    expected_output="""最終版本的部落格文章(Markdown 格式),
104    以及一份簡短的編輯說明(說明做了哪些調整,或為何認為不需要調整)。""",
105
106    agent=editor,
107    context=[writing_task],
108)
109
110# ---- 建立 Crew 並執行 ----
111
112content_crew = Crew(
113    agents=[researcher, writer, editor],
114    tasks=[research_task, writing_task, editing_task],
115    process=Process.sequential,
116    verbose=True,
117)
118
119result = content_crew.kickoff(inputs={"topic": "AI Agent 在企業自動化的應用"})
120
121print("\n" + "="*60)
122print("最終輸出:")
123print("="*60)
124print(result.raw)

執行結果解讀

CrewAI 執行時,你會看到每個 Agent 的思考過程(verbose=True):

[2024-01-15 10:00:01][DEBUG]: Working Agent: 內容研究員
[2024-01-15 10:00:01][INFO]: Starting Task: 請深入研究以下主題:AI Agent...

> Entering new CrewAgentExecutor chain...
  我需要搜尋最新的 AI Agent 企業應用資訊...
  
  Action: Search the internet
  Action Input: {"search_query": "AI Agent enterprise automation 2024"}
  
  Observation: [搜尋結果...]
  
  Thought: 找到了一些資訊,讓我再搜尋更具體的案例...
  ...

[2024-01-15 10:02:15][DEBUG]: [Task output]:
## AI Agent 企業應用研究筆記
...

[2024-01-15 10:02:15][DEBUG]: Working Agent: 科技部落客
...

最終輸出透過 result 物件取得:

1print(result.raw)            # 原始文字輸出
2print(result.token_usage)    # token 用量統計

小結

這篇介紹了:

  • CrewAI 的核心概念:用多 Agent 協作解決複雜任務
  • 四大元件:Agent(角色)、Task(任務)、Crew(團隊)、Tool(工具)
  • 第一個完整範例:自動研究 + 撰寫 + 編輯的內容生成 Crew

下一篇我們會用三個更貼近真實工作場景的應用:競爭對手情報分析、自動化程式碼審查、以及客服需求分類系統,展示 CrewAI 如何解決實際業務問題。


系列導覽

  • 第一篇(本篇):入門與核心概念
  • 第二篇:真實場景實戰——競情分析、程式碼審查、客服自動化
  • 第三篇:進階技巧——Flows、Memory、結構化輸出與生產部署