Préparer le déploiement
Ce que le SDK installé propose
Le lab utilise le SDK installé, google-cloud-aiplatform 1.165.1, module vertexai :
import vertexai
from vertexai.agent_engines import AdkApp
client = vertexai.Client(project=PROJET, location=REGION)
distant = client.agent_engines.create(agent=AdkApp(agent=root_agent, app_name="assistant_it"),
config=configuration(bucket))AdkApp est un modèle d'application (template) qui sait faire tourner un agent ADK : en local, il utilise des services en mémoire ; une fois déployé sur Agent Engine, il utilise par défaut VertexAiSessionService et VertexAiMemoryBankService, rattachés à la ressource créée. Notre agent n'a donc rien à changer.
Une configuration sobre
def configuration(bucket: str) -> dict:
"""Configuration Agent Engine sobre : 1 instance au plus, 1 vCPU, 1 Gio, 0 au repos."""
return {
"display_name": f"lab-{SLUG}",
"description": "Lab formation : assistant IT avec Memory Bank (à supprimer).",
"labels": LABELS, # formation-lab=agent-engine-memory-bank
"staging_bucket": bucket,
"requirements": ["google-cloud-aiplatform[agent_engines,adk]==1.165.1",
"google-adk==2.10.0"],
"extra_packages": ["agent_memoire.py"], # le module de l'agent, envoyé tel quel
"env_vars": {"MODEL": os.environ.get("MODEL", "gemini-2.5-flash")},
"min_instances": 0, "max_instances": 1,
"resource_limits": {"cpu": "1", "memory": "1Gi"},
"context_spec": {"memory_bank_config": {
"ttl_config": {"default_ttl": f"{30 * 24 * 3600}s"}, # oubli automatique : 30 jours
}},
}| Paramètre | Valeur du lab | Valeur par défaut documentée | Pourquoi |
|---|---|---|---|
min_instances | 0 | 1 | aucune instance gardée au repos |
max_instances | 1 | 100 | un lab n'a pas besoin de monter en charge ; plafonne le coût |
resource_limits | 1 vCPU, 1 Gio | 4 vCPU, 4 Gio | l'agent attend surtout le modèle : peu de calcul local |
requirements | versions figées | — | le conteneur distant doit avoir les mêmes versions que vos tests |
extra_packages | agent_memoire.py | — | l'agent est sérialisé ; son module doit être présent à distance |
labels | formation-lab=... | — | retrouver et supprimer ce que le lab a créé |
ttl_config.default_ttl | 30 jours | aucun TTL | un souvenir non mis à jour disparaît seul |
Pourquoi figer les versions dans requirements (google-adk==2.10.0) ?
L'objet agent est sérialisé (cloudpickle) avec votre version d'ADK, puis rechargé dans le conteneur. Une autre version d'ADK à distance peut casser ce rechargement ou changer le comportement testé en local.
Memory Bank : ce qui se configure
flowchart LR C["context_spec.memory_bank_config"] --> T["ttl_config : durée de conservation"] C --> GC["generation_config : modèle qui extrait les faits"] C --> SS["similarity_search_config : modèle d'embeddings"] C --> CU["customization_configs : thèmes à retenir"]
Le lab ne règle que le TTL (time to live, durée de vie) : par défaut, Memory Bank garde les souvenirs sans limite, ce qui pose une question de minimisation des données (ne conserver que ce qui est nécessaire, aussi longtemps que nécessaire). Les autres réglages gardent leurs valeurs par défaut : un modèle Gemini pour extraire les faits et un modèle d'embeddings (text-embedding-005 par défaut selon la documentation) pour la recherche.
Nettoyable, même en cas d'échec
def main():
...
bucket = creer_bucket() # lab-agent-engine-memory-bank-<6 hex>, étiqueté
ETAT.write_text(json.dumps({"bucket": bucket})) # noté AVANT : nettoyable même si échec
distant = client.agent_engines.create(...)
ETAT.write_text(json.dumps({"bucket": bucket, "agent_engine": distant.api_resource.name}))Et nettoyer.py ne se fie pas seulement à ce fichier : il recherche aussi les Agent Engines dont le nom affiché commence par lab-agent-engine-memory-bank et les buckets portant le label du lab.
Le déploiement échoue au bout de 8 minutes (erreur de dépendance). Qu'est-ce qui a déjà été créé ?
Le bucket est créé et rempli avant la construction du conteneur. C'est pour cela que deployer.py note le bucket avant d'appeler create(), et que nettoyer.py cherche aussi par nom et par label.
Exercice : choisir ce que Memory Bank retient
Vous voulez que Memory Bank ne retienne que le site, l'équipement et les préférences de contact, jamais le contenu des incidents. Où le régler ?
Voir la solution
Dans context_spec.memory_bank_config.customization_configs : on y décrit des thèmes de mémoire (memory topics), prédéfinis ou personnalisés, que Memory Bank doit extraire. Par exemple un thème personnalisé « environnement de travail : site, équipement » et le thème prédéfini des préférences utilisateur. Ce qui ne correspond à aucun thème n'est pas retenu.
Voir la page « Set up Memory Bank » citée en références pour la syntaxe exacte de votre version de SDK ; ajoutez ensuite un test qui vérifie la présence de ces thèmes dans configuration(), comme pour le TTL.
Résultat obtenu
Déploiement réel le 2026-10-15 (python deployer.py, projet de test, europe-west1) : un peu moins de 5 minutes entre le lancement et la fin, puis contenu du bucket de staging pendant la construction.
The following requirements are missing: {'cloudpickle', 'pydantic'}
Bucket de staging : gs://lab-agent-engine-memory-bank-13550c
Agent Engine déployé : projects/<numéro-projet>/locations/europe-west1/reasoningEngines/2373526745996328960
$ gcloud storage ls gs://lab-agent-engine-memory-bank-13550c/ --recursive
gs://lab-agent-engine-memory-bank-13550c/agent_engine/agent_engine.pkl
gs://lab-agent-engine-memory-bank-13550c/agent_engine/dependencies.tar.gz
gs://lab-agent-engine-memory-bank-13550c/agent_engine/requirements.txtL'avertissement sur cloudpickle et pydantic signale des dépendances non listées dans requirements ; le déploiement a réussi et l'agent a répondu normalement. Pour un déploiement de production, ajoutez-les explicitement avec des versions figées.
Je sais faire
- Emballer un agent ADK dans
AdkAppet le déployer avecclient.agent_engines.create - Écrire une configuration Agent Engine sobre (instances, CPU, mémoire, labels)
- Configurer la durée de conservation des souvenirs dans Memory Bank
- Rendre un déploiement nettoyable même s'il échoue