Tác nhân khoa học dữ liệu có trạng thái trên Agent Runtime

1. Tổng quan

Trong lớp học lập trình này, bạn sẽ xây dựng một tác nhân khoa học dữ liệu truy vấn dữ liệu thực từ các tập dữ liệu công khai của BigQuery và ghi nhớ các lựa chọn ưu tiên của bạn trong các phiên. Sau đó, bạn sẽ triển khai nó vào Agent Runtime, một dịch vụ được quản lý toàn diện của Google Cloud, xử lý cơ sở hạ tầng, hoạt động mở rộng quy mô và quản lý phiên.

Trợ lý sử dụng 3 chức năng cốt lõi được kích hoạt dần:

  • Bộ công cụ BigQuery: Đặc vụ này khám phá các giản đồ và chạy các truy vấn SQL dựa trên các tập dữ liệu BigQuery thực – hoạt động này diễn ra cả cục bộ và khi được triển khai.
  • Ngân hàng bộ nhớ: Khi được triển khai, tác nhân sẽ ghi nhớ các lựa chọn ưu tiên và bối cảnh của người dùng trong các phiên bị ngắt kết nối.
  • Khả năng ghi nhận: Cloud Trace ghi lại các bước suy luận, lệnh gọi công cụ và độ trễ của tác nhân thông qua tính năng đo từ xa OpenTelemetry.

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

  • Cách tạo tác nhân ADK bằng BigQueryToolset để có quyền truy cập dữ liệu thực
  • Cách định cấu hình Memory Bank để duy trì trạng thái trên nhiều phiên
  • Cách triển khai tác nhân của bạn đến Thời gian chạy tác nhân bằng adk deploy
  • Cách cấp quyền IAM cho tài khoản dịch vụ của tác nhân đã triển khai
  • Cách kiểm thử khả năng duy trì và khả năng quan sát bộ nhớ

Bạn cần có

  • Một dự án trên Google Cloud đã bật tính năng thanh toán
  • Một trình duyệt web như Chrome
  • Nếu bạn chạy mã trên máy của mình thay vì Cloud Shell: Google Cloud SDK (gcloud CLI), uv (trình quản lý gói Python) và Python 3.12 trở lên (uv sẽ tự động cài đặt nếu cần)

ADK (Bộ công cụ phát triển tác nhân) là khung của Google để xây dựng các tác nhân AI. Lớp học lập trình này sử dụng ADK để tạo một tác nhân và triển khai tác nhân đó vào Thời gian chạy tác nhân.

Lớp học lập trình này dành cho các nhà phát triển có trình độ trung cấp và đã quen thuộc với Python và Google Cloud.

Bạn sẽ mất khoảng 35 phút để hoàn thành lớp học lập trình này (bao gồm cả 5 – 10 phút để triển khai).

Các tài nguyên được tạo trong lớp học lập trình này sẽ có chi phí dưới 5 USD.

2. Thiết lập môi trường

Tạo một dự án trên Google Cloud

  1. Trong Google Cloud Console, trên trang chọn dự án, hãy chọn hoặc tạo một dự án trên đám mây của Google Cloud.
  2. Đảm bảo bạn đã bật tính năng thanh toán cho dự án trên Cloud. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trên một dự án hay không.

Thiết lập dự án

Mở Cloud Shell Editor trong dự án GCP mà bạn đã tạo.

Sau đó, hãy tạo một cửa sổ dòng lệnh > Cửa sổ dòng lệnh mới rồi chạy lệnh sau để thiết lập dự án của bạn. Các lệnh sau sẽ đọc mã dự án từ chế độ cài đặt này.

gcloud config set project <INSERT_YOUR_GCP_PROJECT_HERE>

Bật API

Trong cửa sổ dòng lệnh, hãy chạy lệnh sau.

