1. 簡介
本教學課程將引導您在 Google Cloud Run 上,部署、管理及監控使用 Agent Development Kit (ADK) 建構的強大代理程式。ADK 可協助您建立代理程式,處理複雜的多代理工作流程。運用全代管無伺服器平台 Cloud Run,您可以將代理程式部署為可擴充的容器化應用程式,不必擔心基礎架構。這個強大的組合可讓您專注於代理程式的核心邏輯,同時享有 Google Cloud 強大且可擴充的環境。
在本教學課程中,我們將探討 ADK 與 Cloud Run 的無縫整合。您將瞭解如何部署代理程式,然後深入探討在類似於正式環境的設定中管理應用程式的實務層面。我們會說明如何管理流量,安全地推出新版代理程式,讓您在全面發布前,先對部分使用者測試新功能。
此外,您還會實際操作,監控代理程式的成效。我們會進行負載測試,模擬實際情境,觀察 Cloud Run 的自動調整資源配置功能運作情形。為深入瞭解代理程式的行為和效能,我們將啟用 Cloud Trace 追蹤功能。這項功能會提供要求在代理程式中傳輸的端對端詳細檢視畫面,方便您找出並解決任何效能瓶頸。完成本教學課程後,您將全面瞭解如何在 Cloud Run 上有效部署、管理及監控 ADK 輔助的代理程式。
在本程式碼研究室中,您將逐步完成下列步驟:
- 在 CloudSQL 上建立 PostgreSQL 資料庫,用於 ADK Agent 資料庫工作階段服務
- 設定基本 ADK 代理程式
- 設定 ADK 執行器使用的資料庫工作階段服務
- 將代理程式初步部署至 Cloud Run
- 進行負載測試並檢查 Cloud Run 自動調度資源
- 部署新的代理程式修訂版本,並逐步增加新修訂版本的流量
- 設定雲端追蹤功能,並檢查代理程式執行追蹤記錄
架構總覽
必要條件
- 熟悉 Python
- 瞭解使用 HTTP 服務的基本全端架構
課程內容
- ADK 結構和本機公用程式
- 使用資料庫工作階段服務設定 ADK 代理程式
- 在 CloudSQL 中設定 PostgreSQL,供資料庫工作階段服務使用
- 使用 Dockerfile 將應用程式部署至 Cloud Run,並設定初始環境變數
- 透過負載測試設定及測試 Cloud Run 自動調度資源功能
- 使用 Cloud Run 逐步發布的策略
- 設定 ADK 代理程式追蹤記錄,將資料傳送至 Cloud Trace
軟硬體需求
- Chrome 網路瀏覽器
- Gmail 帳戶
- 已啟用計費功能的 Cloud 專案
本程式碼研究室適用於所有程度的開發人員 (包括初學者),並在範例應用程式中使用 Python。不過,您不需要具備 Python 知識,也能瞭解本文介紹的概念。
2. 事前準備
在 Cloud 控制台中選取有效專案
本程式碼研究室假設您已擁有啟用計費功能的 Google Cloud 專案。如果尚未取得,請按照下列操作說明開始使用。
- 在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。
- 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能。
準備 Cloud SQL 資料庫
稍後 ADK 代理程式會用到資料庫,我們將在 Cloud SQL 中建立 PostgreSQL 資料庫。首先,請前往 Cloud 控制台頂端區段的搜尋列,然後輸入「cloud sql」。然後按一下「Cloud SQL」產品
接著,我們需要建立新的資料庫執行個體,按一下「建立執行個體」,然後選擇「PostgreSQL」。
如果您從新專案開始,可能也需要啟用 Compute Engine API,只要在出現提示時點按「啟用 API」即可
接著選擇資料庫規格,選取「Enterprise」版本,並使用「Sandbox」版本預設設定
接著,請在此設定執行個體名稱和使用者 postgres 的預設密碼。您可以設定任何想要的憑證,但為了本教學課程,我們將在此使用「adk-deployment」做為執行個體名稱和密碼
在本教學課程中,我們將使用 us-central1 和單一區域,然後點選「建立執行個體」按鈕,完成資料庫建立程序並讓系統完成所有必要設定。
等待這項作業完成的期間,我們可以繼續下一個部分
在 Cloud Shell 終端機中設定 Cloud 專案
- 您將使用 Cloud Shell,這是 Google Cloud 中執行的指令列環境。按一下 Google Cloud 控制台上方的「啟用 Cloud Shell」。
- 連線至 Cloud Shell 後,請使用下列指令檢查您是否已通過驗證,且專案已設為您的專案 ID:
gcloud auth list
- 在 Cloud Shell 中執行下列指令,確認 gcloud 指令知道您的專案。
gcloud config list project
- 如果未設定專案,請使用下列指令來設定:
gcloud config set project <YOUR_PROJECT_ID>
或者,您也可以在控制台中查看 PROJECT_ID
id
按一下該專案,右側就會顯示所有專案和專案 ID
- 透過下列指令啟用必要的 API。這可能需要幾分鐘的時間,請耐心等候。
gcloud services enable aiplatform.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudresourcemanager.googleapis.com \
sqladmin.googleapis.com
成功執行指令後,您應該會看到類似下方的訊息:
Operation "operations/..." finished successfully.
除了使用 gcloud 指令,您也可以透過主控台搜尋各項產品,或使用這個連結。
如果遺漏任何 API,您隨時可以在導入過程中啟用。
如要瞭解 gcloud 指令和用法,請參閱說明文件。
前往 Cloud Shell 編輯器並設定應用程式工作目錄
現在,我們可以設定程式碼編輯器,進行一些程式設計工作。我們會使用 Cloud Shell 編輯器執行這項操作
- 按一下「Open Editor」(開啟編輯器) 按鈕,開啟 Cloud Shell 編輯器,即可在此編寫程式碼
- 請確認 Cloud Shell 編輯器的左下角 (狀態列) 已設定 Cloud Code 專案,如下圖所示,且已設為啟用計費功能的有效 Google Cloud 專案。如果出現提示訊息,請點選「授權」。如果已按照先前的指令操作,按鈕可能會直接指向已啟用的專案,而不是登入按鈕
- 接著,請從 Github 複製本程式碼研究室的範本工作目錄,執行下列指令。系統會在 deploy_and_manage_adk 目錄中建立工作目錄
git clone https://github.com/alphinside/deploy-and-manage-adk-service.git deploy_and_manage_adk
- 完成後,前往 Cloud Shell 編輯器頂端,依序點選「File」->「Open Folder」,找到「username」目錄,然後找到「deploy_and_manage_adk」目錄,並點選「OK」按鈕。這會將所選目錄設為主要工作目錄。在本範例中,使用者名稱為 alvinprayuda,因此目錄路徑如下所示
現在,Cloud Shell 編輯器應如下所示
接著,我們可以設定 Python 環境
環境設定
準備 Python 虛擬環境
下一步是準備開發環境。目前使用中的終端機工作目錄應位於 deploy_and_manage_adk 工作目錄內。在本程式碼研究室中,我們將使用 Python 3.12,並使用 uv Python 專案管理工具,簡化建立及管理 Python 版本和虛擬環境的需求。
- 如果尚未開啟終端機,請依序點選「Terminal」(終端機) ->「New Terminal」(新增終端機),或使用 Ctrl + Shift + C 鍵,在瀏覽器底部開啟終端機視窗
- 下載
uv
,然後使用下列指令安裝 Python 3.12
curl -LsSf https://astral.sh/uv/0.6.16/install.sh | sh && \
source $HOME/.local/bin/env && \
uv python install 3.12
- 現在使用
uv
初始化虛擬環境,執行下列指令:
uv sync --frozen
這會建立 .venv 目錄並安裝依附元件。快速瀏覽 pyproject.toml,即可查看依附元件資訊,如下所示
dependencies = [ "google-adk==1.3.0", "locust==2.37.10", "pg8000==1.31.2", "python-dotenv==1.1.0", ]
- 如要測試虛擬環境,請建立新檔案 main.py 並複製下列程式碼
def main():
print("Hello from deploy_and_manage_adk!")
if __name__ == "__main__":
main()
- 然後執行下列指令
uv run main.py
您會看到如下所示的輸出內容
Using CPython 3.12 Creating virtual environment at: .venv Hello from deploy_and_manage_adk!
這表示 Python 專案設定正確。
設定設定檔
現在我們需要為這個專案設定設定檔。
將 .env.example 檔案重新命名為 .env,系統就會顯示下列值。將 GOOGLE_CLOUD_PROJECT 值更新為專案 ID
# Google Cloud and Vertex AI configuration GOOGLE_CLOUD_PROJECT=your-project-id GOOGLE_CLOUD_LOCATION=global GOOGLE_GENAI_USE_VERTEXAI=True # Database connection for session service # SESSION_SERVICE_URI=postgresql+pg8000://<username>:<password>@/<database>?unix_sock=/cloudsql/<instance_connection_name>/.s.PGSQL.5432
在本程式碼研究室中,我們將使用 GOOGLE_CLOUD_LOCATION
和 GOOGLE_GENAI_USE_VERTEXAI.
的預先設定值。目前,我們會將 SESSION_SERVICE_URI
註解掉。
現在我們可以前往下一個步驟,檢查代理程式邏輯並部署
3. 使用 ADK 和 Gemini 2.5 建構天氣代理程式
ADK 目錄結構簡介
首先,我們來瞭解 ADK 的功能,以及如何建構代理程式。如要查看 ADK 完整說明文件,請前往這個網址。ADK 在執行 CLI 指令時提供許多公用程式。部分範例如下:
- 設定代理程式目錄結構
- 透過 CLI 輸入/輸出快速試用互動功能
- 快速設定本機開發 UI 網頁介面
現在,讓我們檢查 weather_agent 目錄中的代理程式結構
weather_agent/ ├── __init__.py ├── agent.py
如果您檢查 init.py 和 agent.py,會看到這段程式碼
# __init__.py
from weather_agent.agent import root_agent
__all__ = ["root_agent"]
# agent.py
import os
from pathlib import Path
import google.auth
from dotenv import load_dotenv
from google.adk.agents import Agent
from google.cloud import logging as google_cloud_logging
# Load environment variables from .env file in root directory
root_dir = Path(__file__).parent.parent
dotenv_path = root_dir / ".env"
load_dotenv(dotenv_path=dotenv_path)
# Use default project from credentials if not in .env
_, project_id = google.auth.default()
os.environ.setdefault("GOOGLE_CLOUD_PROJECT", project_id)
os.environ.setdefault("GOOGLE_CLOUD_LOCATION", "global")
os.environ.setdefault("GOOGLE_GENAI_USE_VERTEXAI", "True")
logging_client = google_cloud_logging.Client()
logger = logging_client.logger("weather-agent")
def get_weather(city: str) -> dict:
"""Retrieves the current weather report for a specified city.
Args:
city (str): The name of the city (e.g., "New York", "London", "Tokyo").
Returns:
dict: A dictionary containing the weather information.
Includes a 'status' key ('success' or 'error').
If 'success', includes a 'report' key with weather details.
If 'error', includes an 'error_message' key.
"""
logger.log_text(
f"--- Tool: get_weather called for city: {city} ---", severity="INFO"
) # Log tool execution
city_normalized = city.lower().replace(" ", "") # Basic normalization
# Mock weather data
mock_weather_db = {
"newyork": {
"status": "success",
"report": "The weather in New York is sunny with a temperature of 25°C.",
},
"london": {
"status": "success",
"report": "It's cloudy in London with a temperature of 15°C.",
},
"tokyo": {
"status": "success",
"report": "Tokyo is experiencing light rain and a temperature of 18°C.",
},
}
if city_normalized in mock_weather_db:
return mock_weather_db[city_normalized]
else:
return {
"status": "error",
"error_message": f"Sorry, I don't have weather information for '{city}'.",
}
root_agent = Agent(
name="weather_agent",
model="gemini-2.5-flash",
instruction="You are a helpful AI assistant designed to provide accurate and useful information.",
tools=[get_weather],
)
ADK 程式碼解說
這個指令碼包含代理程式啟動程序,我們會初始化下列項目:
- 將模型設為用於
gemini-2.5-flash
- 提供工具
get_weather
,支援天氣代理程式等代理程式功能
執行網頁版 UI
現在,我們可以與代理程式互動,並在本機檢查其行為。ADK 可讓我們透過開發網頁 UI 互動,並檢查互動期間發生的情況。執行下列指令,啟動本機開發 UI 伺服器
uv run adk web --port 8080
這會產生類似下列範例的輸出內容,表示我們已可存取網頁介面
INFO: Started server process [xxxx] INFO: Waiting for application startup. +-----------------------------------------------------------------------------+ | ADK Web Server started | | | | For local testing, access at http://localhost:8080. | +-----------------------------------------------------------------------------+ INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
如要檢查,請點選 Cloud Shell 編輯器頂端的「Web Preview」(網頁預覽) 按鈕,然後選取「Preview on port 8080」(透過以下通訊埠預覽:8080)。
你會看到下列網頁,在左上方的下拉式按鈕中選取可用的代理程式 ( 在本例中應為 weather_agent),然後與機器人互動。在代理程式執行階段,左側視窗會顯示許多記錄詳細資料
現在試著與其互動。在左側列中,我們可以檢查每個輸入內容的追蹤記錄,瞭解代理程式在形成最終答案前,執行每個動作所需的時間。
這是 ADK 內建的可觀測性功能之一,目前我們是在本機檢查。稍後我們將瞭解如何將這項功能整合至 Cloud Trace,集中追蹤所有要求
4. 後端伺服器指令碼
為了讓代理程式可做為服務存取,我們會將代理程式包裝在 FastAPI 應用程式中。我們可以在這裡設定必要服務來支援代理程式,例如準備 Session、Memory 或 Artifact 服務以供生產用途。以下是將使用的 server.py 程式碼
import os
from dotenv import load_dotenv
from fastapi import FastAPI
from google.adk.cli.fast_api import get_fast_api_app
from pydantic import BaseModel
from typing import Literal
from google.cloud import logging as google_cloud_logging
from tracing import CloudTraceLoggingSpanExporter
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider, export
# Load environment variables from .env file
load_dotenv()
logging_client = google_cloud_logging.Client()
logger = logging_client.logger(__name__)
AGENT_DIR = os.path.dirname(os.path.abspath(__file__))
# Get session service URI from environment variables
session_uri = os.getenv("SESSION_SERVICE_URI", None)
# Prepare arguments for get_fast_api_app
app_args = {"agents_dir": AGENT_DIR, "web": True}
# Only include session_service_uri if it's provided
if session_uri:
app_args["session_service_uri"] = session_uri
else:
logger.log_text(
"SESSION_SERVICE_URI not provided. Using in-memory session service instead. "
"All sessions will be lost when the server restarts.",
severity="WARNING",
)
provider = TracerProvider()
processor = export.BatchSpanProcessor(CloudTraceLoggingSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
# Create FastAPI app with appropriate arguments
app: FastAPI = get_fast_api_app(**app_args)
app.title = "weather-agent"
app.description = "API for interacting with the Agent weather-agent"
class Feedback(BaseModel):
"""Represents feedback for a conversation."""
score: int | float
text: str | None = ""
invocation_id: str
log_type: Literal["feedback"] = "feedback"
service_name: Literal["weather-agent"] = "weather-agent"
user_id: str = ""
@app.post("/feedback")
def collect_feedback(feedback: Feedback) -> dict[str, str]:
"""Collect and log feedback.
Args:
feedback: The feedback data to log
Returns:
Success message
"""
logger.log_struct(feedback.model_dump(), severity="INFO")
return {"status": "success"}
# Main execution
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8080)
伺服器程式碼說明
這些是 server.py 指令碼中定義的項目:
- 使用
get_fast_api_app
方法將代理程式轉換為 FastAPI 應用程式。這樣一來,我們就會沿用用於網頁開發 UI 的相同路徑定義。 - 將關鍵字引數新增至
get_fast_api_app
方法,設定必要的 Session、Memory 或 Artifact 服務。在本教學課程中,如果我們設定SESSION_SERVICE_URI
環境變數,工作階段服務就會使用該變數,否則會使用記憶體內工作階段 - 我們可以新增自訂路徑,支援其他後端業務邏輯。在指令碼中,我們新增了意見回饋功能路徑範例
- 啟用雲端追蹤功能,將追蹤記錄傳送至 Google Cloud Trace
5. 部署至 Cloud Run
現在,請將這個代理程式服務部署至 Cloud Run。在本示範中,這項服務會公開,供他人存取。不過請注意,這並非最佳做法,因為不安全
在本程式碼研究室中,我們將使用 Dockerfile 將代理程式部署至 Cloud Run。以下是將使用的 Dockerfile 內容
FROM python:3.12-slim
RUN pip install --no-cache-dir uv==0.7.13
WORKDIR /app
COPY . .
RUN uv sync --frozen
EXPOSE 8080
CMD ["uv", "run", "uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8080"]
此時,我們已備妥將應用程式部署至 Cloud Run 的所有必要檔案,現在就來部署吧。前往 Cloud Shell 終端機,確認目前專案已設為有效專案。如果不是,請使用 gcloud configure 指令設定專案 ID:
gcloud config set project [PROJECT_ID]
接著,請執行下列指令,將其部署至 Cloud Run。
gcloud run deploy weather-agent \
--source . \
--port 8080 \
--project {YOUR_PROJECT_ID} \
--allow-unauthenticated \
--add-cloudsql-instances {YOUR_DB_CONNECTION_NAME} \
--update-env-vars SESSION_SERVICE_URI="postgresql+pg8000://postgres:{YOUR_DEFAULT_USER_PASS}@postgres/?unix_sock=/cloudsql/{YOUR_DB_CONNECTION_NAME}/.s.PGSQL.5432",GOOGLE_CLOUD_PROJECT={YOUR_PROJECT_ID} \
--region us-central1
如要取得 {YOUR_DB_CONNECTION_NAME} 值,請再次前往 Cloud SQL,然後點選您建立的執行個體。在執行個體頁面中,向下捲動至「連線至這個執行個體」部分,即可複製連線名稱,以取代 {YOUR_DB_CONNECTION_NAME} 值。例如,請參閱下圖
如果系統提示您確認要為 Docker 存放區建立 Artifact Registry,請回答 Y。請注意,我們允許未經驗證的存取要求,因為這是示範應用程式。建議您為企業和正式版應用程式使用適當的驗證機制。
部署完成後,您應該會收到類似下方的連結:
https://weather-agent-*******.us-central1.run.app
請繼續在無痕視窗或行動裝置上使用應用程式。這項功能應該已經上線。
6. 使用負載測試檢查 Cloud Run 自動調度資源功能
現在,我們要檢查 Cloud Run 的自動調度資源功能。在這個情境中,我們將部署新修訂版本,同時為每個執行個體啟用並行數上限。執行下列指令
gcloud run deploy weather-agent \
--source . \
--port 8080 \
--project {YOUR_PROJECT_ID} \
--allow-unauthenticated \
--region us-central1 \
--concurrency 10
接著,讓我們檢查 load_test.py 檔案。我們將使用這個指令碼,透過 locust 架構執行負載測試。這個指令碼會執行下列動作:
- 隨機產生的 user_id 和 session_id
- 為 user_id 建立 session_id
- 使用建立的 user_id 和 session_id 存取「/run_sse」端點
如果您錯過部署的服務網址,我們需要知道該網址。前往 Cloud Run 控制台,然後按一下 weather-agent 服務。
然後找出 weather-agent 服務並點選
服務網址會顯示在「區域」資訊旁邊。例如:
然後執行下列指令來進行負載測試
uv run locust -f load_test.py \
-H {YOUR_SERVICE_URL} \
-u 60 \
-r 5 \
-t 120 \
--headless
執行這項操作後,您會看到類似下方的指標。( In this example all reqs success )
Type Name # reqs # fails | Avg Min Max Med | req/s failures/s
--------|------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
POST /run_sse end 813 0(0.00%) | 5817 2217 26421 5000 | 6.79 0.00
POST /run_sse message 813 0(0.00%) | 2678 1107 17195 2200 | 6.79 0.00
--------|------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
Aggregated 1626 0(0.00%) | 4247 1107 26421 3500 | 13.59 0.00
接著,讓我們看看 Cloud Run 發生了什麼事,再次前往已部署的服務,然後查看資訊主頁。這會顯示 Cloud Run 如何自動調度執行個體,以處理傳入要求。由於我們將每個執行個體的並行數上限設為 10,因此 Cloud Run 執行個體會嘗試自動調整容器數量,以滿足這項條件。
7. 逐步發布新修訂版本
現在,我們來看看以下情境。我們想將代理程式的提示更新為以下內容:
# agent.py
...
root_agent = Agent(
name="weather_agent",
model="gemini-2.5-flash-preview-05-20",
instruction="You are a helpful AI assistant designed to provide accurate and useful information. You only answer inquiries about the weather. Refuse all other user query",
tools=[get_weather],
)
接著,您想發布新修訂版本,但不希望所有要求流量都直接導向新版本。我們可以透過 Cloud Run 逐步發布。首先,我們需要部署新修訂版本,但要使用 –no-traffic 標記。儲存先前的代理程式指令碼,然後執行下列指令
gcloud run deploy weather-agent \
--source . \
--port 8080 \
--project {YOUR_PROJECT_ID} \
--allow-unauthenticated \
--region us-central1 \
--no-traffic
完成後,您會收到類似先前部署程序的記錄,但服務的流量數不同。系統會顯示 0% 的流量。
接著前往 Cloud Run 產品頁面,找出已部署的執行個體。在搜尋列中輸入「cloud run」,然後點選 Cloud Run 產品
然後找出 weather-agent 服務並點選
前往「修訂版本」分頁,即可查看已部署的修訂版本清單
您會看到新部署的修訂版本提供 0% 的服務,您可以點選 Kebab 按鈕 (⋮),然後選擇「管理流量」
在彈出的新視窗中,您可以編輯要將多少流量導向哪個修訂版本。
等待一段時間後,系統會根據百分比設定,按比例分配流量。這樣一來,如果新版本發生問題,我們就能輕鬆還原至先前的修訂版本
8. ADK 追蹤
使用 ADK 建構的代理程式已支援追蹤功能,可將開放式遙測技術嵌入其中。我們有 Cloud Trace 可擷取這些追蹤記錄並以視覺化方式呈現。讓我們檢查 server.py,瞭解如何在先前部署的服務中啟用這項功能
# server.py
from tracing import CloudTraceLoggingSpanExporter
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider, export
...
provider = TracerProvider()
processor = export.BatchSpanProcessor(CloudTraceLoggingSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
...
在這裡,我們會初始化追蹤器和匯出工具。您可以在 tracing.py 中檢查匯出工具的詳細資料。由於可匯出至 Cloud Trace 的追蹤資料量有限,因此我們在此建立自訂匯出工具。我們使用 https://googlecloudplatform.github.io/agent-starter-pack/guide/observability.html 的實作項目,提供這項追蹤功能。
嘗試存取服務網頁開發人員 UI,並與服務專員對話。然後前往 Cloud 控制台搜尋列,輸入「trace explorer」,並選擇「Trace Explorer」產品
在追蹤記錄探索器頁面中,您會看到與代理程式追蹤記錄的對話已提交。您可以從「範圍名稱」部分查看,並篩除與代理程式相關的範圍 ( 名稱為 agent_run [weather_agent]
)
如果已篩選跨度,您也可以直接檢查每項追蹤記錄。系統會顯示代理人執行各項動作的詳細時間長度。舉例來說,請參考下方的圖片
在每個部分,您都可以檢查屬性中的詳細資料,如下所示
這樣一來,我們就能清楚掌握代理程式與使用者每次互動的資訊,有助於排解問題。歡迎嘗試各種工具或工作流程!
9. 挑戰
嘗試多代理或代理工作流程,瞭解這些流程在負載下的效能,以及追蹤記錄的樣貌
10. 清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本程式碼研究室所用資源的費用,請按照下列步驟操作: