iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
Build on Google AI

30 天用 Google ADK 打造你的「全自動 AI 虛擬團隊」系列 第 9

Day 09 | 賦予雙手:Google ADK Tool Calling 基礎實作

  • 分享至 

  • xImage
  •  

大家好!歡迎來到「Build on Google AI」工程挑戰的第九天。

昨天我們成功定義了一位具備產品思維的 PM Agent。然而,在真實的「研發與工程創新」企業場景中,AI 不能只是在虛擬世界裡高談闊論。當我們在統籌公司內部的跨部門軟體開發專案時,如果代理人無法直接讀取內部工單系統(例如 Jira)的即時衝刺 (Sprint) 數據或重大 Bug 數量,它的風險預估就只是瞎猜。

今天,我們要正式解鎖 Google ADK 最核心的擴充能力:Function Tools (自定義工具),讓代理人擁有抓取企業內部真實系統數據的「雙手」。

第一步:理解 ADK 的 Function Tool 運作機制
在 Python 版本的 ADK 中,你可以非常直覺地為代理人定義工具供其使用。你完全不需要撰寫繁雜的 JSON Schema,ADK 能夠直接將你寫好的原生 Python 函式轉化為 LLM 可以理解的工具格式。

其運作原理非常優雅:開發者定義一個標準的 Python 函式,並加上型別提示 (Type Hints) 與說明文檔 (Docstring)。當使用者提出需求時,LLM 會評估是否需要呼叫該工具;如果需要,ADK 框架會在本地端執行該 Python 函式,並將結果再餵回給 LLM 以生成最終結論。

第二步:撰寫企業專案狀態查詢工具
讓我們打開專案的 agent.py 檔案。我們將撰寫一個模擬串接公司內部專案管理 API 的 Python 函式。

💡 工程創新守則: 函式下方的 """Docstring""" 絕對不能馬虎!這段文字是直接傳給 LLM 的「工具使用說明書」,它決定了模型能否精準判斷何時該呼叫這個工具。

from google.adk.agents.llm_agent import Agent

# 1. 定義自定義工具 (Function Tool)
def get_internal_project_status(project_id: str) -> dict:
    """
    查詢企業內部專案的最新開發狀態與風險數據。
    
    Args:
        project_id: 專案的唯一識別碼,例如 'core-api-v2' 或 'frontend-migration'。
        
    Returns:
        包含當前衝刺進度、未解重大 Bug 數量與資源狀態的字典。
    """
    # 在真實工程場景中,這裡會是呼叫 Jira API 或內部資料庫
    # 這裡我們先回傳一份模擬的企業專案數據
    mock_data = {
        "core-api-v2": {
            "sprint_progress": "85%",
            "critical_bugs_open": 3,
            "blocked_tasks": 1,
            "status": "at_risk"
        },
        "frontend-migration": {
            "sprint_progress": "40%",
            "critical_bugs_open": 0,
            "blocked_tasks": 0,
            "status": "healthy"
        }
    }
    
    return mock_data.get(project_id, {"status": "error", "message": "找不到該專案數據"})

第三步:將工具掛載至 PM Agent
根據 ADK 的架構,agent.py 檔案中包含了一個根代理人 (root agent) 的定義,這也是 ADK 代理人中唯一不可或缺的元素。定義好工具後,我們只需要在初始化 Agent 時,將剛剛寫好的函式放入 tools 陣列中即可。

結合我們昨天的 System Prompt,完整的設定如下:

pm_instruction = """
你是企業內部的資深技術專案經理 (Technical PM)。
請使用 'get_internal_project_status' 工具來查詢特定專案的即時開發狀態。
根據取得的 Bug 數量與阻礙任務 (Blocked tasks),分析專案是否面臨延遲風險,並給出下一步資源調配建議。
"""

# 2. 將工具賦予代理人
root_agent = Agent(
   model='gemini-flash-latest',
   name='enterprise_pm_agent',
   description="Analyzes enterprise project health, identifies risks, and manages tasks.",
   instruction=pm_instruction,
   tools=[get_internal_project_status], # 將 Python 函式直接掛載
)

第四步:見證數據驅動的威力
現在,透過終端機啟動你的代理人,對它說:「請幫我確認 core-api-v2 專案目前的開發狀況,並給出建議。」
你會在後台 Log 中看到代理人主動決定呼叫 get_internal_project_status(project_id='core-api-v2'),取得後端回傳的 JSON 數據(包含 3 個 Critical Bugs 與 1 個 Blocked Task)後,再根據我們定義好的 PM 提示詞,輸出結構化的風險評估與後續行動方案。

這就是「研發與工程創新」的核心價值:將 LLM 處理模糊語意的優勢,與傳統程式碼(企業 API 調用)的精準度完美結合。

https://ithelp.ithome.com.tw/upload/images/20260910/20121643U0IUtCtTSL.png

小結
今天我們透過 ADK 極簡的宣告方式,成功讓企業 PM Agent 突破了純文字生成的限制,伸出雙手去抓取了公司內部的真實專案數據。

然而,當代理人擁有的工具越來越強大,甚至開始具備「寫入」能力(例如:自動發送跨部門通報 Email、修改資料庫狀態)時,我們絕不能讓它「先斬後奏」。


上一篇
Day 08 | 注入靈魂:用 System Prompt 打造擁有產品思維的 PM Agent
下一篇
Day 10 | 網路煉金術:實作非同步爬蟲,抓取最新 AI 趨勢
系列文
30 天用 Google ADK 打造你的「全自動 AI 虛擬團隊」20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言