gcloud services enable \
  aiplatform.googleapis.com \
  bigquery.googleapis.com \
  telemetry.googleapis.com \
  --project=$(gcloud config get project)
  • aiplatform.googleapis.com: lưu trữ tác nhân của bạn trên Môi trường thời gian chạy của tác nhân, bao gồm cả Phiên và Ngân hàng bộ nhớ của Gemini Enterprise, đồng thời phân phát mô hình Gemini
  • BigQuery API (bigquery.googleapis.com): Truy vấn SQL đối với các tập dữ liệu công khai và riêng tư
  • Telemetry API (telemetry.googleapis.com): Dấu vết OpenTelemetry để có khả năng ghi nhận tác nhân

Cài đặt ADK

Trong cửa sổ dòng lệnh, hãy chạy các lệnh sau để tạo một thư mục cho lớp học lập trình này và cài đặt ADK cũng như các phần phụ thuộc của ADK:

mkdir -p ~/adk-deploy-scale
cd ~/adk-deploy-scale
uv init --bare
uv add google-adk google-auth google-cloud-bigquery "google-cloud-aiplatform[agent_engines]"

uv tạo một môi trường Python riêng biệt cho lớp học lập trình này, vì vậy bạn không cần kích hoạt bất cứ thứ gì. Thêm tiền tố uv run vào các lệnh Python.

Gói google-adk bao gồm công cụ CLI adk mà bạn sẽ dùng để kiểm thử và triển khai tác nhân. adk deploy dùng google-cloud-aiplatform để tạo tác nhân trên Thời gian chạy tác nhân và google-cloud-bigquery là thư viện ứng dụng đằng sau các công cụ BigQuery của ADK.

3. Tạo tác nhân

Trong thư mục ~/adk-deploy-scale, hãy tạo thư mục tác nhân. Chạy tất cả các lệnh sau từ ~/adk-deploy-scale (thư mục mẹ của data_science_agent/):

mkdir data_science_agent

Sau đó, hãy chạy lệnh sau để tạo data_science_agent/.env bằng dự án, khu vực mà bạn sẽ triển khai tác nhân và chế độ cài đặt cho tác nhân đã triển khai. adk deploy đọc tệp này, vì vậy các chế độ cài đặt này vẫn hoạt động nếu bạn mở một cửa sổ dòng lệnh mới.

cat > ~/adk-deploy-scale/data_science_agent/.env <<EOF
GOOGLE_CLOUD_PROJECT=$(gcloud config get project)
GOOGLE_CLOUD_LOCATION=us-central1
GOOGLE_GENAI_USE_ENTERPRISE=True
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
EOF
  • GOOGLE_CLOUD_PROJECT và GOOGLE_CLOUD_LOCATION: mã dự án của bạn (được điền sẵn từ gcloud) và khu vực mà tác nhân chạy
  • GOOGLE_GENAI_USE_ENTERPRISE: có lệnh gọi ADK Gemini thông qua dự án trên đám mây của bạn trên Google Cloud
  • OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT: ghi lại toàn bộ nội dung đầu vào của câu lệnh và phản hồi của tác nhân, hữu ích cho việc gỡ lỗi

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

adk-deploy-scale/
  data_science_agent/
    .env
    __init__.py
    agent.py
    requirements.txt    # created in the Deploy step

Bây giờ, bạn sẽ tạo __init__.py và agent.py, sau đó thêm requirements.txt trong bước Triển khai.

Tạo data_science_agent/__init__.py – tệp này là bắt buộc để ADK có thể khám phá và tải tác nhân của bạn:

from . import agent  # noqa: F401 — required by `adk eval` and `adk web`

Tạo data_science_agent/agent.py:

Tác nhân này kết nối với BigQuery để trích xuất dữ liệu và duy trì các phiên vào Memory Bank.

Bộ nhớ sẽ tự động kích hoạt khi được triển khai. Agent Runtime đặt biến môi trường GOOGLE_CLOUD_AGENT_ENGINE_ID. Biến này không có khi chạy cục bộ.

from __future__ import annotations

import os

