快速入門導覽課程:使用 Agent Development Kit (ADK) 建構 AI 代理並部署至 Cloud Run
Python Agent Development Kit (ADK) 可讓您開發使用自訂工具的 AI 代理,並在 Cloud Run 上以服務形式執行。在本快速入門導覽課程中,您將部署範例代理,擷取特定城市的氣象報告。
從原始碼部署時,Cloud Run 會自動為服務建構容器映像檔。如要進一步瞭解 Python buildpack 如何判斷 Cloud Run 來源部署作業的預設進入點,請參閱「建構 Python 應用程式」。
事前準備
-
安裝 Google Cloud CLI。
-
設定 gcloud CLI,使用您的聯合身分。
詳情請參閱「 使用聯合身分登入 gcloud CLI」。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
選取或建立專案所需的角色
- 選取專案:選取專案時不需要特定 IAM 角色,只要您獲派某個專案的角色,即可選取該專案。
-
建立專案:如要建立專案,您必須具備專案建立者角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
-
建立 Google Cloud 專案:
gcloud projects create PROJECT_ID
將
PROJECT_ID替換為您要建立的 Google Cloud 專案名稱。 -
選取您建立的 Google Cloud 專案:
gcloud config set project PROJECT_ID
將
PROJECT_ID替換為 Google Cloud 專案名稱。
-
如要使用現有專案進行本指南中的操作,請確認您具有完成本指南所需的權限。如果您建立新專案,則已具備必要權限。
-
啟用 Cloud Run Admin API、Vertex AI API 和 Cloud Build API (如有尚未啟用的 API):
啟用 API 所需的角色
您必須具備
serviceusage.services.enable權限,才能啟用 API。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過服務使用情形管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。gcloud services enable run.googleapis.com
aiplatform.googleapis.com cloudbuild.googleapis.com - 按照 Agent Development Kit 說明文件中的指示安裝 ADK。
- 查看 Cloud Run 定價,或使用 Pricing Calculator 估算費用。
必要的角色
如要取得完成本快速入門導覽課程所需的權限,請要求管理員授予您下列 IAM 角色:
- 專案的 Cloud Run 原始碼開發人員 (
roles/run.sourceDeveloper) - 專案的 Vertex AI 使用者 (
roles/aiplatform.user) - 服務身分的服務帳戶使用者 (
roles/iam.serviceAccountUser) - 專案的記錄檢視器 (
roles/logging.viewer)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
授予 Cloud Build 服務帳戶專案存取權
Cloud Build 會自動使用 Compute Engine 預設服務帳戶,做為建構原始碼和 Cloud Run 資源的預設 Cloud Build 服務帳戶,除非您覆寫這項行為。
如要讓 Cloud Build 建構來源,請將專案的 Cloud Run 建構者 (roles/run.builder) 角色授予 Cloud Build 服務帳戶:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS \ --role=roles/run.builder
將 PROJECT_ID 替換為您的 Google Cloud專案 ID,並將 SERVICE_ACCOUNT_EMAIL_ADDRESS 替換為 Cloud Build 服務帳戶的電子郵件地址。如果您使用 Compute Engine 預設服務帳戶做為 Cloud Build 服務帳戶,請按照下列格式輸入服務帳戶電子郵件地址:
PROJECT_NUMBER-compute@
將 PROJECT_NUMBER 替換為您的 Google Cloud專案編號。
如要瞭解如何找出專案 ID 和專案編號,請參閱「建立及管理專案」。
授予 Cloud Run 建構工具角色後,需要幾分鐘的時間才會生效。
編寫範例應用程式
如要以 Python 編寫應用程式,請按照下列步驟操作:
建立名為
parent_folder的新上層目錄,然後切換至該目錄:mkdir parent_folder cd parent_folder在
parent_folder目錄中,建立名為multi_tool_agent的新子目錄,然後切換至該目錄:mkdir multi_tool_agent cd multi_tool_agent建立
__init__.py檔案來匯入代理:from . import agent建立
agent.py檔案,定義代理來回答指定城市的時間和天氣問題:import datetime from zoneinfo import ZoneInfo from google.adk.agents import Agent def get_weather(city: str) -> dict: """Retrieves the current weather report for a specified city. Args: city (str): The name of the city for which to retrieve the weather report. Returns: dict: status and result or error msg. """ if city.lower() == "new york": return { "status": "success", "report": ( "The weather in New York is sunny with a temperature of 25 degrees" " Celsius (77 degrees Fahrenheit)." ), } else: return { "status": "error", "error_message": f"Weather information for '{city}' is not available.", } def get_current_time(city: str) -> dict: """Returns the current time in a specified city. Args: city (str): The name of the city for which to retrieve the current time. Returns: dict: status and result or error msg. """ if city.lower() == "new york": tz_identifier = "America/New_York" else: return { "status": "error", "error_message": ( f"Sorry, I don't have timezone information for {city}." ), } tz = ZoneInfo(tz_identifier) now = datetime.datetime.now(tz) report = ( f'The current time in {city} is {now.strftime("%Y-%m-%d %H:%M:%S %Z%z")}' ) return {"status": "success", "report": report} root_agent = Agent( name="weather_time_agent", model="gemini-2.5-flash", description=( "Agent to answer questions about the time and weather in a city." ), instruction=( "You are a helpful agent who can answer user questions about the time and weather in a city." ), tools=[get_weather, get_current_time], )建立
.env檔案並新增下列變數:GOOGLE_GENAI_USE_VERTEXAI=TRUE GOOGLE_CLOUD_PROJECT=PROJECT_ID GOOGLE_CLOUD_LOCATION=REGION更改下列內容:
- PROJECT_ID: Google Cloud 專案 ID。
- REGION:您打算部署服務的區域。
前往上層資料夾目錄
parent_folder,並建立requirements.txt檔案,以新增google-adk依附元件:google-adk來源專案包含下列結構:
parent_folder/ ├── requirements.txt └── multi_tool_agent/ ├── __init__.py ├── agent.py └── .env
應用程式已完成,可以部署了。
從原始碼部署至 Cloud Run
「從來源部署」會自動從原始碼建構容器映像檔並部署。
在原始碼目錄 (
parent_folder) 中,使用下列指令部署至 Cloud Run:gcloud run deploy --source .
系統提示您輸入服務名稱時,請按下 Enter 鍵接受預設名稱,例如
weather-agent。如果系統提示您在專案中啟用其他 API (例如 Artifact Registry API),請按下
y回應。系統提示您選擇區域時,請選取所需區域,例如
europe-west1。如果系統提示您在指定區域建立存放區,請按下
y回應。如果系統提示您允許公開存取,請回覆
y。如果組織政策限制網域,可能就不會看到這個提示。詳情請參閱「事前準備」一節。
然後稍等片刻,等待部署成功。部署成功後,指令列會顯示已部署代理的服務網址,格式如下:
https://weather-agent-123456789101.us-central1.run.app/list-apps。
執行代理
如要使用 ADK 代理,請執行下列 curl 指令:
如要取得應用程式清單,請執行下列指令:
curl -X GET SERVICE_URL/list-apps將 SERVICE_URL 替換為已部署服務的網址。
如要啟動工作階段,請執行下列指令:
curl -X POST SERVICE_URL/apps/multi_tool_agent/users/u_123/sessions/s_123 -H "Content-Type: application/json" -d '{"key1": "value1", "key2": "value2"}'執行下列指令來查詢代理:
curl -X POST SERVICE_URL/run \ -H "Content-Type: application/json" \ -d "{\"appName\": \"multi_tool_agent\",\"userId\": \"u_123\",\"sessionId\": \"s_123\",\"newMessage\": { \"role\": \"user\", \"parts\": [{ \"text\": \"What's the weather in New York today?\" }]}}"
代理會在查詢結果中傳回天氣資訊。
如要進一步瞭解支援的 curl 指令及相關範例,請參閱 ADK 說明文件中的「使用 API 伺服器」一節。
清除所用資源
為避免系統向您的 Google Cloud 帳戶收取額外費用,請刪除您透過本快速入門導覽課程部署的所有資源。
刪除存放區
Cloud Run 不會對未使用的已部署服務收費。不過,您可能仍須支付在 Artifact Registry 儲存容器映像檔的費用。如要刪除 Artifact Registry 存放區,請按照 Artifact Registry 說明文件中的「刪除存放區」步驟操作。
刪除服務
Cloud Run 服務在收到要求前不會產生費用。如要刪除 Cloud Run 服務,請按照下列任一步驟操作:
控制台
如要刪除服務:
前往 Google Cloud 控制台的 Cloud Run「Services」(服務) 頁面:
在服務清單中找出您要刪除的服務,然後按一下核取方塊來選取。
按一下「Delete」(刪除)。這項操作會刪除服務的所有修訂版本。
gcloud
如要刪除服務,請執行下列指令:
gcloud run services delete SERVICE --region REGION
更改下列內容:
- SERVICE:服務名稱。
- REGION:服務的 Google Cloud 區域。
刪除測試專案
刪除 Google Cloud 專案後,系統會停止對該專案中的所有資源計費。如要釋出專案中的所有 Google Cloud 資源,請按照下列步驟操作:
刪除 Google Cloud 專案:
gcloud projects delete PROJECT_ID
後續步驟
如要進一步瞭解如何從程式碼來源建構容器,並推送至存放區,請參閱: