在過去幾天,我們已經學會了如何用程式碼與 AI 進行對話。但到目前為止,我們的 AI 仍然像一個「被關在房間裡的天才」。它擁有淵博的知識,但它無法得知「此時此刻」房間外發生了什麼事。
它不知道今天的日期、不知道現在的天氣,更不知道網路上最新的熱門話題是什麼。
今天,我們就要來為這個房間,打開一扇「通往外部世界的窗戶」。我們要學習 Gemini 模型最核心的強大功能之一——Function Calling (函式呼叫)。
▋什麼是 Function Calling?
簡單來說,Function Calling 就是賦予 AI 「使用工具」的能力。
當你問 AI 一個它本身無法回答的問題時(例如:「最近台灣網友對『AI 繪圖』的搜尋熱度怎麼樣?」),它不再是猜測或回答「我不知道」,而是會:
這個過程,讓 AI 從一個「閉門造車」的語言模型,變成了一個能整合外部資訊的「智慧中樞」。
▋實戰開始:打造你的「即時趨勢分析師」
打開我們昨天 Day 20 使用的 Google Colab 筆記本。
第一步:安裝 Google Trends 的 Python 工具包
我們需要一個能讓我們用 Python 查詢 Google Trends 的工具。
【在新的程式碼儲存格中輸入並執行】
!pip install pytrends
第二步:定義我們的「外部工具 (Function)」
我們要先用 Python 寫一個函式,這個函式就是我們提供給 AI 使用的「工具」。它的功能很簡單:接收一個關鍵字,然後去 Google Trends 查詢相關的熱門議題。
【在新的程式碼儲存格中輸入並執行】
from pytrends.request import TrendReq
#這是我們要提供給 AI 使用的「工具」
def get_google_trends(keyword: str):
"""
查詢與指定關鍵字相關的 Google Trends 熱門議題。
Args:
keyword: 要查詢的關鍵字。
Returns:
與該關鍵字相關的熱門議題列表。
"""
pytrends = TrendReq(hl='zh-TW', tz=360)
pytrends.build_payload([keyword], cat=0, timeframe='today 1-m', geo='TW', gprop='')
#取得相關查詢
related_queries = pytrends.related_queries()
#取得「熱門」相關查詢的 DataFrame
rising_queries_df = related_queries[keyword]['rising']
if rising_queries_df is not None and not rising_queries_df.empty:
# 將 DataFrame 轉換為字串列表
return {"related_topics": rising_queries_df['query'].tolist()}
else:
return {"related_topics": "找不到相關的熱門議題。"}
第三步:將工具「註冊」給 Gemini 模型
現在,我們要告訴 Gemini:「嘿,你有一個新工具可以使用了!」
【在新的程式碼儲存格中輸入並執行】
import vertexai
from vertexai.generative_models import GenerativeModel, Tool
#初始化 Vertex AI (如果還沒做的話)
#vertexai.init(...)
#將我們剛剛定義的函式,包裝成一個 AI 看得懂的「工具」
google_trends_tool = Tool.from_functions([get_google_trends])
#建立一個知道如何使用這個工具的 Gemini 模型
model = GenerativeModel(
"gemini-1.0-pro",
tools=[google_trends_tool],
)
#建立一個聊天對話
chat = model.start_chat()
第四步:提出一個需要使用工具的問題
現在,最神奇的部分來了。我們向 AI 提出一個它自己無法回答、必須使用外部工具的問題。
【在新的程式碼儲存格中輸入並執行】
#提出一個需要查詢外部資訊的問題
response = chat.send_message("最近台灣網友對「AI 繪圖」這個主題,都在關心哪些相關的熱門議題?")
#查看 AI 的第一反應
print(response.candidates[0].content.parts[0])
執行後,你會發現 AI 並沒有直接回答你。相反地,它回傳了一個 function_call 的東西,裡面包含了 name='get_google_trends' 和 args={'keyword': 'AI 繪圖'}。
這就是 AI 在說:「收到!請幫我用 get_google_trends 這個工具,查詢 AI 繪圖 這個關鍵字。」
第五步:執行工具並將結果回傳
我們的程式碼需要回應 AI 的請求。
【在新的程式碼儲存格中輸入並執行】
#取得 AI 想要呼叫的函式名稱和參數
function_call = response.candidates[0].content.parts[0].function_call
function_name = function_call.name
keyword = function_call.args['keyword']
#實際執行我們寫的 Python 函式
trends_result = get_google_trends(keyword=keyword)
print(f"--- 正在查詢 Google Trends,關鍵字:{keyword} ---")
print(f"--- 查詢結果:{trends_result} ---")
#將查詢到的「真實數據」回傳給 AI
response = chat.send_message(
Part.from_function_response(
name=function_name,
response=trends_result,
)
)
#查看 AI 在看到真實數據後的最終回答
print("\n--- AI 的最終分析報告 ---")
print(response.candidates[0].content.parts[0].text)
執行後,你會看到 AI 根據從 Google Trends 取得的「即時、真實」數據,生成了一段非常有洞察力的分析報告,例如:「根據趨勢數據,最近台灣網友對 AI 繪圖的關注重點,似乎集中在『Midjourney V7 的新功能』以及『Stable Diffusion 的版權爭議』這兩個熱門議題上...」。
今天,我們完成了一次巨大的飛躍。我們學會了如何使用 Function Calling,讓 AI 不再是一個封閉的知識庫,而是一個能夠與外部世界即時互動的「智慧大腦中樞」。
從明天開始,我們將進入第四週的「整合、變現與自動化」,學習如何將我們過去三週學到的所有技能,串連成一個完整的、能創造商業價值的工作流。