Tạo và triển khai các tác nhân AI bằng Gemma 4 và máy chủ BigQuery MCP trong Cloud Run

1. Giới thiệu

Tổng quan

Kiến thức bạn sẽ học được

Gemma 4 là một dòng sản phẩm mô hình nguồn mở có trọng số được cấp phép theo Apache 2 của Google DeepMind. Các mô hình này là mô hình đa phương thức, đa ngôn ngữ, có khả năng suy luận và có cấu trúc hiệu quả.

Cloud Run là một môi trường không máy chủ dành cho các vùng chứa có hỗ trợ GPU.

Bộ công cụ phát triển tác nhân (ADK) là một khung phát triển tác nhân nguồn mở, cho phép bạn tạo, gỡ lỗi và triển khai các tác nhân AI đáng tin cậy ở quy mô doanh nghiệp.

BigQuery là một kho dữ liệu doanh nghiệp không máy chủ, được quản lý hoàn toàn, cho phép bạn lưu trữ, truy vấn và phân tích các tập dữ liệu khổng lồ.

Giao thức ngữ cảnh mô hình (MCP) chuẩn hoá cách các mô hình ngôn ngữ lớn (LLM) và ứng dụng hoặc tác nhân AI kết nối với các nguồn dữ liệu bên ngoài. Máy chủ MCP cho phép bạn sử dụng các công cụ, tài nguyên và câu lệnh của máy chủ để thực hiện các hành động và nhận dữ liệu mới nhất từ dịch vụ phụ trợ của máy chủ. Máy chủ MCP của BigQuery cung cấp cho các tác nhân AI của bạn một cách trực tiếp và an toàn để phân tích dữ liệu trong BigQuery. Máy chủ MCP được quản lý hoàn toàn này giúp loại bỏ chi phí quản lý, cho phép bạn tập trung vào việc phát triển các tác nhân thông minh.

2. Thiết lập và yêu cầu

Bắt đầu bằng cách thiết lập dự án mặc định và khu vực Cloud Run:

# set the project
gcloud config set project YOUR_PROJECT_ID

Thay thế YOUR_PROJECT_ID bằng mã dự án của bạn trên Google Cloud.

# set Cloud Run region
REGION="CLOUD-RUN-REGION"; gcloud config set run/region $REGION && echo $REGION > lab2rgn.txt

Thay thế CLOUD-RUN-REGION bằng một trong các khu vực sau của Cloud:

  • us-central1
  • asia-southeast1

Sau đây là các biến môi trường sẽ được dùng trong suốt lớp học lập trình này. Bạn có thể lưu các biến này trong một tệp môi trường và "source" tệp đó. Đảm bảo bạn đặt đúng giá trị của mã dự án và khu vực (không bắt buộc).

# Model name on HuggingFace Hub
export MODEL_NAME="google/gemma-4-31B-it"

# Cloud Run Service name
export SERVICE_NAME="gemma4-rtx-vllm-codelab"

# Cloud Project and Region for Cloud Run
export GOOGLE_CLOUD_PROJECT=$(gcloud config get project -q)
export GOOGLE_CLOUD_REGION=$(cat lab2rgn.txt 2> /dev/null || gcloud config get run/region -q)

# Service account for Cloud Run service
export SERVICE_ACCOUNT="vllm-service-sa"
export SERVICE_ACCOUNT_EMAIL="${SERVICE_ACCOUNT}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com"

# GCS Bucket for the model cache.
export MODEL_CACHE_BUCKET="${GOOGLE_CLOUD_PROJECT}-${GOOGLE_CLOUD_REGION}-hf-model-cache"
# Model cache location in GSC bucket
export GCS_MODEL_LOCATION="gs://${MODEL_CACHE_BUCKET}/model-cache/${MODEL_NAME}"
# Uncomment next line if loading gemma-4-31B-it directly from the public cache bucket
# export GCS_MODEL_LOCATION="gs://vertex-model-garden-public-us/gemma4/gemma-4-31B-it"

