1. Présentation
Dans cet atelier de programmation, vous allez créer un agent de science des données qui interroge des données réelles provenant d'ensembles de données publics BigQuery et mémorise vos préférences d'une session à l'autre. Vous le déploierez ensuite dans Agent Runtime, un service Google Cloud entièrement géré qui gère l'infrastructure, le scaling et la gestion des sessions.
L'agent utilise trois capacités fondamentales qui s'activent progressivement :
- Ensemble d'outils BigQuery : l'agent explore les schémas et exécute des requêtes SQL sur de véritables ensembles de données BigQuery. Cela fonctionne à la fois en local et lors du déploiement.
- Memory Bank : une fois déployé, l'agent se souvient des préférences et du contexte de l'utilisateur lors des sessions déconnectées.
- Observabilité : Cloud Trace capture les étapes de raisonnement, les appels d'outils et les latences de l'agent via l'instrumentation OpenTelemetry.
Points abordés
- Créer un agent ADK avec
BigQueryToolsetpour l'accès aux données réelles - Configurer Memory Bank pour la persistance inter-session
- Déployer votre agent dans Agent Runtime avec
adk deploy - Accorder des autorisations IAM au compte de service de l'agent déployé
- Tester la persistance et l'observabilité de la mémoire
Prérequis
- Un projet Google Cloud avec facturation activée
- Un navigateur Web (par exemple, Chrome)
- Si vous exécutez le code sur votre propre machine au lieu de Cloud Shell : le Google Cloud SDK (CLI
gcloud), uv (gestionnaire de paquets Python) et Python 3.12+ (installé automatiquement paruvsi nécessaire)
ADK (Agent Development Kit) est le framework de Google permettant de créer des agents IA. Cet atelier de programmation utilise ADK pour créer un agent et le déployer sur Agent Runtime.
Cet atelier de programmation s'adresse aux développeurs intermédiaires qui connaissent déjà Python et Google Cloud.
Cet atelier de programmation prend environ 35 minutes (dont 5 à 10 minutes pour le déploiement).
Les ressources créées dans cet atelier de programmation devraient coûter moins de 5 $.
2. Configurer votre environnement
Créer un projet Google Cloud
- Dans la console Google Cloud, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
- Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
Définir votre projet
Ouvrez l'éditeur Cloud Shell dans le projet GCP que vous avez créé.
Créez ensuite un terminal > Nouveau terminal, puis exécutez la commande suivante pour définir votre projet. Les commandes ultérieures lisent l'ID du projet à partir de ce paramètre.
gcloud config set project <INSERT_YOUR_GCP_PROJECT_HERE>
Activer les API
Dans le terminal, exécutez la commande suivante.
gcloud services enable \
aiplatform.googleapis.com \
bigquery.googleapis.com \
telemetry.googleapis.com \
--project=$(gcloud config get project)
aiplatform.googleapis.com: héberge votre agent sur Agent Runtime, y compris les sessions Gemini Enterprise et la Memory Bank, et sert le modèle Gemini- API BigQuery (
bigquery.googleapis.com) : requêtes SQL sur des ensembles de données publics et privés - API Telemetry (
telemetry.googleapis.com) : traces OpenTelemetry pour l'observabilité des agents
Installer ADK
Dans le terminal, exécutez les commandes suivantes pour créer un dossier pour cet atelier de programmation et installer ADK et ses dépendances :
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 crée un environnement Python isolé pour cet atelier de programmation. Vous n'avez donc rien à activer. Faites précéder les commandes Python de uv run.
Le package google-adk inclut l'outil CLI adk que vous utiliserez pour tester et déployer l'agent. adk deploy utilise google-cloud-aiplatform pour créer votre agent sur Agent Runtime, et google-cloud-bigquery est la bibliothèque cliente derrière les outils BigQuery de l'ADK.
3. Créer l'agent
Dans le dossier ~/adk-deploy-scale, créez le répertoire de l'agent. Exécutez toutes les commandes ultérieures à partir de ~/adk-deploy-scale (le parent de data_science_agent/) :
mkdir data_science_agent
Exécutez ensuite la commande suivante pour créer data_science_agent/.env avec votre projet, la région dans laquelle vous allez déployer l'agent et les paramètres de l'agent déployé. adk deploy lit ce fichier. Par conséquent, ces paramètres fonctionnent toujours si vous ouvrez un nouveau terminal.
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_PROJECTetGOOGLE_CLOUD_LOCATION: ID de votre projet (renseigné à partir degcloud) et région dans laquelle l'agent s'exécuteGOOGLE_GENAI_USE_ENTERPRISE: a appelé Gemini via l'ADK dans votre projet Google CloudOTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT: enregistre les entrées de requête complètes et les réponses de l'agent, ce qui est utile pour le débogage.
La structure finale de votre répertoire doit ressembler à ce qui suit :
adk-deploy-scale/
data_science_agent/
.env
__init__.py
agent.py
requirements.txt # created in the Deploy step
Vous allez créer __init__.py et agent.py maintenant, puis ajouter requirements.txt à l'étape de déploiement.
Créez data_science_agent/__init__.py. Ce fichier est nécessaire pour qu'ADK puisse découvrir et charger votre agent :
from . import agent # noqa: F401 — required by `adk eval` and `adk web`
Créez data_science_agent/agent.py :
Cet agent se connecte à BigQuery pour l'extraction de données et conserve les sessions dans Memory Bank.
La mémoire s'active automatiquement lors du déploiement. Agent Runtime définit la variable d'environnement GOOGLE_CLOUD_AGENT_ENGINE_ID, qui est absente lors de l'exécution en local.
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,
)
Examinons ce que fait ce code :
- BigQueryToolset fournit à l'agent des outils tels que
execute_sql,list_table_idsetget_table_info. Il peut explorer les schémas et interroger n'importe quel ensemble de données auquel l'appelant a accès. - PreloadMemoryTool récupère automatiquement les souvenirs pertinents avant chaque appel LLM en recherchant dans la Memory Bank du contenu lié au message de l'utilisateur. Le rappel
_save_memoryconserve la session dans Memory Bank après chaque exécution de l'agent, ce qui permet à l'agent de se souvenir du contexte lors des prochaines sessions. - App encapsule l'agent racine dans une application déployable qu'Agent Runtime peut diffuser. Le
namedoit correspondre au nom du répertoire (data_science_agent).adk webl'utilise pour localiser et charger l'agent. - L'instruction indique à l'agent d'utiliser le projet de facturation pour les requêtes SQL et de mémoriser les préférences de l'utilisateur.
- Gemini avec
client_kwargs={"location": "global"}envoie des appels de modèle au point de terminaison mondial, oùgemini-3.8-flashest disponible. L'agent lui-même s'exécute dansus-central1.adk deploydéfinitGOOGLE_CLOUD_LOCATIONsur l'agent déployé sur la région dans laquelle vous effectuez le déploiement. L'emplacement du modèle est donc défini dans le code.
4. Déployer dans Agent Runtime
Créez un fichier requirements.txt dans le répertoire 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-adketgoogle-genai: ADK et le client Geminigoogle-auth: authentification Google Cloudgoogle-cloud-bigquery: bibliothèque cliente BigQuery utilisée parBigQueryToolset. L'ADK ne l'installe pas par défaut.python-dotenv: charge le fichier.envau démarrage.- Les trois packages
opentelemetry-instrumentation-*activent les fonctionnalités d'observabilité que vous explorerez plus tard. Ils instrumentent les appels de modèles Gemini et la communication gRPC/HTTP interne afin que les traces apparaissent dans l'onglet Traces de votre agent.
adk deploy lit également le fichier data_science_agent/.env que vous avez créé précédemment et définit ses paramètres sur l'agent déployé.
Déployez l'agent. Le dernier argument data_science_agent est le répertoire contenant le code de votre agent :
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
Au début, le résultat affiche deux lignes jaunes, Ignoring GOOGLE_CLOUD_PROJECT in .env ... et Ignoring GOOGLE_CLOUD_LOCATION in .env .... Elles sont attendues : les options --project et --region sont prioritaires sur les mêmes valeurs dans .env.
Option | Objectif |
| Projet et région Google Cloud cibles |
| Nom lisible affiché dans la console Cloud |
| Exporte les traces et les journaux OpenTelemetry vers Google Cloud, et active la télémétrie ( |
Lorsque vous déployez des capacités sur Agent Runtime, deux d'entre elles s'activent automatiquement :
- Memory Bank :
adk deployconnecte l'agent aux sessions et à Memory Bank sur son instance Agent Runtime.PreloadMemoryToollit les données de la Memory Bank et_save_memoryconserve automatiquement les sessions. - Observabilité : Cloud Trace capture les étapes de raisonnement, les appels d'outils et les latences de l'agent.
5. Accorder des autorisations BigQuery
Vous devez accorder à BigQuery l'accès à l'agent de service Agent Runtime (agent de service AI Platform Reasoning Engine). Une fois déployé, l'agent s'exécute en tant que compte de service géré par Google (et non avec vos identifiants personnels). Il a donc besoin d'autorisations explicites pour exécuter des requêtes 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"
Chaque commande affiche Updated IAM policy for project [...] lorsqu'elle est exécutée avec succès.
6. Tester l'agent déployé
Ouvrez la page Déploiements dans la console Google Cloud. Cliquez sur l'agent déployé, puis sur l'onglet Playground.
Testez les capacités de BigQuery :
- "List the tables in bigquery-public-data.hacker_news"
- Résultat attendu : l'agent appelle
list_table_idset renvoie les noms de tables, y comprisfull.
- Résultat attendu : l'agent appelle
- "Trouve le nombre de posts par an dans bigquery-public-data.hacker_news.full"
- Résultat attendu : l'agent appelle
execute_sqlavec une requête SQL et renvoie un tableau des années et du nombre de posts.
- Résultat attendu : l'agent appelle
- "Quel a été le pourcentage de variation des posts d'une année sur l'autre ?"
- Attendu : l'agent appelle
execute_sqlavec une requête SQL qui calcule la variation en pourcentage et renvoie les résultats.
- Attendu : l'agent appelle
7. Tester la persistance de la mémoire
Toujours dans le Playground, enseignez une préférence à l'agent :
- "Mémorise que mon ensemble de données préféré est bigquery-public-data.hacker_news"
- "Quelles tables contient-il ?"
Attendez quelques secondes que la mémoire persiste (le rappel _save_memory s'exécute après la réponse de l'agent).
Démarrez une nouvelle session en cliquant sur New Session (Nouvelle session) dans l'atelier, puis posez la question suivante :
- "Quel est mon ensemble de données préféré ?"
L'agent doit se souvenir de bigquery-public-data.hacker_news, même s'il s'agit d'une toute nouvelle session sans historique de conversation. Voici pourquoi :
_save_memoryest conservé dans Memory Bank à chaque session viacallback_context.add_session_to_memory().PreloadMemoryToolrécupère les souvenirs pertinents avant chaque appel LLM.- Memory Bank met en correspondance le contenu de manière sémantique, et pas seulement par mot clé.
8. Découvrir Observability
Dans la console Cloud, accédez à l'agent déployé, puis cliquez sur l'onglet Traces.

Un tableau des sessions doit s'afficher, listant les sessions des requêtes de test que vous avez exécutées lors des étapes précédentes. Le tableau affiche des métriques récapitulatives pour chaque session : durée moyenne, appels de modèles, appels d'outils, utilisation de jetons et éventuelles erreurs.
Cliquez sur une session pour inspecter les détails de la trace, y compris :
- Un graphe orienté acyclique (DAG) de ses spans, qui montre la répartition étape par étape du raisonnement de l'agent, des appels d'outils (requêtes BigQuery) et des latences
- Entrées et sorties pour chaque portée (activées via la variable d'environnement
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENTdans.env) - Attributs de métadonnées tels que les ID de span et de trace, et le timing
Vous pouvez également passer à la vue "Span" (en haut de l'écran) pour afficher les spans individuels de toutes les sessions.
Fonctionnement du traçage
Lorsque vous effectuez un déploiement avec --otel_to_cloud, adk deploy crée un conteneur qui exécute le serveur d'API ADK avec OpenTelemetry activé. Sur Agent Runtime, le serveur initialise un pipeline OpenTelemetry qui :
- Crée un TracerProvider avec un exportateur OTLP qui envoie des spans à
telemetry.googleapis.com - Enregistre les propres spans de l'ADK pour les exécutions d'agents, les appels de modèles et les appels d'outils, et utilise les trois packages d'instrumentation de votre
requirements.txtpour ajouter des spans à partir des bibliothèques clés (Gemini, httpx, gRPC) - Regroupe et exporte les spans vers l'API Telemetry, où l'onglet "Traces" les lit.
Le conteneur déployé inclut ADK ainsi que le SDK et l'exportateur OpenTelemetry, mais n'inclut pas les packages d'instrumentation. C'est pourquoi votre requirements.txt les liste toutes les trois. Sans ces informations, le serveur d'API ADK consigne un avertissement et ignore ces portées.
Dépannage
Si aucune trace ne s'affiche après quelques minutes :
- Vérifiez que l'API Telemetry est activée : vous l'avez activée lors de l'étape de configuration. Valider avec :
gcloud services list --enabled --project=$(gcloud config get project) | grep telemetry - Recherchez les avertissements dans Cloud Logging : accédez à Logging > Explorateur de journaux et recherchez
"proceeding without"ou"GoogleGenAiSdkInstrumentor". Un avertissement mentionnant une instrumentation (GenAI, HTTPX ou gRPC) signifie que le packageopentelemetry-instrumentation-*correspondant est manquant dans votrerequirements.txt. - N'ajoutez pas
google-cloud-aiplatformà votrerequirements.txt.adk deployl'ajoute automatiquement. Si vous le déclarez vous-même, cela peut entraîner des conflits de packages OpenTelemetry et interrompre l'instrumentation sans que vous le sachiez.
9. Effectuer un nettoyage
Pour éviter que des frais ne vous soient facturés en continu, supprimez les ressources créées lors de cet atelier de programmation.
Supprimez l'agent déployé de la page Déploiements de la console Cloud. Sélectionnez votre agent, puis cliquez sur Supprimer.
Si vous avez créé un projet spécifiquement pour cet atelier de programmation, vous pouvez le supprimer entièrement :
gcloud projects delete <YOUR_PROJECT_ID>
(Facultatif) Nettoyez votre environnement local :
cd ~
rm -rf ~/adk-deploy-scale
10. Félicitations
Vous avez créé un agent data science avec état et l'avez déployé sur Agent Runtime.
Connaissances acquises
- Créer un agent ADK avec
BigQueryToolsetpour l'accès aux données réelles - Activer la mémoire persistante avec Memory Bank à l'aide de
PreloadMemoryTooletafter_agent_callback - Accorder des autorisations IAM au compte de service de l'agent déployé
- Déployer sur Agent Runtime et activer l'observabilité avec Cloud Trace
Étapes suivantes
- Interrogez vos propres ensembles de données BigQuery privés en accordant à l'agent de service Agent Runtime l'accès à vos données.
- Ajoutez Exécution de code pour exécuter l'analyse Python dans un bac à sable sécurisé.
- Configurer des tableaux de bord Cloud Trace Observability pour surveiller votre agent en production
- Publier les résultats dans Google Workspace à l'aide des outils MCP