<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: TechTown</title>
    <description>The latest articles on DEV Community by TechTown (@techtown-fr).</description>
    <link>https://dev.to/techtown-fr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F12453%2F5ee5dead-26ed-49a6-9f18-deabc299ff06.png</url>
      <title>DEV Community: TechTown</title>
      <link>https://dev.to/techtown-fr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/techtown-fr"/>
    <language>en</language>
    <item>
      <title>Agents CLI : l'outil de Google pour piloter vos agents IA de bout en bout</title>
      <dc:creator>Benjamin Bourgeois</dc:creator>
      <pubDate>Mon, 04 May 2026 07:08:32 +0000</pubDate>
      <link>https://dev.to/techtown-fr/agents-cli-loutil-de-google-pour-piloter-vos-agents-ia-de-bout-en-bout-ibf</link>
      <guid>https://dev.to/techtown-fr/agents-cli-loutil-de-google-pour-piloter-vos-agents-ia-de-bout-en-bout-ibf</guid>
      <description>&lt;p&gt;Construire un agent IA est devenu accessible avec des frameworks agentiques comme &lt;a href="https://bbourgeois.dev/posts/2025/adk-core-concept/" rel="noopener noreferrer"&gt;Agent Development Kit (ADK)&lt;/a&gt; de Google. En revanche, tout ce qui l'entoure (l'évaluation, l'infrastructure, le déploiement, la publication) reste encore un processus artisanal, pas industrialisé. C'est précisément le problème que Google cherche à résoudre avec &lt;strong&gt;Agents CLI&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; : Agents CLI est un outil officiel Google qui orchestre l'ensemble du cycle de vie d'un agent ADK : création, test, évaluation, déploiement et publication. Il est conçu pour fonctionner aussi bien en terminal qu'en mode agent (Gemini CLI, Claude Code, Cursor).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🤖 Qu'est-ce qu'Agents CLI ?
&lt;/h2&gt;

&lt;p&gt;Agents CLI est l'outillage officiel de Google pour le cycle de développement des agents construits avec &lt;a href="https://google.github.io/adk-docs/" rel="noopener noreferrer"&gt;Agent Development Kit (ADK)&lt;/a&gt;. L'idée centrale : vous ne devriez pas avoir à reconstruire l'outillage de zéro à chaque projet. L'outil injecte sept "skills" directement dans votre environnement de développement (ou dans votre assistant IA) pour couvrir chaque étape, du scaffolding initial jusqu'au déploiement en production.&lt;/p&gt;

&lt;p&gt;Il fonctionne en deux modes complémentaires :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Human mode&lt;/strong&gt; : vous tapez les commandes directement dans votre terminal, comme n'importe quel CLI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent mode&lt;/strong&gt; : votre assistant IA (Gemini CLI, Claude Code, Cursor…) exécute les commandes de façon autonome&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ce deuxième mode est le pari le plus intéressant de l'outil. Agents CLI expose des skills structurées pour que les agents puissent comprendre le contexte de votre projet sans se noyer dans la documentation. Moins de context overhead, plus d'autonomie réelle.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4b4577476r7sw8tq8ln0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4b4577476r7sw8tq8ln0.png" alt="Les 10 étapes du cycle de développement agentique automatisé avec Agents CLI, de la définition du persona jusqu'au CI/CD en production" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💻 Installation et prérequis
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Prérequis&lt;/strong&gt; : Python 3, Node.js et &lt;code&gt;uv&lt;/code&gt; (le gestionnaire de packages Python rapide).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Installer et configurer Agents CLI&lt;/span&gt;
uvx google-agents-cli setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;L'authentification se fait automatiquement via vos credentials &lt;code&gt;gcloud&lt;/code&gt;. Si vous travaillez sans projet GCP, une variable d'environnement &lt;code&gt;GEMINI_API_KEY&lt;/code&gt; suffit pour démarrer en local.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔄 Le cycle de vie en commandes
&lt;/h2&gt;

&lt;p&gt;Voici le flow complet, de la création à la mise en production :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Scaffolding du projet&lt;/span&gt;
agents-cli create mon-agent &lt;span class="nt"&gt;--deployment-target&lt;/span&gt; agent_runtime