# VPC Network for Direct VPC Egress
export VPC_NETWORK="vllm-${GOOGLE_CLOUD_REGION}-net"
export VPC_SUBNET="vllm-${GOOGLE_CLOUD_REGION}-subnet"
export SUBNET_RANGE="10.8.0.0/26"

Bật các API cần thiết cho Lớp học lập trình này. Các thay đổi về API có thể mất từ 2 đến 3 phút mới có hiệu lực.

gcloud services enable --project "${GOOGLE_CLOUD_PROJECT}" \
    run.googleapis.com \
    cloudbuild.googleapis.com \
    artifactregistry.googleapis.com \
    iam.googleapis.com \
    compute.googleapis.com \
    vpcaccess.googleapis.com \
    storage.googleapis.com \
    bigquery.googleapis.com \
    aiplatform.googleapis.com

3. Tạo tài khoản dịch vụ

Nếu bạn không chỉ định tài khoản dịch vụ khi tạo dịch vụ hoặc công việc Cloud Run, thì Cloud Run sẽ sử dụng tài khoản dịch vụ mặc định của Compute Engine. Bạn nên sử dụng một Tài khoản dịch vụ riêng cho dịch vụ Cloud Run để tránh chạy dịch vụ với các quyền không cần thiết.

Tạo tài khoản dịch vụ cho dịch vụ Cloud Run

gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
  --project "${GOOGLE_CLOUD_PROJECT}" \
  --display-name "vLLM Service Account"

4. Thiết lập Cloud Storage

Tạo một bộ chứa Cloud Storage để lưu trữ trọng số mô hình. Việc này sẽ cho phép sử dụng tính năng Truyền dữ liệu trực tiếp ra khỏi VPC để tải trọng số mô hình xuống nhanh hơn mỗi khi Cloud Run khởi động một phiên bản dịch vụ.

Kết hợp với tính năng Run:ai Model Streamer trong vLLM, tính năng này giúp giảm đáng kể thời gian tải mô hình.

Tạo một nhóm

Đảm bảo đây là một vùng chứa một khu vực được đặt cùng với dịch vụ Cloud Run.

gcloud storage buckets create "gs://${MODEL_CACHE_BUCKET}" \
    --uniform-bucket-level-access --public-access-prevention \
    --project "${GOOGLE_CLOUD_PROJECT}" --location "${GOOGLE_CLOUD_REGION}"

5. Truy xuất và lưu vào bộ nhớ đệm các trọng số mô hình

Tiếp theo, hãy tải mô hình Gemma 4 xuống bộ chứa Cloud Storage. Trọng số của mô hình là hàng chục gigabyte và việc tải các mô hình này xuống máy cục bộ hoặc Cloud Shell trước tiên có thể là không khả thi. Thay vào đó, hãy sử dụng Cloud Build với đủ bộ nhớ để lưu trữ trọng số mô hình.

Sao chép trọng số mô hình từ một bộ chứa Cloud Storage dùng chung

Google Cloud lưu trữ một Bộ chứa lưu trữ trên đám mây có thể truy cập công khai với các trọng số mô hình Gemma 4.

Để sao chép các tệp đó vào nhóm lưu trữ, hãy chạy lệnh:

gcloud builds submit --project="${GOOGLE_CLOUD_PROJECT}" --region="${GOOGLE_CLOUD_REGION}" --no-source \
    --substitutions="_MODEL_NAME=${MODEL_NAME},_GCS_MODEL_LOCATION=${GCS_MODEL_LOCATION}" \
    --config=/dev/stdin <<'EOF'
steps:
- name: 'gcr.io/google.com/cloudsdktool/google-cloud-cli:slim'
  entrypoint: 'bash'
  args:
  - '-c'
  - |
    if [[ "$_GCS_MODEL_LOCATION" == *"vertex-model-garden-public-us"* ]]; then
      echo "Using the public cache bucket."
      exit 0
    fi
    gcloud config set storage/parallel_composite_upload_enabled True
    gcloud config set storage/parallel_composite_upload_threshold 150M
    gcloud config set storage/sliced_object_download_threshold 150M
    MODEL_NAME="$_MODEL_NAME"
    SHORT_NAME="$${MODEL_NAME#*/}"
    gcloud storage cp -r -D "gs://vertex-model-garden-public-us/gemma4/$${SHORT_NAME}" "$_GCS_MODEL_LOCATION"
