Statusbehafteter Data Science Agent in Agent Runtime

1. Übersicht

In diesem Codelab erstellen Sie einen Data Science-Agent, der echte Daten aus öffentlichen BigQuery-Datasets abfragt und sich Ihre Einstellungen sitzungsübergreifend merkt. Anschließend stellen Sie ihn in Agent Runtime bereit, einem vollständig verwalteten Google Cloud-Dienst, der sich um Infrastruktur, Skalierung und Sitzungsverwaltung kümmert.

Der KI-Agent nutzt drei Kernfunktionen, die nach und nach aktiviert werden:

  • BigQuery-Toolset: Der Agent untersucht Schemas und führt SQL-Abfragen für echte BigQuery-Datasets aus – das funktioniert sowohl lokal als auch bei der Bereitstellung.
  • Memory Bank: Wenn der Agent bereitgestellt wird, merkt er sich Nutzerpräferenzen und den Kontext über getrennte Sitzungen hinweg.
  • Beobachtbarkeit: Cloud Trace erfasst die Logikschritte, Toolaufrufe und Latenzen des Agenten über die OpenTelemetry-Instrumentierung.

Lerninhalte

  • ADK-Agent mit BigQueryToolset für den Zugriff auf echte Daten erstellen
  • Memory Bank für sitzungsübergreifende Persistenz konfigurieren
  • KI-Agent mit adk deploy in Agent Runtime bereitstellen
  • IAM-Berechtigungen für das Dienstkonto des bereitgestellten KI-Agenten gewähren
  • Persistenz und Beobachtbarkeit des Arbeitsspeichers testen

Voraussetzungen

  • Ein Google Cloud-Projekt mit aktivierter Abrechnungsfunktion
  • Ein Webbrowser wie Chrome
  • Wenn Sie den Code auf Ihrem eigenen Computer anstelle von Cloud Shell ausführen: das Google Cloud SDK (gcloud-CLI), uv (Python-Paketmanager) und Python 3.12+ (bei Bedarf automatisch von uv installiert)

Das ADK (Agent Development Kit) ist das Framework von Google zum Erstellen von KI-Agenten. In diesem Codelab wird das ADK verwendet, um einen Agenten zu erstellen und in der Agent Runtime bereitzustellen.

Dieses Codelab richtet sich an Entwickler mit mittleren Kenntnissen, die mit Python und Google Cloud vertraut sind.

Dieses Codelab dauert etwa 35 Minuten (einschließlich 5–10 Minuten für die Bereitstellung).

Die in diesem Codelab erstellten Ressourcen sollten weniger als 5 $ kosten.

2. Umgebung einrichten

Google Cloud-Projekt erstellen

  1. Wählen Sie in der Google Cloud Console auf der Seite zur Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
  2. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.

Projekt festlegen

Öffnen Sie den Cloud Shell-Editor in Ihrem erstellten GCP-Projekt.

Erstellen Sie dann ein Terminal > Neues Terminal und führen Sie den folgenden Befehl aus, um Ihr Projekt festzulegen. Spätere Befehle lesen die Projekt-ID aus dieser Einstellung.

gcloud config set project <INSERT_YOUR_GCP_PROJECT_HERE>

APIs aktivieren

Führen Sie im Terminal den folgenden Befehl aus.

gcloud services enable \
  aiplatform.googleapis.com \
  bigquery.googleapis.com \
  telemetry.googleapis.com \
  --project=$(gcloud config get project)
  • aiplatform.googleapis.com: Hier wird Ihr KI-Agent in der Laufzeit für KI-Agenten gehostet, einschließlich Gemini Enterprise-Sitzungen und Memory Bank, und das Gemini-Modell wird bereitgestellt.
  • BigQuery API (bigquery.googleapis.com): SQL-Abfragen für öffentliche und private Datasets
  • Telemetry API (telemetry.googleapis.com): OpenTelemetry-Traces für die Beobachtbarkeit von KI-Agenten

ADK installieren

Führen Sie im Terminal die folgenden Befehle aus, um einen Ordner für dieses Codelab zu erstellen und das ADK und seine Abhängigkeiten zu installieren:

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 erstellt eine isolierte Python-Umgebung für dieses Codelab, sodass Sie nichts aktivieren müssen. Stellen Sie Python-Befehlen das Präfix uv run voran.

Das Paket google-adk enthält das adk-CLI-Tool, mit dem Sie den Agent testen und bereitstellen. adk deploy verwendet google-cloud-aiplatform, um Ihren Agenten in der Agent Runtime zu erstellen. google-cloud-bigquery ist die Clientbibliothek, die den BigQuery-Tools des ADK zugrunde liegt.

3. KI‑Agenten erstellen