from google.adk.agents import LlmAgent
from google.adk.agents.callback_context import CallbackContext
from google.adk.apps import App
from google.adk.integrations.bigquery import BigQueryCredentialsConfig
from google.adk.integrations.bigquery import BigQueryToolset
from google.adk.models import Gemini
from google.adk.tools.preload_memory_tool import PreloadMemoryTool
from google.genai import types
import google.auth

PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
if not PROJECT_ID:
    raise ValueError(
        "GOOGLE_CLOUD_PROJECT environment variable is required. "
        "Add it to data_science_agent/.env: GOOGLE_CLOUD_PROJECT=<your-project-id>"
    )

credentials, _ = google.auth.default()
bq_toolset = BigQueryToolset(credentials_config=BigQueryCredentialsConfig(credentials=credentials))

# GOOGLE_CLOUD_AGENT_ENGINE_ID is set automatically by Agent Runtime.
agent_engine_id = os.getenv("GOOGLE_CLOUD_AGENT_ENGINE_ID")


async def _save_memory(callback_context: CallbackContext) -> None:
    """Persist the session to Memory Bank after each agent run.

    Only activates on Agent Runtime, where Memory Bank is available.
    """
    if agent_engine_id:
        await callback_context.add_session_to_memory()


root_agent = LlmAgent(
    name="data_science_agent",
    model=Gemini(
        model="gemini-3.8-flash",
        # gemini-3.8-flash is served from the global endpoint. The agent
        # itself runs in GOOGLE_CLOUD_LOCATION (us-central1).
        client_kwargs={"location": "global"},
        retry_options=types.HttpRetryOptions(attempts=5),
    ),
    instruction=(
        "You are an expert Data Science Agent. "
        "Your goal is to query enterprise BigQuery datasets, analyze the data, "
        "and summarize your findings. "
        f"When executing SQL queries, use project_id `{PROJECT_ID}` as the "
        "billing project unless the user specifies a different one. "
        "Present results clearly with formatted numbers. "
        "Remember user preferences like preferred regions, date ranges, "
        "or analysis formats across conversations."
    ),
    tools=[bq_toolset, PreloadMemoryTool()],
    after_agent_callback=_save_memory,
)

app = App(
    name="data_science_agent",
    root_agent=root_agent,
)

Hãy cùng xem qua chức năng của mã này:

  1. BigQueryToolset cung cấp cho các công cụ của tác nhân như execute_sql, list_table_ids và get_table_info – công cụ này có thể khám phá các giản đồ và truy vấn mọi tập dữ liệu mà người gọi có quyền truy cập.
  2. PreloadMemoryTool tự động truy xuất những kỷ niệm có liên quan trước mỗi lệnh gọi LLM bằng cách tìm kiếm nội dung liên quan đến tin nhắn của người dùng trong Ngân hàng kỷ niệm. Lệnh gọi lại _save_memory duy trì phiên vào Memory Bank sau mỗi lần chạy tác nhân, nhờ đó tác nhân có thể nhớ lại bối cảnh trong các phiên sau này.
  3. Ứng dụng bao bọc tác nhân gốc thành một ứng dụng có thể triển khai mà Agent Runtime có thể phân phát. name phải khớp với tên thư mục (data_science_agent) – adk web dùng tên này để xác định vị trí và tải tác nhân.
  4. Hướng dẫn này yêu cầu tác nhân sử dụng dự án thanh toán cho các truy vấn SQL và ghi nhớ lựa chọn ưu tiên của người dùng.
  5. Gemini với client_kwargs={"location": "global"} sẽ gửi các lệnh gọi mô hình đến điểm cuối toàn cầu, nơi có gemini-3.8-flash. Bản thân tác nhân chạy trong us-central1: adk deploy đặt GOOGLE_CLOUD_LOCATION trên tác nhân đã triển khai thành khu vực mà bạn triển khai, vì vậy, vị trí của mô hình được đặt trong mã.

4. Triển khai cho Thời gian chạy của tác nhân

Tạo một tệp requirements.txt trong thư mục data_science_agent:

google-adk
google-genai
google-auth
google-cloud-bigquery
python-dotenv
opentelemetry-instrumentation-google-genai
opentelemetry-instrumentation-httpx
opentelemetry-instrumentation-grpc
  • google-adk và google-genai: ADK và ứng dụng Gemini
  • google-auth: Xác thực Google Cloud
  • google-cloud-bigquery: thư viện ứng dụng BigQuery mà BigQueryToolset sử dụng. ADK không cài đặt công cụ này theo mặc định.
  • python-dotenv: tải tệp .env khi khởi động
  • Ba gói opentelemetry-instrumentation-* này cho phép các tính năng quan sát mà bạn sẽ khám phá sau. Chúng đo lường các lệnh gọi mô hình Gemini và hoạt động giao tiếp gRPC/HTTP nội bộ để các dấu vết xuất hiện trên thẻ Dấu vết của tác nhân.

adk deploy cũng đọc tệp data_science_agent/.env mà bạn đã tạo trước đó và đặt các chế độ cài đặt của tệp này trên tác nhân đã triển khai.

Triển khai tác nhân. Đối số cuối cùng data_science_agent là thư mục chứa mã của tác nhân:

uv run adk deploy agent_engine \
  --project=$(gcloud config get project) \
  --region=us-central1 \
  --display_name="Data Science Agent" \
  --otel_to_cloud \
  data_science_agent

Gần điểm bắt đầu, đầu ra cho thấy 2 dòng màu vàng, Ignoring GOOGLE_CLOUD_PROJECT in .env ... và Ignoring GOOGLE_CLOUD_LOCATION in .env .... Chúng được dự kiến: cờ --project và --region sẽ được ưu tiên hơn các giá trị tương tự trong .env.

Cờ

Mục đích

--project/--region

Dự án và khu vực mục tiêu trên Google Cloud

--display_name

Tên dễ đọc xuất hiện trong Bảng điều khiển Cloud

--otel_to_cloud

Xuất dấu vết và nhật ký OpenTelemetry sang Google Cloud, đồng thời bật tính năng đo từ xa (GOOGLE_CLOUD_AGENT_ENGINE_ENABLE_TELEMETRY=true) trên tác nhân đã triển khai

Khi được triển khai cho Thời gian chạy của tác nhân, 2 chức năng sẽ tự động kích hoạt:

  • Ngân hàng bộ nhớ: adk deploy kết nối tác nhân với các phiên và Ngân hàng bộ nhớ trên phiên bản Thời gian chạy của tác nhân. PreloadMemoryTool đọc từ Memory Bank và _save_memory tự động duy trì các phiên.
  • Khả năng ghi nhận: Cloud Trace ghi lại các bước suy luận, lệnh gọi công cụ và độ trễ của tác nhân.

5. Cấp quyền đối với BigQuery

Bạn cần cấp cho BigQuery quyền truy cập vào tác nhân dịch vụ Thời gian chạy tác nhân (Tác nhân dịch vụ Công cụ suy luận AI Platform). Khi được triển khai, tác nhân sẽ chạy dưới dạng tài khoản dịch vụ do Google quản lý này (không phải thông tin đăng nhập cá nhân của bạn), vì vậy, tác nhân cần có quyền rõ ràng để thực thi các truy vấn SQL.

PROJECT_NUMBER=$(gcloud projects describe $(gcloud config get project) \
  --format='value(projectNumber)')

SA="service-${PROJECT_NUMBER}@gcp-sa-aiplatform-re.iam.gserviceaccount.com"

# Required to execute SQL queries
gcloud projects add-iam-policy-binding $(gcloud config get project) \
  --member="serviceAccount:${SA}" \
  --role="roles/bigquery.jobUser"

# Required to read table metadata and data
gcloud projects add-iam-policy-binding $(gcloud config get project) \
  --member="serviceAccount:${SA}" \
  --role="roles/bigquery.dataViewer"

Mỗi lệnh sẽ in Updated IAM policy for project [...] khi thành công.

6. Kiểm thử Tác nhân đã triển khai