&lt;span class="c"&gt;# 2. Installer les dépendances&lt;/span&gt;
agents-cli &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# 3. Lancer le playground local (interface web de test)&lt;/span&gt;
agents-cli playground

&lt;span class="c"&gt;# 4. Évaluer les performances de l'agent&lt;/span&gt;
agents-cli &lt;span class="nb"&gt;eval &lt;/span&gt;run

&lt;span class="c"&gt;# 5. Comparer deux runs d'évaluation&lt;/span&gt;
agents-cli &lt;span class="nb"&gt;eval &lt;/span&gt;compare run1.json run2.json

&lt;span class="c"&gt;# 6. Provisionner l'infrastructure GCP (IaC automatisé)&lt;/span&gt;
agents-cli infra single-project

&lt;span class="c"&gt;# 7. Déployer sur Cloud Run ou Agent Runtime&lt;/span&gt;
agents-cli deploy

&lt;span class="c"&gt;# 8. Publier dans Gemini Enterprise&lt;/span&gt;
agents-cli publish gemini-enterprise
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On note la cohérence du flow : chaque commande s'enchaîne naturellement dans la continuité de la précédente, sans jongler entre plusieurs outils ou consoles GCP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7tit5tjeckkb9eivgd5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7tit5tjeckkb9eivgd5.png" alt="Interface du playground ADK : conversation avec l'agent logistician qui route la demande via transfer_to_agent avant de répondre" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Un exemple concret : agent de support client multi-agents
&lt;/h2&gt;

&lt;p&gt;Pour illustrer ce qu'Agents CLI permet de mettre en production rapidement, voici la structure d'un système multi-agents de support client. Deux agents spécialisés, chacun avec un rôle précis :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LlmAgent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FunctionTool&lt;/span&gt;

&lt;span class="c1"&gt;# Agent de tri : classe l'intention et route vers le bon spécialiste
&lt;/span&gt;&lt;span class="n"&gt;concierge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LlmAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;concierge&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-2.0-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analyse la demande entrante et route vers l&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;agent approprié.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;FunctionTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;route_to_specialist&lt;/span&gt;&lt;span class="p"&gt;)],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Agent logistique : gère commandes et stocks
&lt;/span&gt;&lt;span class="n"&gt;logistician&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LlmAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;logistician&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-2.0-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Réponds aux questions sur les commandes, livraisons et inventaires.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;FunctionTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;get_order_status&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nc"&gt;FunctionTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;check_inventory&lt;/span&gt;&lt;span class="p"&gt;)],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agents CLI prend ensuite en charge la containerisation, le push vers Artifact Registry et la configuration IAM. Vous restez concentré sur la logique métier.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 Les avantages et les améliorations d'Agents CLI
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Les points forts :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Un seul outil&lt;/strong&gt; pour tout le cycle de vie, fini les scripts de déploiement maison&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Playground intégré&lt;/strong&gt; : une interface web locale pour tester sans infrastructure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Évaluation native&lt;/strong&gt; : &lt;code&gt;eval run&lt;/code&gt; et &lt;code&gt;eval compare&lt;/code&gt; donnent une vraie mesure de la qualité&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pensé pour les agents&lt;/strong&gt; : les skills réduisent le context overhead de Gemini CLI, Claude Code, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IaC automatisé&lt;/strong&gt; : l'infra GCP se provisionne sans toucher à Terraform ou à la console&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Les limites à connaître :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pas de support Windows natif&lt;/strong&gt; : WSL 2 obligatoire&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Couplé à GCP&lt;/strong&gt; : déploiement impossible sans projet Google Cloud avec facturation activée&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encore en preview&lt;/strong&gt; : l'API des commandes peut évoluer, à éviter sur des projets critiques en prod&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Abstraction opaque&lt;/strong&gt; : si &lt;code&gt;infra&lt;/code&gt; ou &lt;code&gt;deploy&lt;/code&gt; plante, le debugging peut être difficile sans connaître les couches sous-jacentes (Cloud Run, IAM, Artifact Registry)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🤝 À retenir
&lt;/h2&gt;

