iT邦幫忙

2025 iThome 鐵人賽

DAY 16
1
生成式 AI

用 Vertex AI 在 30 天內,打造個人 IP 品牌內容系列 第 21

Day 21: 進階程式碼實戰:用 Function Calling 打造「即時趨勢分析師」

  • 分享至 

  • xImage
  •  

在過去幾天,我們已經學會了如何用程式碼與 AI 進行對話。但到目前為止,我們的 AI 仍然像一個「被關在房間裡的天才」。它擁有淵博的知識,但它無法得知「此時此刻」房間外發生了什麼事。

它不知道今天的日期、不知道現在的天氣,更不知道網路上最新的熱門話題是什麼。

今天,我們就要來為這個房間,打開一扇「通往外部世界的窗戶」。我們要學習 Gemini 模型最核心的強大功能之一——Function Calling (函式呼叫)。

▋什麼是 Function Calling?

簡單來說,Function Calling 就是賦予 AI 「使用工具」的能力。

當你問 AI 一個它本身無法回答的問題時(例如:「最近台灣網友對『AI 繪圖』的搜尋熱度怎麼樣?」),它不再是猜測或回答「我不知道」,而是會:

  • 識別需求:AI 識別出這個問題需要一個「查詢網路趨勢」的工具。
  • 生成呼叫指令:AI 不會自己去查詢,而是會生成一段「呼叫工具的請求」,告訴你的程式:「嘿,請幫我用『Google Trends』這個工具,查詢一下『AI 繪圖』這個關鍵字。」
  • 執行工具:你的程式碼接收到這個請求後,實際去呼叫 Google Trends 的 API,並取得查詢結果。
  • 將結果回傳給 AI:你的程式碼再將查詢到的真實數據,回傳給 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 不再是一個封閉的知識庫,而是一個能夠與外部世界即時互動的「智慧大腦中樞」。

從明天開始,我們將進入第四週的「整合、變現與自動化」,學習如何將我們過去三週學到的所有技能,串連成一個完整的、能創造商業價值的工作流。


上一篇
Day 20: 打造你的第一個 AI 小工具:靈感產生器
系列文
用 Vertex AI 在 30 天內,打造個人 IP 品牌內容21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言