EOF

6. Định cấu hình mạng để truyền dữ liệu trực tiếp ra khỏi VPC

Cấu hình Truy cập trực tiếp ra khỏi VPC yêu cầu bạn tạo một mạng và mạng con có bật chế độ Quyền truy cập riêng tư vào Google.

Điều này cho phép các dịch vụ Cloud Run kết nối với tập hợp địa chỉ IP ngoài mà các API và dịch vụ của Google sử dụng, bao gồm cả Cloud Storage.

Tạo mạng

gcloud compute networks create "$VPC_NETWORK" \
        --subnet-mode=custom \
        --bgp-routing-mode=regional \
        --project "$GOOGLE_CLOUD_PROJECT"

Tạo mạng con

gcloud compute networks subnets create "$VPC_SUBNET" \
        --network="$VPC_NETWORK" \
        --region="$GOOGLE_CLOUD_REGION" \
        --range="$SUBNET_RANGE" \
        --enable-private-ip-google-access \
        --project "$GOOGLE_CLOUD_PROJECT"

7. Định cấu hình chính sách truy cập tài khoản dịch vụ

Tài khoản dịch vụ Cloud Run cần có quyền truy cập vào trọng số mô hình trong Bộ chứa mà bạn đã tạo.

gcloud storage buckets add-iam-policy-binding "gs://${MODEL_CACHE_BUCKET}" \
    --member "serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
    --role "roles/storage.admin" \
    --project "${GOOGLE_CLOUD_PROJECT}"

8. Khởi chạy các biến cấu hình

Xác định các biến cho cả công cụ suy luận vLLM và dịch vụ Cloud Run.

# vLLM variables
export MAX_MODEL_LEN="32767"    # 32767 to improve concurrency. Keep it empty to use model's maximim context length (256K)
export QUANTIZATION_TYPE="fp8"  # Model quantization for faster performance and lower memory usage.
export KV_CACHE_DTYPE="fp8"     # KV-cache quantization to save GPU memory.
export GPU_MEM_UTIL="0.95"      # Fraction of GPU memory to be used by the vLLM engine.
export TENSOR_PARALLEL_SIZE="1" # Partitioning model across GPUs (1 here as we have only 1 GPU).
export MAX_NUM_SEQS="16"         # Max concurrent requests vLLM processes in one batch.

# Cloud Run variables
export CLOUD_RUN_CPU_NUM=20
export CLOUD_RUN_MEMORY_GB=80
export CLOUD_RUN_MAX_INSTANCES=1
export CLOUD_RUN_CONCURRENCY=16

9. Triển khai lên Cloud Run

Chuẩn bị dòng lệnh vùng chứa vLLM

vLLM cần nhiều tham số để chạy các mô hình lớn một cách nhanh chóng và hiệu quả. Các tham số này sẽ được truyền dưới dạng đối số đến vùng chứa được triển khai cho Cloud Run.

CONTAINER_ARGS=(
    "vllm"
    "serve"
    "${GCS_MODEL_LOCATION}"
    "--served-model-name" "${MODEL_NAME}"
    "--enable-log-requests"
    "--enable-chunked-prefill"
    "--enable-prefix-caching"
    "--generation-config" "auto"
    "--enable-auto-tool-choice"
    "--tool-call-parser" "gemma4"
    "--reasoning-parser" "gemma4"
    "--dtype" "bfloat16"
    "--quantization" "${QUANTIZATION_TYPE}"
    "--kv-cache-dtype" "${KV_CACHE_DTYPE}"
    "--max-num-seqs" "${MAX_NUM_SEQS}"
    "--gpu-memory-utilization" "${GPU_MEM_UTIL}"
    "--tensor-parallel-size" "${TENSOR_PARALLEL_SIZE}"
    "--load-format" "runai_streamer"
    "--port" "8080"
    "--host" "0.0.0.0"
)

if [[ "${MAX_MODEL_LEN}" != "" ]]; then
    CONTAINER_ARGS+=("--max-model-len" "${MAX_MODEL_LEN}")