&lt;p&gt;Agents CLI répond à un vrai manque : un cycle de développement unifié pour les agents ADK, de la création au déploiement sur Google Cloud. Pour les équipes qui gèrent plusieurs agents, c'est une standardisation bienvenue. Pour les profils solo, c'est surtout du temps récupéré sur tout ce qui n'est pas de la logique métier.&lt;/p&gt;

&lt;p&gt;L'outil étant encore en preview, c'est le bon moment pour l'expérimenter sur un projet non-critique et se positionner avant que ça devienne le standard de facto sur GCP. Si vous avez déjà des agents ADK qui tournent, la migration vers ce workflow devrait être naturelle.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://google.github.io/agents-cli/" rel="noopener noreferrer"&gt;Documentation officielle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/google/agents-cli" rel="noopener noreferrer"&gt;Dépôt GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>adk</category>
      <category>gcp</category>
      <category>agents</category>
    </item>
    <item>
      <title>🤖 Comment structurer la mémoire de vos agents avec Google ADK</title>
      <dc:creator>Benjamin Bourgeois</dc:creator>
      <pubDate>Fri, 03 Apr 2026 13:09:58 +0000</pubDate>
      <link>https://dev.to/techtown-fr/comment-structurer-la-memoire-de-vos-agents-avec-google-adk-2o58</link>
      <guid>https://dev.to/techtown-fr/comment-structurer-la-memoire-de-vos-agents-avec-google-adk-2o58</guid>
      <description>&lt;p&gt;Le plus gros défi avec les LLMs, c'est qu'ils sont fondamentalement « stateless ». Sans une couche de gestion de session et de mémoire, chaque requête est une page blanche. Pour un développeur, la difficulté est de savoir &lt;strong&gt;quoi stocker&lt;/strong&gt;, &lt;strong&gt;où le stocker&lt;/strong&gt; et &lt;strong&gt;combien de temps&lt;/strong&gt; le garder.&lt;/p&gt;

&lt;p&gt;Pour transformer un simple chatbot en un agent intelligent, il faut mettre en place une architecture de contexte. &lt;a href="https://google.github.io/adk-docs/" rel="noopener noreferrer"&gt;Agent Development Kit&lt;/a&gt; (ADK) de Google répond à ce besoin en structurant la persistance autour de trois piliers : la &lt;strong&gt;Session&lt;/strong&gt;, le &lt;strong&gt;State&lt;/strong&gt; et la &lt;strong&gt;Memory&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En maîtrisant ces concepts, vous permettez à votre agent d'apprendre de ses interactions et de devenir plus pertinent au fil du temps, tout en gérant intelligemment la fenêtre de contexte limitée des modèles.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗️ Architecture du contexte dans ADK
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🚦 Session, State et Memory
&lt;/h3&gt;