Erstellen Sie im Ordner ~/adk-deploy-scale das Agent-Verzeichnis. Führen Sie alle späteren Befehle über ~/adk-deploy-scale (das übergeordnete Element von data_science_agent/) aus:

mkdir data_science_agent

Führen Sie dann den folgenden Befehl aus, um data_science_agent/.env mit Ihrem Projekt, der Region, in der Sie den KI-Agenten bereitstellen, und den Einstellungen für den bereitgestellten KI-Agenten zu erstellen. adk deploy liest diese Datei, sodass diese Einstellungen auch dann funktionieren, wenn Sie ein neues Terminal öffnen.

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 und GOOGLE_CLOUD_LOCATION: Ihre Projekt-ID (aus gcloud) und die Region, in der der Agent ausgeführt wird
  • GOOGLE_GENAI_USE_ENTERPRISE: hat Gemini über Ihr Google Cloud-Projekt aufgerufen
  • OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT: Erfasst vollständige Prompt-Eingaben und Agent-Antworten in Logs, was für das Debugging nützlich ist.

Die endgültige Verzeichnisstruktur sieht so aus:

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

Sie erstellen jetzt __init__.py und agent.py und fügen requirements.txt im Bereitstellungsschritt hinzu.

Erstellen Sie data_science_agent/__init__.py. Diese Datei ist erforderlich, damit das ADK Ihren KI-Agenten erkennen und laden kann:

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

data_science_agent/agent.py erstellen:

Dieser Agent stellt eine Verbindung zu BigQuery her, um Daten zu extrahieren, und speichert Sitzungen in Memory Bank.

Der Speicher wird bei der Bereitstellung automatisch aktiviert. Agent Runtime legt die Umgebungsvariable GOOGLE_CLOUD_AGENT_ENGINE_ID fest, die bei der lokalen Ausführung nicht vorhanden ist.

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,
)

So funktioniert dieser Code:

  1. BigQueryToolset bietet dem Agenten Tools wie execute_sql, list_table_ids und get_table_info. Damit kann er Schemas untersuchen und jedes Dataset abfragen, auf das der Anrufer Zugriff hat.
  2. PreloadMemoryTool ruft automatisch relevante Erinnerungen ab, bevor jeder LLM-Aufruf erfolgt. Dazu wird die Memory Bank nach Inhalten durchsucht, die mit der Nachricht des Nutzers in Verbindung stehen. Der _save_memory-Callback speichert die Sitzung nach jedem Agent-Lauf in der Memory Bank, sodass der Agent den Kontext in zukünftigen Sitzungen abrufen kann.
  3. App kapselt den Root-Agenten in einer bereitstellbaren Anwendung, die von Agent Runtime bereitgestellt werden kann. name muss mit dem Verzeichnisnamen (data_science_agent) übereinstimmen. adk web verwendet dies, um den Agenten zu finden und zu laden.
  4. Mit der Anweisung wird der Agent angewiesen, das Abrechnungsprojekt für SQL-Abfragen zu verwenden und sich die Nutzerpräferenzen zu merken.
  5. Bei Gemini mit client_kwargs={"location": "global"} werden Modellaufrufe an den globalen Endpunkt gesendet, an dem gemini-3.8-flash verfügbar ist. Der KI-Agent selbst wird in us-central1 ausgeführt: Mit adk deploy wird GOOGLE_CLOUD_LOCATION für den bereitgestellten KI-Agenten auf die Region festgelegt, in der Sie die Bereitstellung vornehmen. Der Standort des Modells wird also im Code festgelegt.

4. In Agent Runtime bereitstellen

Erstellen Sie eine requirements.txt-Datei im Verzeichnis 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 und google-genai: ADK und der Gemini-Client
  • google-auth: Google Cloud-Authentifizierung
  • google-cloud-bigquery: Die BigQuery-Clientbibliothek, die von BigQueryToolset verwendet wird. Das ADK installiert es nicht standardmäßig.
  • python-dotenv: Lädt die Datei .env beim Start.
  • Die drei opentelemetry-instrumentation-*-Pakete ermöglichen die Funktionen zur Beobachtbarkeit, die Sie später kennenlernen werden. Sie instrumentieren Gemini-Modellaufrufe und die interne gRPC-/HTTP-Kommunikation, sodass auf dem Tab Traces Ihres Agenten Traces angezeigt werden.

adk deploy liest auch die zuvor erstellte Datei data_science_agent/.env und wendet die darin enthaltenen Einstellungen auf den bereitgestellten Agenten an.

Agent bereitstellen. Das letzte Argument data_science_agent ist das Verzeichnis mit Ihrem Agentencode:

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