fi

export CONTAINER_ARGS_STR="${CONTAINER_ARGS[*]}"

Triển khai dịch vụ Cloud Run

Chạy lệnh sau để triển khai dịch vụ Cloud Run. Lưu ý loại GPU (RTX 6000 Pro), hình ảnh cơ sở (pytorch-vllm-serve:gemma4) và nhu cầu xác thực để gọi dịch vụ (--no-allow-unauthenticated).

gcloud beta run deploy "${SERVICE_NAME}" \
    --image="us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:gemma4" \
    --project "${GOOGLE_CLOUD_PROJECT}" \
    --region "${GOOGLE_CLOUD_REGION}" \
    --service-account "${SERVICE_ACCOUNT_EMAIL}" \
    --execution-environment gen2 \
    --no-allow-unauthenticated \
    --cpu="${CLOUD_RUN_CPU_NUM}" \
    --memory="${CLOUD_RUN_MEMORY_GB}Gi" \
    --gpu=1 \
    --gpu-type=nvidia-rtx-pro-6000 \
    --no-gpu-zonal-redundancy \
    --no-cpu-throttling \
    --max-instances ${CLOUD_RUN_MAX_INSTANCES} \
    --concurrency ${CLOUD_RUN_CONCURRENCY} \
    --network ${VPC_NETWORK} \
    --subnet ${VPC_SUBNET} \
    --vpc-egress all-traffic \
    --set-env-vars "MODEL_NAME=${MODEL_NAME}" \
    --set-env-vars "GOOGLE_CLOUD_PROJECT=${GOOGLE_CLOUD_PROJECT}" \
    --set-env-vars "GOOGLE_CLOUD_REGION=${GOOGLE_CLOUD_REGION}" \
    --port=8080 \
    --timeout=3600 \
    --cpu-boost \
    --startup-probe tcpSocket.port=8080,initialDelaySeconds=240,failureThreshold=40,timeoutSeconds=10,periodSeconds=15 \
    --command "bash" \
    --args="^;^-c;${CONTAINER_ARGS_STR}"

Quá trình này sẽ mất vài phút để triển khai. Sau khi hoàn tất, bạn sẽ có một môi trường dựa trên GPU để phân phát Gemma 4 bằng cách sử dụng cơ sở hạ tầng phi máy chủ có tính năng tự động mở rộng quy mô, bao gồm cả khả năng mở rộng quy mô về 0 (không có lưu lượng truy cập, không mất phí).

10. Kiểm thử Dịch vụ

Sau khi triển khai, bạn có thể tương tác với mô hình Gemma 4 bằng API tương thích với vLLM OpenAI.

Lấy URL dịch vụ

Truy xuất URL của dịch vụ Cloud Run đã triển khai.

SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --project "${GOOGLE_CLOUD_PROJECT}" --region "${GOOGLE_CLOUD_REGION}" --format 'value(status.url)')
echo "Service URL: $SERVICE_URL"

Chạy suy luận

Gửi câu lệnh đến mô hình bằng cách sử dụng curl.

curl -s "$SERVICE_URL/v1/chat/completions" \
  -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "'"${MODEL_NAME}"'",
  "messages": [
    {"role": "user", "content": "Why is the sky blue?"}
  ],
  "chat_template_kwargs": {
    "enable_thinking": true
  },
  "skip_special_tokens": false
}' | jq -r '.choices[0].message.content'

11. Tạo một Tác nhân dữ liệu bằng Bộ công cụ phát triển tác nhân

Viết mã của tác nhân

Trong Cloud Shell Terminal hoặc thiết bị đầu cuối cục bộ, hãy tạo một thư mục gốc cho ứng dụng dựa trên tác nhân của bạn:

mkdir data_agent

Mở Cloud Shell Editor hoặc một trình chỉnh sửa văn bản khác rồi tạo agent.py trong thư mục data_agent:

data_agent/
    agent.py

agent.py

import os
import subprocess

from google.adk.agents import LlmAgent
from google.adk.models.lite_llm import LiteLlm
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams

import google.auth
from google.auth.transport.requests import Request
from google.oauth2 import id_token

# Fetch Application Default Credentials (ADC)
application_default_credentials, project_id = google.auth.default()
application_default_credentials.refresh(Request())

# Retrieve Google Cloud project to use.
project_id = os.getenv("GOOGLE_CLOUD_PROJECT", project_id)
if not project_id:
    raise ValueError("GOOGLE_CLOUD_PROJECT environment variable is not set.")

if os.getenv("GOOGLE_GENAI_USE_ENTERPRISE", "").lower() not in ["true", "1"]:
    # Using Cloud Run for hosting LLM with LiteLLM wrapper
    api_base = os.getenv(
        "API_BASE",
        os.environ.get("OPENAI_API_BASE", "")
    ).rstrip("/")
    if not api_base:
        raise ValueError("API_BASE environment variable is not set")
    if not api_base.endswith("/v1"):
        api_base += "/v1"

    model_name = os.getenv("MODEL_NAME")
    if not model_name:
        raise ValueError("MODEL_NAME environment variable is not set")
    # Format required by LiteLLM for OpenAI-compatible APIs
    model_name=f"openai/{model_name}"

    # To access the model's Cloud Run service,
    # we need an identity token.
    try:
        model_service_token_string = id_token.fetch_id_token(Request(), api_base)
    except Exception as e:
        # Fallback with using gcloud CLI to get the identity token
        model_service_token_string = subprocess.check_output(
            f"gcloud auth print-identity-token -q",
            shell=True
        ).decode().strip()

    # Gemma 4 in vLLM requires additional parameters in the request body.
    extra_body={
        "chat_template_kwargs": {
            "enable_thinking": True
        },
        "skip_special_tokens": False
    }
    # Configure the model with LiteLLM and an OpenAI-compatible endpoint
    custom_model = LiteLlm(
      model=model_name,
      base_url=api_base,
      api_key=model_service_token_string,
      extra_body=extra_body
    )
    model = custom_model
else:
    # Gemini API in Agent Platform fallback
    model = "gemini-3.5-flash-lite"

# Initialize the MCP Toolset with the connection parameters
bigquery_toolset = MCPToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://bigquery.googleapis.com/mcp",
        headers={
            "Authorization": f"Bearer {application_default_credentials.token}",
            "x-goog-user-project": project_id, # This is used for billing
        },
        tool_filter=[
            'get_dataset_info',
            'list_table_ids',
            'get_table_info',
            # Using readonly is a security measure to prevent accidental data modification.
            'execute_sql_readonly',
        ]
    )
)

# Configure the agent

system_instruction = f"""
You are a helpful assistant that can answer questions about data in BigQuery.
To answer the user's question, use data you have access to by using tools `list_table_ids` and `get_table_info`.
Your data is in `bigquery-public-data.new_york_citibike` dataset
   (Citi Bike trips and stations in the NYC area.
    It includes trip records starting from September 2013 and is updated daily.)

Plan of action:
0. ALWAYS start by analyzing dataset.
1. Analyze your data, investigate schema and dimensions by querying distrinct values of columns using `execute_sql_readonly`.
   Output information about tables, columns, their data types and sets of values (for dimensions).
   Note which columns can be joined or used in aggregations/filters, and what type conversion may be needed for joining or aggregating.
   DO NOT MAKE ASSUMPTIONS ABOUT DATA (structure, type, values, relationships) BASED ON YOUR PRIOR KNOWLEDGE. ALWAYS VERIFY YOUR ASSUMPTIONS.
2. Understand and interpret the user's question.
3. Formulate a plan to answer the user's question.
4. Write a SQL query to retrieve relevant data in necessary form.
   This is where you must pay extra attention to column types and dimensions' sets of values.
5. Retrieve data by generating BigQuery SQL and using `execute_sql_readonly`.
   Always use Dry Run to verify SQL correctness.
   Use `{project_id}` to run BigQuery queries (`project_id` parameter of `execute_sql_readonly`).

Do not use LaTeX in your responses. When giving a final answer, use Markdown.
"""

