第二章:為 AI 裝備武器 (Tools) 與打造無敵爬蟲特工

在上一章,我們成功讓兩個 Agent (研究員與撰稿人) 互相對話寫出了文章。但如果你仔細看他們的對話紀錄,你會發現一個致命的問題: 他們目前只能「靠腦袋空想」! 如果我問他們:「今天台積電的收盤價是多少?」,他們會瞎掰一個數字,或是告訴你「作為一個 AI 模型,我沒有今天的資料」。

在 Multi-Agent 的世界裡,如果大腦沒有手腳,它就只是一個會聊天的玩具。 這章我們要教你如何給 Agent 發放「工具 (Tools)」,讓他們擁有 Google 搜尋、閱讀網頁、甚至操作外部 API 的能力!這才是真正具備商業毀滅性價值的起點。

🎯 本章目標

  1. 了解 CrewAI 的 Tool (工具) 核心機制與運作原理。
  2. 學習如何讓 AI 使用官方內建的搜尋工具 (Search Tool)。
  3. 使用 Vibe Coding 請 AI 幫我們寫一個「專屬爬蟲工具 (Custom Tool)」,抓取特定網頁的財報內容。
  4. 觀察 Agent 如何自主決定「什麼時候該用什麼工具」。

🛠️ 第一步:發放內建武器 (Google 搜尋)

CrewAI 官方非常貼心,提供了一個 crewai_tools 套件,裡面包含了非常多實用的即插即用工具,例如 SerperDevTool 就可以讓 Agent 擁有使用 Google 搜尋的能力。

🔥【Vibe Prompt 實戰咒語】 我正在使用 CrewAI。請教我如何在我的 Researcher Agent 中加入 "SerperDevTool" 來讓他具備 Google 搜尋的能力。 1. 請告訴我需要去哪個網站註冊並拿取什麼環境變數 (例如 SERPER_API_KEY)。 2. 請給我一段完整的 Agent 定義程式碼,示範如何實例化這個工具並放進 tools=[] 陣列中。 3. 請加上詳細的中文註解。

AI 會教你先去 serper.dev (一個專門提供 Google 搜尋 API 給 AI 用的網站) 註冊一個免費帳號拿 API Key,然後把程式碼修改成這樣:

import os
from crewai import Agent
from crewai_tools import SerperDevTool

# 1. 插入搜尋引擎的鑰匙 (通常寫在 .env 中,這裡示範寫法)
os.environ["SERPER_API_KEY"] = "你的_Serper_金鑰"

# 2. 建立一把搜尋武器的實例
search_tool = SerperDevTool()

# 3. 建立員工,並把武器發給他
researcher = Agent(
    role='科技市場資深研究員',
    goal='找出最新趨勢',
    backstory='你擅長從 Google 搜尋結果中過濾出最有價值的商業情報。',
    verbose=True,
    tools=[search_tool] # 關鍵!把武器放進清單裡
)

現在,當這個 Researcher 遇到不懂的問題時,它就會在終端機印出驚人的思考過程: 「Thought: 我需要知道今天特斯拉的股價,但我不知道。我應該使用搜尋工具。」 Action: Search the internet Action Input: "2026 特斯拉 最新股價 新聞" 然後它會把搜尋結果拿來繼續思考!這就是真正具備「行動力」的 Agent!


🕷️ 第二步:打造你的專屬武器 (Custom Tool)

內建的工具雖然好用,但在商業實戰中絕對不夠。 假設你的客戶是金融業,他要求 Agent 必須去「指定的財報網址」爬取最新的股東會紀錄,然後總結成重點。 這時候,我們就必須自己當鐵匠,為 Agent 打造一把專屬客製化工具 (Custom Tool)

這對新手來說本來極度困難,因為這牽涉到 Python 爬蟲與類別封裝。但在 Vibe Coding 時代,這只要一句話!

🔥【Vibe Prompt 實戰咒語】 請幫我用 Python 寫一個 CrewAI 的 Custom Tool。 1. 工具名稱:StockReportScraperTool。 2. 核心功能:接收一個 url (字串),使用 requests 和 BeautifulSoup 把該網頁裡面的 <p> 標籤文字爬下來,並回傳成一個長字串。 3. 請使用 CrewAI 官方推薦的 @tool 裝飾器寫法 (函式形式)。 4. 【非常重要】請在函數裡面提供極度詳細的 Docstring (三引號註解),告訴 Agent 什麼時候該用這個工具,以及 url 的格式應該長怎樣。

AI 會幫你寫出這個超強的自訂爬蟲工具:

from crewai.tools import tool
import requests
from bs4 import BeautifulSoup

@tool("StockReportScraperTool")
def scrape_report(url: str) -> str:
    """
    這是一個用來爬取特定財報或新聞網址內容的工具。
    當任務要求你「閱讀特定網址的內容」時,請務必呼叫此工具。
    請傳入一個有效的 URL 字串 (例如 https://example.com/report),
    它會自動爬取該網頁的內文並回傳字串。
    """
    try:
        # 偽裝成瀏覽器,避免被簡單阻擋
        headers = {'User-Agent': 'Mozilla/5.0'}
        response = requests.get(url, headers=headers, timeout=10)
        
        # 使用 BS4 解析 HTML
        soup = BeautifulSoup(response.text, 'html.parser')
        paragraphs = soup.find_all('p')
        
        # 把所有段落接在一起回傳
        return "\n".join([p.text for p in paragraphs])
    except Exception as e:
        return f"爬取失敗,錯誤訊息:{str(e)}"

接著,你只要把 scrape_report 這個函數放到 Agent 的 tools=[] 裡面,你的 Agent 就瞬間學會了爬蟲技能!

💼 [商業應用場景] 為什麼 Docstring 是決定生死的關鍵?

在上面寫 Custom Tool 的程式碼中,最重要的一段其實不是 requests 爬蟲,而是那段三引號包起來的中文註解 (Docstring)。

這是一個初學者最容易踩的坑。當你發給 Agent 很多把武器 (例如有搜尋武器、有爬蟲武器、有發信武器),Agent 怎麼知道現在該拿哪一把出來用? Agent 其實會去「閱讀」你寫在工具裡的 Docstring!

如果你沒有寫清楚,Agent 就會陷入混亂,拿發信的工具去嘗試搜尋資料,最後導致任務失敗。 因此,在向客戶報價時,你可以說:「我們幫您開發的 AI 員工,其核心技術在於『工具決策邏輯的優化』,這能保證 AI 不會亂用工具而導致系統崩潰。」這句話背後的技術,就是精準的 Docstring 撰寫。

✅ 本章小結

這就是打造「數位員工」最迷人的地方:你不只是在寫程式,你是在設計大腦與外部世界工具的互動邏輯。 有了工具,你的 AI 就像裝上了手腳。下一章,我們將探討他們如何在團隊中「互相交流與委派任務」,並發掘記憶 (Memory) 系統的秘密!

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!