Am Anfang der Ausgabe sind zwei gelbe Linien zu sehen: Ignoring GOOGLE_CLOUD_PROJECT in .env ... und Ignoring GOOGLE_CLOUD_LOCATION in .env .... Sie werden erwartet: Die Flags --project und --region haben Vorrang vor denselben Werten in .env.

Flag

Zweck

--project/--region

Google Cloud-Zielprojekt und ‑region

--display_name

Für Menschen lesbarer Name, der in der Cloud Console angezeigt wird

--otel_to_cloud

Exportiert OpenTelemetry-Traces und -Logs nach Google Cloud und aktiviert die Telemetrie (GOOGLE_CLOUD_AGENT_ENGINE_ENABLE_TELEMETRY=true) für den bereitgestellten Agent.

Wenn die Bereitstellung in Agent Runtime erfolgt, werden zwei Funktionen automatisch aktiviert:

  • Memory Bank: adk deploy verbindet den KI-Agenten mit Sessions und Memory Bank in seiner Agent Runtime-Instanz. PreloadMemoryTool liest aus der Memory Bank und _save_memory speichert Sitzungen automatisch.
  • Beobachtbarkeit: Cloud Trace erfasst die Reasoning-Schritte, Toolaufrufe und Latenzen des Agents.

5. BigQuery-Berechtigungen erteilen

Sie müssen BigQuery Zugriff auf den Dienst-Agent für die Agent Runtime (den AI Platform Reasoning Engine-Dienst-Agent) gewähren. Wenn der Agent bereitgestellt wird, wird er als dieses von Google verwaltete Dienstkonto ausgeführt (nicht mit Ihren persönlichen Anmeldedaten). Daher sind explizite Berechtigungen zum Ausführen von SQL-Abfragen erforderlich.

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"

Bei erfolgreicher Ausführung wird für jeden Befehl Updated IAM policy for project [...] ausgegeben.

6. Bereitgestellten KI-Agenten testen

Öffnen Sie in der Google Cloud Console die Seite Bereitstellungen. Klicken Sie auf den bereitgestellten Agenten und dann auf den Tab Playground.

BigQuery-Funktionen testen:

  1. „List the tables in bigquery-public-data.hacker_news“
    • Erwartet: Der Agent ruft list_table_ids auf und gibt Tabellennamen zurück, einschließlich full.
  2. „Find the number of posts per year in bigquery-public-data.hacker_news.full“
    • Erwartet: Der Agent ruft execute_sql mit einer SQL-Abfrage auf und gibt eine Tabelle mit Jahren und der Anzahl der Beiträge zurück.
  3. „Wie hoch war die prozentuale Veränderung der Beiträge im Jahresvergleich?“
    • Erwartet: Der Agent ruft execute_sql mit einer SQL-Abfrage auf, die die prozentuale Änderung berechnet und die Ergebnisse zurückgibt.

7. Arbeitsspeicherpersistenz testen

Weisen Sie dem KI-Agenten im Playground eine Präferenz zu:

  1. „Denk daran, dass mein Lieblingsdataset bigquery-public-data.hacker_news ist.“
  2. „Welche Tabellen sind enthalten?“

Warten Sie einige Sekunden, bis der Speicher beibehalten wird. Der _save_memory-Callback wird ausgeführt, nachdem der Agent geantwortet hat.

Starten Sie jetzt eine neue Sitzung, indem Sie im Playground auf Neue Sitzung klicken, und stellen Sie dann folgende Frage:

  1. „What is my favorite dataset?“ (Was ist mein bevorzugter Datensatz?)

Der KI-Agent sollte sich an bigquery-public-data.hacker_news erinnern, obwohl dies eine brandneue Sitzung ohne Unterhaltungsverlauf ist. Das funktioniert so:

  • _save_memory wird in jeder Sitzung über callback_context.add_session_to_memory() in der Memory Bank gespeichert.
  • PreloadMemoryTool ruft vor jedem LLM-Aufruf relevante gemerkte Informationen ab.
  • Memory Bank gleicht Inhalte semantisch ab, nicht nur anhand von Suchbegriffen.

8. Beobachtbarkeit kennenlernen

Rufen Sie in der Cloud Console Ihren bereitgestellten Agent auf und klicken Sie auf den Tab Traces (Traces).

Tab „Traces“ mit Sitzungstabelle

Sie sollten eine Sitzungstabelle sehen, in der die Sitzungen aus den Testanfragen aufgeführt sind, die Sie in den vorherigen Schritten ausgeführt haben. Die Tabelle enthält Zusammenfassungsmesswerte für jede Sitzung: durchschnittliche Dauer, Modellaufrufe, Toolaufrufe, Tokennutzung und alle Fehler.