&lt;p&gt;Il est crucial de différencier ces trois piliers pour ne pas surcharger la mémoire de travail de l'agent :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;« &lt;strong&gt;Session&lt;/strong&gt; » : Le conteneur de la discussion actuelle (le « thread »). Elle contient la liste chronologique des événements.&lt;/li&gt;
&lt;li&gt;« &lt;strong&gt;State&lt;/strong&gt; » : Le « bloc-notes » temporaire. On y stocke des données de travail (ex: un panier d'achat) qui disparaissent ou s'archivent à la fin de la discussion.&lt;/li&gt;
&lt;li&gt;« &lt;strong&gt;Memory&lt;/strong&gt; » : La bibliothèque d'archives inter-sessions. Elle est consultable via une recherche sémantique pour ramener du contexte passé dans le présent.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧠 Mémoire court-terme vs long-terme
&lt;/h3&gt;

&lt;p&gt;Pour concevoir un agent performant, il faut séparer les flux comme le fait le cerveau humain :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Short-Term Memory (Sessions &amp;amp; State)&lt;/strong&gt; : Mémoire de travail active uniquement durant la conversation en cours . Elle sert à suivre la progression ou stocker des calculs intermédiaires. Une fois la session fermée, cette mémoire disparaît (ou est envoyée vers l'archivage).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-Term Memory (Memory Bank)&lt;/strong&gt; : Elle ne contient pas le texte brut, mais des faits consolidés (ex: « L'utilisateur préfère Python »). L'agent consulte cette archive au début de chaque nouvelle session pour ne pas repartir de zéro.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔄 SessionService : Garantir la continuité
&lt;/h3&gt;

&lt;p&gt;L'objet &lt;strong&gt;Session&lt;/strong&gt; est le composant fondamental du suivi. Sans lui, chaque interaction repartirait de zéro.&lt;/p&gt;

&lt;p&gt;Une session se définit par plusieurs propriétés clés :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identification&lt;/strong&gt; : Elle lie un identifiant unique (&lt;code&gt;id&lt;/code&gt;), un nom d'application (&lt;code&gt;app_name&lt;/code&gt;) et un identifiant utilisateur (&lt;code&gt;userId&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Historique&lt;/strong&gt; (&lt;code&gt;events&lt;/code&gt;) : Une séquence chronologique de tous les objets Event (messages utilisateur, réponses de l'agent, appels d'outils) survenue dans ce thread.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;État&lt;/strong&gt; (&lt;code&gt;state&lt;/code&gt;) : Un dictionnaire de données temporaires servant de « bloc-notes » à l'agent durant l'interaction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suivi d'activité&lt;/strong&gt; (&lt;code&gt;lastUpdateTime&lt;/code&gt;) : Un horodatage indiquant la dernière interaction dans la session.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F10q8tlghfqpf3109g77s.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F10q8tlghfqpf3109g77s.webp" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Le choix du service dépend de votre besoin de persistance et de contrôle :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Persistance&lt;/th&gt;
&lt;th&gt;Usage recommandé&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;InMemorySessionService&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Nulle&lt;/td&gt;
&lt;td&gt;Développement local et tests unitaires.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VertexAiSessionService&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Élevée&lt;/td&gt;
&lt;td&gt;Production managée sur Google Cloud.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DatabaseSessionService&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Élevée&lt;/td&gt;
&lt;td&gt;Contrôle total sur votre propre base (PostgreSQL, SQLite).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Le Rewind : Annuler et corriger&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Le Rewind permet de faire revenir une session à un état précédent via un &lt;code&gt;invocation_id&lt;/code&gt;. Cela restaure le &lt;strong&gt;State&lt;/strong&gt; tel qu'il était avant une erreur de l'agent, permettant de repartir sur une base saine sans perdre tout l'historique.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  📝 State : Le bloc-notes dynamique de l'agent
&lt;/h3&gt;

&lt;p&gt;Dans ADK, l'attribut state d'une session est un dictionnaire clé-valeur servant de mémoire de travail. Contrairement à l'historique complet des événements, il stocke des détails structurés nécessaires au tour de conversation actuel (ex: statut d'authentification, étape d'un formulaire).&lt;/p&gt;

&lt;h4&gt;
  
  
  💡 Gestion de la portée via les préfixes
&lt;/h4&gt;

&lt;p&gt;ADK utilise des &lt;strong&gt;préfixes&lt;/strong&gt; pour définir automatiquement la visibilité et la durée de vie des données:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Préfixe&lt;/th&gt;
&lt;th&gt;Portée (Scope)&lt;/th&gt;
&lt;th&gt;Persistance&lt;/th&gt;
&lt;th&gt;Cas d'usage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Aucun&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Session actuelle&lt;/td&gt;
&lt;td&gt;Liée au service de session&lt;/td&gt;
&lt;td&gt;Étape d'un tunnel d'achat.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;user:&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Identité utilisateur&lt;/td&gt;
&lt;td&gt;Partagée entre toutes ses sessions&lt;/td&gt;
&lt;td&gt;Préférences, nom.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;app:&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Application globale&lt;/td&gt;
&lt;td&gt;Partagée entre tous les utilisateurs&lt;/td&gt;
&lt;td&gt;Version API, code promo.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;temp:&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Invocation en cours&lt;/td&gt;
&lt;td&gt;Éphémère (effacée après la réponse)&lt;/td&gt;
&lt;td&gt;Calculs intermédiaires.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Exemple d'utilisation&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# The ADK automatically replaces {user:name} with the value found in state
&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;adk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LlmAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Greet the user by saying: Hello {user:name}!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Updating state within a tool safely
&lt;/span&gt;&lt;span class="nd"&gt;@adk.tool&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;set_preference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;adk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ToolContext&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user:fav_color&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="c1"&gt;# Captured and persisted automatically
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Preference saved.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧠 MemoryService : Choisir son moteur de connaissances
&lt;/h3&gt;

&lt;p&gt;Dans ADK, le &lt;strong&gt;MemoryService&lt;/strong&gt; est l'interface qui gère l'archivage et la récupération des connaissances à long terme. Sa mission est double : ingérer les informations pertinentes d'une session terminée (&lt;code&gt;add_session_to_memory&lt;/code&gt;) et permettre à l'agent de les retrouver via une recherche (&lt;code&gt;search_memory&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Il existe deux implémentations principales selon vos besoins en persistance et en intelligence :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Caractéristique&lt;/th&gt;
&lt;th&gt;InMemoryMemoryService&lt;/th&gt;
&lt;th&gt;VertexAiMemoryBankService&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Persistance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Nulle (perdue au redémarrage)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Élevée&lt;/strong&gt; (Managée par Vertex AI)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Extraction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stocke l'historique brut&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Intelligente&lt;/strong&gt; (extraite et consolidée par LLM)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Type de recherche&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mots-clés basiques&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Sémantique avancée&lt;/strong&gt; (Embeddings)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Usage idéal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Prototypage et tests rapides&lt;/td&gt;
&lt;td&gt;Production et apprentissage continu&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🚀 Le workflow complet&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Pour bien comprendre comment ces composants interagissent, voici le cycle de vie d'une information, de sa captation à sa réutilisation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Interaction&lt;/strong&gt; : L'utilisateur échange avec l'agent via une &lt;strong&gt;Session&lt;/strong&gt;. Chaque message et action est enregistré comme un &lt;strong&gt;Event&lt;/strong&gt;, et le &lt;strong&gt;State&lt;/strong&gt; gère les données de travail immédiates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Archivage&lt;/strong&gt; : Lorsqu'une session est jugée riche en informations, l'application appelle &lt;code&gt;add_session_to_memory(session)&lt;/code&gt;. Le système extrait les faits marquants de l'historique et les consolide dans le &lt;code&gt;MemoryService&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mémoire&lt;/strong&gt; : Dans une session future, l'agent utilise un outil dédié (&lt;code&gt;LoadMemoryTool&lt;/code&gt; ou &lt;code&gt;PreloadMemoryTool&lt;/code&gt;) s'il détecte un besoin de contexte passé.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recherche Sémantique&lt;/strong&gt; : L'outil interroge le service de mémoire (&lt;code&gt;search_memory&lt;/code&gt;). S'il s'agit de la Memory Bank, une recherche par similarité vectorielle est effectuée pour trouver les souvenirs les plus proches du sens de la requête.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restitution &amp;amp; Réponse&lt;/strong&gt; : Le service renvoie les souvenirs pertinents (&lt;code&gt;MemoryResult&lt;/code&gt;). L'agent les intègre alors dans ses instructions système pour formuler une réponse personnalisée et historiquement cohérente.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🤖 Vers une IA qui apprend vraiment
&lt;/h2&gt;

&lt;p&gt;En maîtrisant ce trio, &lt;strong&gt;Session&lt;/strong&gt;, &lt;strong&gt;State&lt;/strong&gt; et &lt;strong&gt;Memory&lt;/strong&gt;, vous sortez enfin du mode "stateless" des LLM. Cette architecture, propulsée par ADK et Google Cloud, garantit que vos agents ne se contentent pas de répondre, mais s'adaptent et valorisent chaque interaction sur le long terme.&lt;/p&gt;

</description>
      <category>adk</category>
      <category>googlecloud</category>
      <category>vertexai</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
