1. Panoramica
In questo codelab creerai un agente di data science che esegue query sui dati reali dei set di dati pubblici BigQuery e memorizza le tue preferenze tra le sessioni. Dopodiché, lo eseguirai il deployment in Agent Runtime, un servizio Google Cloud completamente gestito che gestisce l'infrastruttura, lo scaling e la gestione delle sessioni.
L'agente utilizza tre funzionalità principali che si attivano progressivamente:
- BigQuery Toolset: l'agente esplora gli schemi ed esegue query SQL su set di dati BigQuery reali. Questa operazione funziona sia localmente che al momento del deployment.
- Memory Bank: una volta implementato, l'agente ricorda le preferenze e il contesto dell'utente nelle sessioni disconnesse.
- Osservabilità: Cloud Trace acquisisce i passaggi di ragionamento, le chiamate agli strumenti e le latenze dell'agente tramite l'instrumentazione OpenTelemetry.
Obiettivi didattici
- Come creare un agente ADK con
BigQueryToolsetper l'accesso ai dati reali - Come configurare Memory Bank per la persistenza tra sessioni
- Come eseguire il deployment dell'agente in Agent Runtime con
adk deploy - Come concedere le autorizzazioni IAM per il service account dell'agente di cui è stato eseguito il deployment
- Come testare la persistenza e l'osservabilità della memoria
Che cosa ti serve
- Un progetto cloud Google Cloud con la fatturazione abilitata
- Un browser web come Chrome
- Se esegui il codice sulla tua macchina anziché su Cloud Shell: Google Cloud SDK (
gcloudCLI), uv (gestore di pacchetti Python) e Python 3.12+ (installato automaticamente dauv, se necessario)
ADK (Agent Development Kit) è il framework di Google per la creazione di agenti AI. Questo codelab utilizza ADK per creare un agente ed eseguirne il deployment in Agent Runtime.
Questo codelab è destinato a sviluppatori di livello intermedio che hanno una certa familiarità con Python e Google Cloud.
Il completamento di questo codelab richiede circa 35 minuti (inclusi 5-10 minuti per il deployment).
Le risorse create in questo codelab dovrebbero costare meno di 5 $.
2. Configura l'ambiente
Crea un progetto Google Cloud
- Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud.
- Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.
Configurare il progetto
Apri l'editor di Cloud Shell nel progetto GCP che hai creato.
Quindi, crea un terminale > Nuovo terminale ed esegui il comando seguente per impostare il progetto. I comandi successivi leggono l'ID progetto da questa impostazione.
gcloud config set project <INSERT_YOUR_GCP_PROJECT_HERE>
Abilita API
Nel terminale, esegui questo comando.
gcloud services enable \
aiplatform.googleapis.com \
bigquery.googleapis.com \
telemetry.googleapis.com \
--project=$(gcloud config get project)
aiplatform.googleapis.com: ospita l'agente su Agent Runtime, incluse le sessioni Gemini Enterprise e Memory Bank, e serve il modello Gemini- API BigQuery (
bigquery.googleapis.com): query SQL su set di dati pubblici e privati - API Telemetry (
telemetry.googleapis.com): tracce OpenTelemetry per l'osservabilità dell'agente
Installa ADK
Nel terminale, esegui i seguenti comandi per creare una cartella per questo codelab e installare ADK e le relative dipendenze:
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 crea un ambiente Python isolato per questo codelab, quindi non devi attivare nulla. Aggiungi il prefisso uv run ai comandi Python.
Il pacchetto google-adk include lo strumento CLI adk che utilizzerai per testare e implementare l'agente. adk deploy utilizza google-cloud-aiplatform per creare l'agente in Agent Runtime e google-cloud-bigquery è la libreria client alla base degli strumenti BigQuery di ADK.
3. Crea l'agente
Nella cartella ~/adk-deploy-scale, crea la directory dell'agente. Esegui tutti i comandi successivi da ~/adk-deploy-scale (il genitore di data_science_agent/):
mkdir data_science_agent
Quindi, esegui questo comando per creare data_science_agent/.env con il tuo progetto, la regione in cui verrà eseguito il deployment dell'agente e le impostazioni per l'agente di cui è stato eseguito il deployment. adk deploy legge questo file, quindi queste impostazioni funzionano ancora se apri un nuovo terminale.
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_PROJECTeGOOGLE_CLOUD_LOCATION: il tuo ID progetto (compilato dagcloud) e la regione in cui viene eseguito l'agenteGOOGLE_GENAI_USE_ENTERPRISE: ha ADK che chiama Gemini tramite il tuo progetto Google CloudOTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT: registra gli input dei prompt completi e le risposte dell'agente, utili per il debug
La struttura di directory finale avrà questo aspetto:
adk-deploy-scale/
data_science_agent/
.env
__init__.py
agent.py
requirements.txt # created in the Deploy step
Ora creerai __init__.py e agent.py, poi aggiungerai requirements.txt nel passaggio di deployment.
Crea data_science_agent/__init__.py. Questo file è necessario per consentire ad ADK di rilevare e caricare l'agente:
from . import agent # noqa: F401 — required by `adk eval` and `adk web`
Crea data_science_agent/agent.py:
Questo agente si connette a BigQuery per l'estrazione dei dati e salva le sessioni in Memory Bank.
La memoria si attiva automaticamente quando viene distribuita. Agent Runtime imposta la variabile di ambiente GOOGLE_CLOUD_AGENT_ENGINE_ID, che non è presente durante l'esecuzione in locale.
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,
)
Vediamo cosa fa questo codice:
- BigQueryToolset fornisce all'agente strumenti come
execute_sql,list_table_idseget_table_info. Può esplorare gli schemi ed eseguire query su qualsiasi set di dati a cui il chiamante ha accesso. - PreloadMemoryTool recupera automaticamente le Memory pertinenti prima di ogni chiamata LLM cercando nella Memory Bank contenuti correlati al messaggio dell'utente. Il callback
_save_memorysalva la sessione in Memory Bank dopo ogni esecuzione dell'agente, in modo che l'agente possa ricordare il contesto nelle sessioni future. - App racchiude l'agente principale in un'applicazione di cui è possibile eseguire il deployment e che può essere gestita da Agent Runtime.
namedeve corrispondere al nome della directory (data_science_agent).adk weblo utilizza per individuare e caricare l'agente. - L'istruzione indica all'agente di utilizzare il progetto di fatturazione per le query SQL e di ricordare le preferenze dell'utente.
- Gemini con
client_kwargs={"location": "global"}invia chiamate al modello all'endpoint globale, dove è disponibilegemini-3.8-flash. L'agente stesso viene eseguito inus-central1:adk deployimpostaGOOGLE_CLOUD_LOCATIONsull'agente di cui è stato eseguito il deployment nella regione in cui viene eseguito il deployment, quindi la posizione del modello viene impostata nel codice.
4. Esegui il deployment in Agent Runtime
Crea un file requirements.txt nella directory 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-adkegoogle-genai: ADK e il client Geminigoogle-auth: Autenticazione Google Cloudgoogle-cloud-bigquery: la libreria client BigQuery utilizzata daBigQueryToolset. ADK non lo installa per impostazione predefinita.python-dotenv: carica il file.envall'avvio- I tre pacchetti
opentelemetry-instrumentation-*abilitano le funzionalità di osservabilità che esplorerai in un secondo momento. Strumentano le chiamate al modello Gemini e la comunicazione gRPC/HTTP interna in modo che le tracce vengano visualizzate nella scheda Tracce dell'agente.
adk deploy legge anche il file data_science_agent/.env creato in precedenza e imposta le relative impostazioni sull'agente di cui è stato eseguito il deployment.
Esegui il deployment dell'agente. L'ultimo argomento data_science_agent è la directory contenente il codice dell'agente:
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
All'inizio, l'output mostra due linee gialle, Ignoring GOOGLE_CLOUD_PROJECT in .env ... e Ignoring GOOGLE_CLOUD_LOCATION in .env .... Sono previsti: i flag --project e --region hanno la precedenza sugli stessi valori in .env.
Flag | Finalità |
| Progetto Google Cloud e regione di destinazione |
| Nome leggibile mostrato nella console Cloud |
| Esporta tracce e log OpenTelemetry in Google Cloud e attiva la telemetria ( |
Quando viene eseguito il deployment su Agent Runtime, vengono attivate automaticamente due funzionalità:
- Memory Bank:
adk deployconnette l'agente a Sessioni e Memory Bank nella sua istanza di Agent Runtime.PreloadMemoryToollegge dalla Memory Bank e_save_memorymantiene automaticamente le sessioni. - Osservabilità: Cloud Trace acquisisce i passaggi di ragionamento, le chiamate agli strumenti e le latenze dell'agente.
5. Concedi le autorizzazioni BigQuery
Devi concedere a BigQuery l'accesso all'agente di servizio Agent Runtime (l'agente di servizio AI Platform Reasoning Engine). Una volta eseguito il deployment, l'agente viene eseguito come questo service account gestito da Google (non le tue credenziali personali), pertanto ha bisogno di autorizzazioni esplicite per eseguire query 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"
Ogni comando stampa Updated IAM policy for project [...] se ha esito positivo.
6. Testa l'agente di cui è stato eseguito il deployment
Apri la pagina Deployment nella console Google Cloud. Fai clic sull'agente di cui è stato eseguito il deployment, quindi sulla scheda Playground.
Testa le funzionalità di BigQuery:
- "Elenca le tabelle in bigquery-public-data.hacker_news"
- Previsto: l'agente chiama
list_table_idse restituisce i nomi delle tabelle, inclusofull.
- Previsto: l'agente chiama
- "Trova il numero di post all'anno in bigquery-public-data.hacker_news.full"
- Previsto: l'agente chiama
execute_sqlcon una query SQL e restituisce una tabella di anni e conteggi dei post.
- Previsto: l'agente chiama
- "Qual è stata la variazione percentuale dei post su base annua?"
- Previsto: l'agente chiama
execute_sqlcon una query SQL che calcola la variazione percentuale e restituisce i risultati.
- Previsto: l'agente chiama
7. Testa la persistenza della memoria
Sempre in Playground, insegna all'agente una preferenza:
- "Ricorda che il mio set di dati preferito è bigquery-public-data.hacker_news"
- "Quali tabelle contiene?"
Attendi qualche secondo affinché la memoria venga mantenuta (il callback _save_memory viene eseguito dopo la risposta dell'agente).
Ora avvia una nuova sessione facendo clic su Nuova sessione in Playground, poi chiedi:
- "Qual è il mio set di dati preferito?"
L'agente deve ricordare bigquery-public-data.hacker_news anche se si tratta di una sessione nuova di zecca senza cronologia delle conversazioni. Questo funziona perché:
_save_memoryviene mantenuto in ogni sessione nella Memory Bank tramitecallback_context.add_session_to_memory()PreloadMemoryToolrecupera i ricordi pertinenti prima di ogni chiamata LLM- Memory Bank abbina i contenuti in modo semantico, non solo in base alle parole chiave
8. Esplora Observability
Nella console Cloud, vai all'agente di cui è stato eseguito il deployment e fai clic sulla scheda Tracce.

Dovresti visualizzare una tabella delle sessioni che elenca le sessioni delle query di test eseguite nei passaggi precedenti. La tabella mostra le metriche di riepilogo per ogni sessione: durata media, chiamate del modello, chiamate degli strumenti, utilizzo dei token ed eventuali errori.
Fai clic su una sessione per ispezionare i dettagli della traccia, tra cui:
- Un grafo diretto aciclico (DAG) dei suoi span, che mostra la suddivisione passo passo del ragionamento dell'agente, delle chiamate di strumenti (query BigQuery) e delle latenze
- Input e output per ogni intervallo (attivati tramite la variabile di ambiente
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENTin.env) - Attributi dei metadati come ID intervallo, ID traccia e tempistica
Puoi anche passare alla visualizzazione intervallo (attiva/disattiva in alto) per visualizzare i singoli intervalli in tutte le sessioni.
Come funziona il tracciamento
Quando esegui il deployment con --otel_to_cloud, adk deploy crea un container che esegue il server API ADK con OpenTelemetry attivato. In Agent Runtime, il server inizializza una pipeline OpenTelemetry che:
- Crea un TracerProvider con un esportatore OTLP che invia gli span a
telemetry.googleapis.com - Registra gli intervalli dell'ADK per le esecuzioni degli agenti, le chiamate di modelli e le chiamate di strumenti e utilizza i tre pacchetti di strumentazione di
requirements.txtper aggiungere intervalli dalle librerie chiave (Gemini, httpx, gRPC) - Raggruppa ed esporta gli intervalli nell'API Telemetry, dove vengono letti dalla scheda Tracce
Il container di cui è stato eseguito il deployment include ADK e l'SDK e l'esportatore OpenTelemetry, ma non include i pacchetti di instrumentazione. Per questo motivo, l'elenco requirements.txt include tutti e tre. Senza, il server API ADK registra un avviso e ignora questi intervalli.
Risoluzione dei problemi
Se dopo qualche minuto non vengono visualizzate tracce:
- Verifica che l'API Telemetry sia abilitata: l'hai abilitata nel passaggio di configurazione. Verifica con:
gcloud services list --enabled --project=$(gcloud config get project) | grep telemetry - Controlla Cloud Logging per avvisi: vai a Logging > Esplora log e cerca
"proceeding without"o"GoogleGenAiSdkInstrumentor". Un avviso che indica uno strumento (GenAI, HTTPX o gRPC) significa che il pacchettoopentelemetry-instrumentation-*corrispondente non è presente inrequirements.txt. - Non aggiungere
google-cloud-aiplatformal tuorequirements.txt.adk deploylo aggiunge automaticamente; dichiararlo manualmente può causare conflitti tra i pacchetti OpenTelemetry e interrompere silenziosamente la strumentazione.
9. Elimina
Per evitare addebiti continui, elimina le risorse create durante questo codelab.
Elimina l'agente di cui è stato eseguito il deployment dalla pagina Deployment nella console Cloud. Seleziona l'agente e fai clic su Elimina.
Se hai creato un progetto specifico per questo codelab, puoi eliminare l'intero progetto:
gcloud projects delete <YOUR_PROJECT_ID>
(Facoltativo) Libera spazio nell'ambiente locale:
cd ~
rm -rf ~/adk-deploy-scale
10. Complimenti
Hai creato un agente data scientist stateful e ne hai eseguito il deployment in Agent Runtime.
Che cosa hai imparato
- Come creare un agente ADK con
BigQueryToolsetper l'accesso ai dati reali - Come attivare la memoria persistente con Memory Bank utilizzando
PreloadMemoryTooleafter_agent_callback - Come concedere le autorizzazioni IAM per il service account dell'agente di cui è stato eseguito il deployment
- Come eseguire il deployment in Agent Runtime e attivare l'osservabilità con Cloud Trace
Passaggi successivi
- Esegui query sui tuoi set di dati BigQuery privati concedendo all'agente di servizio Agent Runtime l'accesso ai tuoi dati.
- Aggiungi Esegui il codice per eseguire l'analisi Python in una sandbox sicura
- Configura le dashboard di osservabilità di Cloud Trace per monitorare l'agente in produzione
- Pubblica i risultati su Google Workspace utilizzando gli strumenti MCP