root_agent = LlmAgent(
    model=model,
    name="data_agent",
    instruction=system_instruction,
    description="A helpful assistant that can answer questions using NYC Citibike data.",
    tools=[bigquery_toolset]
)

ADK cũng yêu cầu __init__.pyrequirements.txt để triển khai:

  • __init__.py phải có một lệnh nhập cho tác nhân.
  • requirements.txt liệt kê các phần phụ thuộc Python: google-adk cho Agent Development Kit, litellm cho thư viện LiteLLM mà ADK tận dụng để sử dụng các mô hình không phải Gemini và mcp cho ứng dụng Giao thức ngữ cảnh mô hình.

Những lệnh này giúp bạn tạo __init__.pyrequirements.txt:

echo "from . import agent" > data_agent/__init__.py
echo -e "google-adk==2.4.*\nlitellm\nmcp==1.29.*" > data_agent/requirements.txt

Cấu trúc thư mục cuối cùng sẽ có dạng như sau:

data_agent/
    __init__.py
    agent.py
    requirements.txt

Dùng thử tác nhân cục bộ

Agent Development Kit đi kèm với công cụ adk CLI – một giao diện đầu cuối tương tác để kiểm thử các tác nhân của bạn. Điều này rất hữu ích cho việc kiểm thử nhanh, các hoạt động tương tác theo kịch bản và quy trình CI/CD. Một trong những tính năng mà công cụ này cung cấp là adk webGiao diện web ADK – một cách đơn giản để phát triển và gỡ lỗi các tác nhân của bạn một cách tương tác. ADK Web không dành cho việc sử dụng trong các hoạt động triển khai sản xuất, nhưng giúp bạn dễ dàng dùng thử tác nhân.

Lệnh này sẽ khởi chạy adk web để khởi động một máy chủ web cục bộ trên cổng 8080.

export API_BASE=$(gcloud run services describe $SERVICE_NAME \
  --project $GOOGLE_CLOUD_PROJECT \
  --region $GOOGLE_CLOUD_REGION \
  --format 'value(status.url)')

# If Gemma 4 deployment failed, use Gemini fallback
if [[ "${API_BASE}" == "" ]]; then
  export GOOGLE_GENAI_USE_ENTERPRISE=true
else
  export GOOGLE_GENAI_USE_ENTERPRISE=false
fi

uv tool run --with litellm,"mcp==1.29.*" --from "google-adk[mcp]==2.4.*" adk web --allow_origins="*" --port 8080 .

Sau khi dịch vụ này khởi động, hãy mở trang web ADK cục bộ: http://localhost:8080/.

Nếu bạn đang sử dụng Google Cloud Shell, hãy nhấp vào nút Xem trước trên web .

Trong giao diện người dùng web ADK, hãy hỏi tác nhân về dữ liệu mà tác nhân có quyền truy cập:

What data do you have?

Mã tác nhân sẽ sử dụng mô hình Gemma 4 được triển khai trên Cloud Run. Mô hình này sẽ sử dụng các công cụ MCP của BigQuery để khám phá tập dữ liệu citibike. Thao tác này sẽ cung cấp cho bạn thông tin tổng quan về các bảng và trường có trong tập dữ liệu Citibike.

12. Triển khai tác nhân lên Cloud Run

Lệnh này sẽ triển khai tác nhân lên Cloud Run bằng ADK CLI.

export API_BASE=$(gcloud run services describe $SERVICE_NAME \
  --project $GOOGLE_CLOUD_PROJECT \
  --region $GOOGLE_CLOUD_REGION \
  --format 'value(status.url)')

# If Gemma 4 deployment failed, use Gemini fallback
if [[ "${API_BASE}" == "" ]]; then
  export GOOGLE_GENAI_USE_ENTERPRISE=true
else
  export GOOGLE_GENAI_USE_ENTERPRISE=false
fi