Mở trang Triển khai trong Google Cloud Console. Nhấp vào tác nhân đã triển khai, rồi nhấp vào thẻ Playground (Sân chơi).

Kiểm thử các chức năng của BigQuery:

  1. "Liệt kê các bảng trong bigquery-public-data.hacker_news"
    • Dự kiến: Đặc vụ gọi list_table_ids và trả về tên bảng, bao gồm cả full.
  2. "Tìm số lượng bài đăng mỗi năm trong bigquery-public-data.hacker_news.full"
    • Dự kiến: Đặc vụ gọi execute_sql bằng một truy vấn SQL và trả về một bảng gồm các năm và số lượng bài đăng.
  3. "Mức thay đổi về tỷ lệ phần trăm của bài đăng so với cùng kỳ năm trước là bao nhiêu?"
    • Dự kiến: Trợ lý gọi execute_sql bằng một truy vấn SQL tính toán mức thay đổi phần trăm và trả về kết quả.

7. Kiểm thử khả năng lưu trữ cố định bộ nhớ

Vẫn trong Playground, hãy dạy cho trợ lý ảo một lựa chọn ưu tiên:

  1. "Hãy nhớ rằng tập dữ liệu yêu thích của tôi là bigquery-public-data.hacker_news"
  2. "Bảng này có những gì?"

Đợi vài giây để bộ nhớ duy trì (lệnh gọi lại _save_memory sẽ chạy sau khi tác nhân phản hồi).

Bây giờ, hãy bắt đầu một phiên mới bằng cách nhấp vào Phiên mới trong Playground, sau đó hỏi:

  1. "What is my favorite dataset?" (Đâu là tập dữ liệu tôi yêu thích?)

Nhân viên hỗ trợ cần nhớ bigquery-public-data.hacker_news ngay cả khi đây là một phiên hoàn toàn mới và không có nhật ký trò chuyện. Cách này hiệu quả vì:

  • _save_memory duy trì mỗi phiên vào Ngân hàng bộ nhớ thông qua callback_context.add_session_to_memory()
  • PreloadMemoryTool truy xuất những thông tin đã lưu trữ có liên quan trước mỗi lệnh gọi LLM
  • Ngân hàng bộ nhớ so khớp nội dung theo ngữ nghĩa, chứ không chỉ theo từ khoá

8. Khám phá khả năng ghi nhận

Trong Cloud Console, hãy chuyển đến tác nhân đã triển khai rồi nhấp vào thẻ Dấu vết.

Thẻ Dấu vết cho thấy bảng phiên

Bạn sẽ thấy một Bảng phiên liệt kê các phiên từ những truy vấn kiểm thử mà bạn đã chạy ở các bước trước. Bảng này cho biết các chỉ số tóm tắt cho từng phiên – thời lượng trung bình, số lượt gọi mô hình, số lượt gọi công cụ, mức sử dụng mã thông báo và mọi lỗi.

Nhấp vào một phiên để kiểm tra thông tin chi tiết về dấu vết, bao gồm:

  • Một đồ thị có hướng không chu trình (DAG) của các khoảng thời gian – cho thấy quy trình phân tích từng bước về lý luận của tác nhân, lệnh gọi công cụ (truy vấn BigQuery) và độ trễ
  • Đầu vào và đầu ra cho mỗi khoảng thời gian (được bật thông qua biến môi trường OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT trong .env)
  • Thuộc tính siêu dữ liệu như mã khoảng thời gian, mã dấu vết và thời gian

Bạn cũng có thể chuyển sang Chế độ xem khoảng thời gian (chuyển đổi ở trên cùng) để xem từng khoảng thời gian trong tất cả các phiên.

Cách hoạt động của tính năng theo dõi