Klicken Sie auf eine Sitzung, um die zugehörigen Tracedetails aufzurufen, darunter:

  • Ein gerichteter azyklischer Graph (DAG) der Spannen, der die schrittweise Aufschlüsselung der Agentenlogik, der Toolaufrufe (BigQuery-Abfragen) und der Latenzen zeigt
  • Ein- und Ausgaben für jeden Zeitraum (über die Umgebungsvariable OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT in .env aktiviert)
  • Metadatenattribute wie Span-IDs, Trace-IDs und Zeitangaben

Sie können auch zur Bereichsansicht wechseln (Schaltfläche oben), um einzelne Bereiche für alle Sitzungen zu sehen.

So funktioniert die Funktion „Aufspüren“

Wenn Sie mit --otel_to_cloud bereitstellen, erstellt adk deploy einen Container, in dem der ADK-API-Server mit aktiviertem OpenTelemetry ausgeführt wird. In Agent Runtime initialisiert der Server eine OpenTelemetry-Pipeline, die:

  1. Erstellt einen TracerProvider mit einem OTLP-Exporter, der Spans an telemetry.googleapis.com sendet.
  2. Er zeichnet die eigenen Spans des ADK für Agent-Ausführungen, Modellaufrufe und Toolaufrufe auf und verwendet die drei Instrumentierungspakete aus Ihrem requirements.txt, um Spans aus wichtigen Bibliotheken (Gemini, httpx, gRPC) hinzuzufügen.
  3. Batch- und Exportspans an die Telemetry API, wo sie auf dem Tab „Traces“ gelesen werden

Der bereitgestellte Container enthält das ADK sowie das OpenTelemetry SDK und den OpenTelemetry-Exporter, aber nicht die Instrumentierungspakete. Aus diesem Grund werden in requirements.txt alle drei angezeigt. Andernfalls protokolliert der ADK API-Server eine Warnung und überspringt diese Spannen.

Fehlerbehebung

Wenn nach einigen Minuten keine Traces angezeigt werden:

  1. Prüfen, ob die Telemetry API aktiviert ist: Sie haben sie im Einrichtungsschritt aktiviert. Bestätigen mit: gcloud services list --enabled --project=$(gcloud config get project) | grep telemetry
  2. Cloud Logging auf Warnungen prüfen: Rufen Sie Logging > Log-Explorer auf und suchen Sie nach "proceeding without" oder "GoogleGenAiSdkInstrumentor". Eine Warnung, in der eine Instrumentierung (GenAI, HTTPX oder gRPC) genannt wird, bedeutet, dass das entsprechende opentelemetry-instrumentation-*-Paket in Ihrem requirements.txt fehlt.
  3. Fügen Sie google-cloud-aiplatform nicht zu Ihrem requirements.txt hinzu. adk deploy fügt sie automatisch hinzu. Wenn Sie sie selbst deklarieren, kann dies zu Konflikten mit OpenTelemetry-Paketen führen und die Instrumentierung wird möglicherweise ohne Fehlermeldung unterbrochen.

9. Bereinigen

Löschen Sie die in diesem Codelab erstellten Ressourcen, um laufende Gebühren zu vermeiden.

Löschen Sie den bereitgestellten Agent auf der Seite Bereitstellungen in der Cloud Console. Wählen Sie den KI‑Agent aus und klicken Sie auf Löschen.

Wenn Sie ein Projekt speziell für dieses Codelab erstellt haben, können Sie stattdessen das gesamte Projekt löschen:

gcloud projects delete <YOUR_PROJECT_ID>

Optional: Bereinigen Sie Ihre lokale Umgebung:

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

10. Glückwunsch

Sie haben einen zustandsbehafteten Data-Scientist-Agent erstellt und in der Agent Runtime bereitgestellt.

Das haben Sie gelernt

  • ADK-Agent mit BigQueryToolset für den Zugriff auf echte Daten erstellen
  • So aktivieren Sie den persistenten Speicher mit Memory Bank über PreloadMemoryTool und after_agent_callback
  • IAM-Berechtigungen für das Dienstkonto des bereitgestellten KI-Agenten gewähren
  • In Agent Runtime bereitstellen und die Beobachtbarkeit mit Cloud Trace aktivieren

Nächste Schritte

  • Eigene private BigQuery-Datasets abfragen, indem Sie dem Agent Runtime-Dienst-Agent Zugriff auf Ihre Daten gewähren
  • Codeausführung hinzufügen, um Python-Analysen in einer sicheren Sandbox auszuführen
  • Cloud Trace-Beobachtbarkeits-Dashboards einrichten, um Ihren Agent in der Produktion zu überwachen
  • Ergebnisse mit MCP-Tools in Google Workspace veröffentlichen

Referenzdokumente