uv tool run --from google-adk==2.4.0 \
  adk deploy cloud_run \
      --with_ui \
      --project $GOOGLE_CLOUD_PROJECT \
      --region $GOOGLE_CLOUD_REGION \
      --service_name gemma4-data-agent \
      --app_name data_agent \
      data_agent \
      -- \
      --allow-unauthenticated \
      --max-instances 1 \
      --set-env-vars GOOGLE_GENAI_USE_ENTERPRISE=${GOOGLE_GENAI_USE_ENTERPRISE},MODEL_NAME="${MODEL_NAME}",API_BASE="${API_BASE}",GOOGLE_CLOUD_PROJECT="${GOOGLE_CLOUD_PROJECT}"

Dùng thử tác nhân

Chúng tôi đã sử dụng lựa chọn --with_ui để triển khai tác nhân. Nền tảng này đã triển khai tác nhân bằng Giao diện web ADK.

  1. Mở URL của trợ lý ảo trong trình duyệt web. Lệnh adk deploy đã trả về URL này và bạn cũng có thể truy xuất URL bằng cách chạy lệnh gcloud run services:
gcloud run services describe gemma4-data-agent \
  --project $GOOGLE_CLOUD_PROJECT \
  --region $GOOGLE_CLOUD_REGION \
  --format 'value(status.url)'
  1. Yêu cầu tác nhân suy luận dựa trên dữ liệu có sẵn của Citibike:
We have budget for 3 coffee trucks.
We want to find the best city bike stations to place our coffee trucks.

Nhân viên hỗ trợ nên khám phá tập dữ liệu Citibike bằng máy chủ BigQuery MCP, chạy một vài truy vấn SQL và trả về danh sách 3 trạm Citibike.

13. Xin chúc mừng!

Chúc mừng bạn đã hoàn thành lớp học lập trình này!

Bạn nên xem tài liệu về Cloud Run.

Nội dung đã đề cập

  • Cách triển khai mô hình Gemma 4 trên GPU RTX 6000 Pro của Cloud Run
  • Cách định cấu hình tính năng Truyền dữ liệu trực tiếp ra khỏi VPC và truyền trực tuyến mô hình vLLM bằng Cloud Storage để khởi động dịch vụ nhanh hơn.
  • Cách tạo và triển khai một Tác nhân AI bằng Bộ công cụ phát triển tác nhân sử dụng LLM Gemma 4 và máy chủ BigQuery MCP.

14. Dọn dẹp

Để không bị tính phí cho tài khoản Google Cloud đối với các tài nguyên được dùng trong hướng dẫn này, bạn có thể xoá dự án hoặc xoá từng tài nguyên.

Cách 1: Xoá tài nguyên

Xoá các dịch vụ Cloud Run

gcloud run services delete gemma4-data-agent \
      --project "${GOOGLE_CLOUD_PROJECT}" \
      --region "${GOOGLE_CLOUD_REGION}" \
      --quiet
gcloud run services delete $SERVICE_NAME \
      --project "${GOOGLE_CLOUD_PROJECT}" \
      --region "${GOOGLE_CLOUD_REGION}" \
      --quiet

Xoá Tài khoản dịch vụ

gcloud iam service-accounts delete \
      ${SERVICE_ACCOUNT_EMAIL} \
      --project "${GOOGLE_CLOUD_PROJECT}" \
      --quiet

Xoá bộ chứa Cloud Storage

gcloud storage rm --recursive gs://$MODEL_CACHE_BUCKET

Xoá mạng và mạng con VPC

gcloud compute networks subnets delete $VPC_SUBNET \
    --region "${GOOGLE_CLOUD_REGION}" \
    --project "${GOOGLE_CLOUD_PROJECT}" \
    --quiet

gcloud compute networks delete $VPC_NETWORK \
    --project "${GOOGLE_CLOUD_PROJECT}" \
    --quiet

Cách 2: Xoá dự án

Để xoá toàn bộ dự án, hãy chuyển đến phần Quản lý tài nguyên, chọn dự án bạn đã tạo ở Bước 2 rồi chọn Xoá. Nếu xoá dự án, bạn sẽ cần thay đổi dự án trong Cloud SDK. Bạn có thể xem danh sách tất cả các dự án có sẵn bằng cách chạy gcloud projects list. Nếu muốn sử dụng dòng lệnh, bạn cũng có thể dùng lệnh sau:

gcloud projects delete ${GOOGLE_CLOUD_PROJECT}