Khi bạn triển khai bằng --otel_to_cloud, adk deploy sẽ tạo một vùng chứa chạy máy chủ ADK API khi OpenTelemetry đang bật. Trên Thời gian chạy tác nhân, máy chủ sẽ khởi chạy một quy trình OpenTelemetry:

  1. Tạo một TracerProvider bằng một trình xuất OTLP gửi các khoảng thời gian đến telemetry.googleapis.com
  2. Ghi lại các khoảng thời gian riêng của ADK cho các lần chạy tác nhân, lệnh gọi mô hình và lệnh gọi công cụ, đồng thời sử dụng 3 gói đo lường từ requirements.txt để thêm các khoảng thời gian từ các thư viện chính (Gemini, httpx, gRPC)
  3. Nhóm và xuất các khoảng thời gian sang Telemetry API, nơi thẻ Dấu vết đọc các khoảng thời gian đó

Vùng chứa được triển khai bao gồm ADK, OpenTelemetry SDK và trình xuất, nhưng không bao gồm các gói đo lường. Đó là lý do requirements.txt liệt kê cả 3 loại. Nếu không có các khoảng thời gian này, máy chủ ADK API sẽ ghi lại một cảnh báo và bỏ qua các khoảng thời gian đó.

Khắc phục sự cố

Nếu không có dấu vết nào xuất hiện sau vài phút:

  1. Kiểm tra để đảm bảo bạn đã bật Telemetry API: bạn đã bật API này trong bước thiết lập. Xác minh bằng: gcloud services list --enabled --project=$(gcloud config get project) | grep telemetry
  2. Kiểm tra Cloud Logging để tìm cảnh báo: chuyển đến Logging > Logs Explorer (Ghi nhật ký > Trình khám phá nhật ký) rồi tìm "proceeding without" hoặc "GoogleGenAiSdkInstrumentor". Cảnh báo nêu tên một công cụ đo lường (GenAI, HTTPX hoặc gRPC) có nghĩa là gói opentelemetry-instrumentation-* phù hợp bị thiếu trong requirements.txt của bạn.
  3. Đừng thêm google-cloud-aiplatform vào requirements.txt. adk deploy sẽ tự động thêm tham số này; việc tự khai báo có thể gây ra xung đột gói OpenTelemetry và âm thầm làm hỏng hoạt động đo từ xa.

9. Dọn dẹp

Để tránh bị tính phí liên tục, hãy xoá các tài nguyên bạn đã tạo trong lớp học lập trình này.

Xoá tác nhân đã triển khai khỏi trang Triển khai trong Cloud Console. Chọn tác nhân của bạn rồi nhấp vào Xoá.

Nếu đã tạo một dự án dành riêng cho lớp học lập trình này, bạn có thể xoá toàn bộ dự án thay vì chỉ xoá ứng dụng:

gcloud projects delete <YOUR_PROJECT_ID>

Bạn có thể dọn dẹp môi trường cục bộ:

cd ~
rm -rf ~/adk-deploy-scale

10. Xin chúc mừng

Bạn đã tạo một tác nhân khoa học dữ liệu có trạng thái và triển khai tác nhân đó vào Thời gian chạy tác nhân!

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

  • Cách tạo tác nhân ADK bằng BigQueryToolset để có quyền truy cập dữ liệu thực
  • Cách bật bộ nhớ liên tục bằng Ngân hàng bộ nhớ bằng cách sử dụng PreloadMemoryTool và after_agent_callback
  • Cách cấp quyền IAM cho tài khoản dịch vụ của tác nhân đã triển khai
  • Cách triển khai vào Agent Runtime và bật khả năng ghi nhận bằng Cloud Trace

Các bước tiếp theo

  • Truy vấn các tập dữ liệu BigQuery riêng tư của riêng bạn bằng cách cấp cho tác nhân dịch vụ Thời gian chạy của tác nhân quyền truy cập vào dữ liệu của bạn
  • Thêm Thực thi mã để chạy quy trình phân tích Python trong một hộp cát an toàn
  • Thiết lập trang tổng quan khả năng ghi nhận Cloud Trace để giám sát tác nhân của bạn trong môi trường phát hành công khai
  • Xuất bản kết quả lên Google Workspace bằng các công cụ MCP

Tài liệu tham khảo