大家好!歡迎來到「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 調用)的精準度完美結合。

小結
今天我們透過 ADK 極簡的宣告方式,成功讓企業 PM Agent 突破了純文字生成的限制,伸出雙手去抓取了公司內部的真實專案數據。
然而,當代理人擁有的工具越來越強大,甚至開始具備「寫入」能力(例如:自動發送跨部門通報 Email、修改資料庫狀態)時,我們絕不能讓它「先斬後奏」。