Créer un agent de voyage simple avec ADK et Gemini CLI

1. Introduction

9344c1d1a9f221b7.png

Dernière mise à jour : 22/06/2026

Créer un agent de voyage simple avec ADK

Bienvenue dans cet atelier sur l'ADK Python(*), qui inclut tout ce dont vous avez besoin grâce à Gemini CLI !

Cet atelier de programmation est divisé en deux 🏅 étapes :

  1. Un parcours d'apprentissage simple et courant : configuration + gratification instantanée.
  2. Un parcours personnalisé où vous choisissez une quête à résoudre avec l'aide de Gemini CLI

La deuxième partie fait de cet atelier de programmation l'événement idéal pour un hackathon (avec des prix pour les solutions les plus créatives !).

Étape 1 : Votre premier agent avec ADK et Gemini CLI

L'objectif de cette étape est de créer un agent de voyage simple avec ADK, étape par étape. Pour ce faire, nous allons d'abord configurer Gemini CLI afin qu'il nous aide à coder avec l'ADK. Votre shell local pourra ainsi sélectionner la dernière version de l'ADK Python, ingérer le code et la documentation, et fournir le code le plus récent et le plus adapté pour atteindre votre objectif.

Il s'agit d'une partie guidée dans laquelle nous créons une application entièrement fonctionnelle par petites étapes simples. Cela prend généralement environ une heure (plus le temps d'installation).

Étape 2 : Étendre votre agent

Ensuite, nous vous proposons une dizaine d'options (de difficulté variable) pour étendre l'application à votre guise. Cela vous permet d'explorer différents aspects (UI, Ops, interactions complexes avec l'agent, etc.).

Objectifs de l'atelier

Dans cet atelier de programmation, vous allez créer une application d'agent de voyage à l'aide d'ADK et de Gemini CLI. Cette application pourra :

  • Se connecter aux API Airbnb via Airbnb MCP.
  • Rechercher des informations à jour sur Internet (météo, dates, etc.)
  • Exécuter des outils personnalisés
  • Créez des images des appartements/chambres à l'aide de NanoBanana.

La CLI Gemini vous guidera tout au long de ce processus : écriture/examen du code et recherche de la documentation la plus récente dans un miroir local du dépôt ADK (en Python ou dans votre langage préféré).

Points abordés

  • Créer une application avec ADK
  • Comment utiliser Gemini CLI pour coder des applications à partir de documents locaux !
  • Interagir avec un serveur MCP pour se connecter à des sources de données externes en temps réel, comme ceci :

Prérequis

  • Un ordinateur qui vous permet d'installer des packages (par exemple, npm install ..)
  • Compétences de base en codage en Python, TypeScript, Go ou Java.
  • Nous vous recommandons vivement d'utiliser un IDE (Antigravity, VS Code, IntelliJ, vim).

Pourquoi utiliser ADK et Gemini CLI ?

Certains d'entre vous se demandent peut-être : pourquoi utiliser l'ADK (un SDK de création d'agents) en conjonction avec un assistant de code agentif local (comme Gemini CLI) ? En effet, ces deux outils sont incroyablement puissants, mais leur interaction n'est pas simple. De nombreuses personnes ont essayé de les utiliser conjointement et ont échoué (principalement en raison de problèmes de "boucle dans une boucle"). Cet atelier de programmation vous propose quelques conseils pour rendre cette coexistence possible.

2. Configuration

Choisissez l'une des options suivantes : Configuration de l'environnement à votre rythme si vous souhaitez exécuter cet atelier de programmation sur votre propre ordinateur, ou Démarrer Cloud Shell si vous souhaitez l'exécuter entièrement dans le cloud.

Configuration de l'environnement au rythme de chacun

  1. Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)

295004821bab6a87.png37d264871000675d.png96d86d3d5655cdbe.png

  • Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères qui n'est pas utilisée par les API Google. Vous pourrez toujours la modifier.
  • L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet.
  • Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.

Démarrer Cloud Shell

Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.

Dans la console Google Cloud, cliquez sur l'icône Cloud Shell dans la barre d'outils supérieure :

Activer Cloud Shell

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

Capture d'écran du terminal Google Cloud Shell montrant que l'environnement s'est connecté

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez effectuer toutes les tâches de cet atelier de programmation dans un navigateur. Vous n'avez rien à installer.

3. Prérequis (installation)

Pour ce tutoriel, vous devez installer :

1. Python et uv

python et uv (gestionnaire de packages pour Python). Il est nécessaire pour ADK. Assurez-vous d'avoir installé uv :

$ curl -LsSf https://astral.sh/uv/install.sh | sh

Pourquoi uv ? Vous pouvez utiliser le gestionnaire Python de votre choix, mais l'utilisation de uv garantit que la configuration ENV/PATH pour Python sera identique pour vous et pour Gemini CLI. Votre expérience du shell sera donc pratiquement la même que celle de Gemini CLI. Si vous utilisez virtualenv , par exemple, Gemini CLI sera obligé d'effectuer des actions telles que "source .env/venv/bin/activate && my-original-command" pour imiter votre environnement.

2. Gemini CLI

Pour Gemini CLI, consultez les instructions d'installation sur https://github.com/google-gemini/gemini-cli.

# Note: This requires having npm or npx installed.
npm install -g @google/gemini-cli
  1. Sur Mac, vous pouvez utiliser brew, comme indiqué dans la documentation officielle.
  2. Sous Windows, vous pouvez utiliser chocolatey ou simplement télécharger l'exécutable depuis https://nodejs.org/en/download.

Pour l'étape 4 (plus tard), vous devrez également installer npx. npm et npx devraient être inclus naturellement dans Gemini CLI. Si ce n'est pas le cas, demandez de l'aide à Gemini CLI.

efade99623113f1.png

Authentification

Vous avez besoin d'un projet Google Cloud avec Vertex AI activé ou d'une clé API Google AI Studio.

Option A (recommandée pour l'atelier) : exportez votre clé API :

export GOOGLE_API_KEY="your-api-key"

Option B (Vertex AI) : authentifiez-vous avec gcloud :

export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"
export GOOGLE_CLOUD_LOCATION="YOUR_PROJECT_LOCATION"
export GOOGLE_GENAI_USE_VERTEXAI=true
gcloud auth application-default login

Configurer votre environnement de travail

Vous allez créer votre PROPRE solution sous mysolution/. Créez le dossier et les deux fichiers dont vous avez besoin.

C'est le moment d'ouvrir votre IDE (Visual Studio Code, IntelliJ, RubyMine, etc.) et d'ouvrir le dossier.

# 1. Find an empty directory, and download this repo.
git clone https://github.com/palladius/adk-gemini-cli-workshop
cd adk-gemini-cli-workshop/

# 2. Create your solution empty skeleton
mkdir -p mysolution/
touch mysolution/__init__.py mysolution/agent.py

# 3. This installs ADK and MCP via `uv` by reading pyproject.toml
uv init
uv sync

# 4. Call Gemini CLI
gemini  # This runs Gemini CLI under the adk-gemini-cli-workshop/ folder.
# Login with your GMail account.

La synchronisation uv n'est pas strictement requise, mais si elle échoue, vous savez que vous devez corriger votre installation de Python ou d'uv. Cela devrait installer adk et d'autres scripts utiles dans le dossier ./.venv/bin/.

Pour tester votre configuration, il vous suffit d'exécuter make test-step1 et de vérifier que vous n'obtenez pas d'erreur 403 PERMISSION DENIED..

Solutions disponibles

Le code est entièrement contenu dans 📂 steps/. Vous pouvez copier le code à partir de là.

Cet atelier de programmation ne vous apprend pas à écrire du code ADK de qualité, mais à configurer votre environnement pour qu'un code de QUALITÉ soit écrit automatiquement sous votre direction.

  1. Installer le logiciel
  2. la configuration/mise en œuvre, et
  3. en entrant dans une boucle de rétroaction vertueuse

C'est ce que nous voulons vraiment que vous appreniez ici. Vous pouvez également les tester tous en même temps via $ make web-4steps.

4. Étape 1 : Agent de base

abfef47ab2ff0c98.png

Commençons par créer un agent de base capable de tenir une conversation.

Modifiez le fichier nommé mysolution/__init__.py en ajoutant le contenu suivant :

from .agent import root_agent

C'est aussi simple que ça ! Cela permet à l'ADK de savoir où se trouve votre code : dans agent.py.

Modifiez le fichier nommé mysolution/agent.py en ajoutant le contenu suivant :

from google.adk.agents import Agent

root_agent = Agent(
    name="travel_basic",
    model="gemini-2.5-flash",
    instruction="You are a helpful travel assistant." +
    "You can help with general travel advice based on your knowledge.",
)

Tester l'agent

Ceci est vrai pour toutes les étapes. L'ADK vous permet de tester votre agent de deux manières : via la CLI et via le Web.

  • La CLI est idéale pour les tests rapides et automatisés.
  • Web est la meilleure option pour voir visuellement ce qui se passe, utiliser le micro (!) et résoudre les problèmes.

Conseil : Pour cet exercice, utilisez le Web pour effectuer n'importe quelle tâche (à l'exception des tests unitaires). C'est vraiment incroyable ! Utilisez la CLI uniquement pour les tests automatisés.

Une bonne requête qui teste correctement les étapes 1, 2, 3 et 4 peut être la suivante (requête de test intelligente) :

Bonjour, je voudrais réserver un hôtel à Paris pour demain soir, pour une personne, une nuit, dans le centre de Paris. Idéalement, près de la gare de Lyon. Budget : moins de 200 € par nuit.

  1. Indique-moi la date de demain au format AAAAMMJJ et le jour de la semaine correspondant.
  2. Indiquez-moi les hôtels que vous voyez pour demain (au moins trois). Je veux voir : > le prix, l'adresse, une note (sous la forme XX/YY, par exemple "4,7/5" – de Google Hotels, Booking ou Airbnb), le nombre d'avis. Présente-les-moi sous forme de TABLEAU. Idéalement, le nom de l'hôtel doit être associé à une URL de l'hôtel (ne vous embêtez pas à ajouter une colonne d'URL). Assurez-vous que le lien est légitime (il fonctionne et la page renvoie vers des informations sur l'hôtel).

Il s'agit d'une requête intelligente, car elle teste l'heure et les hôtels. Elle échouera différemment aux étapes 1, 2 et 3, et ne devrait réussir complètement qu'à l'étape 4. Vous pouvez bien sûr utiliser n'importe quelle requête de votre choix.

Exécutez-le depuis Bash (CLI) :

# 1. If ADK was installed:
adk run mysolution/
# ... but if you get: -bash: adk: command not found"
# 2. Call ADK cli script through UV to avoid python install nightmares.
uv run adk run mysolution/

Essayez de l'utiliser avec le prompt de test ci-dessus.

Il est probable qu'il ne connaisse pas de dates spécifiques. Nous devons lui apprendre à connaître la date !

Pour le Web, vous pouvez procéder comme suit :

  1. uv run adk web . : exécute tous les agents de ce dossier. Vous souhaitez qu'il pointe vers le sous-dossier "mysolution/".
  2. choisissez mysolution/ en haut à droite (voir l'image ci-contre) ;
  3. Posez votre question par écrit ou à l'aide du micro, en vous inspirant du prompt de test.

UI Web d'ADK affichant le résultat de l'agent de voyage

Notez que vous devez appeler adk web à partir du dossier supérieur, en fonction de la version de la CLI.

Robot jaune – Résultat de l'étape 1 avec des suggestions de dates et d'hôtels

Voici une solution possible, avec une semi-hallucination de date. Notez que trois des cinq liens de réservation fonctionnent. Pas mal.

5. Étape 2 : Ajouter l'outil now()

Éditeur Cloud Shell affichant l'implémentation de l'outil now() dans agent.py

Ajoutez cette fonction à agent.py juste avant la définition de root_agent :

from datetime import datetime

def now() -> dict:
    """Returns the current date and time."""
    my_datetime = ... # Ask Gemini CLI to help you!
    return {
        "status": "success",
        "current_time": my_datetime
    }

Mettez à jour la définition de l'agent pour inclure l'outil :

  # file XXX.py

  root_agent = Agent(
        name="..",
        model="..",
        instruction="..",
        tools=[now] # <== This is the only line you want to add.
    )

Exécutez-le à nouveau et posez la même question. Il devrait maintenant connaître la date (bien) et être vague sur les hôtels (pas bien).

Vous pouvez également le tester avec une commande de ce type :

# Let's pretend we're in Milan. This should call the tool
# and respond correctly (possibly with some TZ math issues)
echo "What time is it in Milan?" | uv run adk run mysolution/

6. Étape 3 : Allez, changeons de sujet : google_search

google_search. Cela permet à notre agent d'accéder à des informations en temps réel sur le Web.

3cd72c019b8b225f.png

Votre tâche consiste à modifier l'agent de l'étape 2. Au lieu d'utiliser l'outil now, vous allez importer et utiliser l'outil google_search de la bibliothèque ADK.

# Full Code: `steps/step03_search/agent.py`
# Remember to REMOVE the now() tool here. See above why.
from google.adk.agents import Agent
from google.adk.tools import google_search

root_agent = Agent(
    name="travel_agent",
    model="gemini-2.5-flash",
    tools=[google_search],
    instruction="""You are a travel agent.
Your job is to help the user plan a trip.
You have access to a search engine.
If you don't know the answer, you can use the search engine.
When you are done, reply with "DONE".""",
)

Exécution

Même chose qu'à l'étape 1.

Experts uniquement. Pour une intégration plus avancée (en utilisant google_search et now ensemble), vérifiez le code dans steps/step03b_search_and_tool/agent.py et exécutez-le avec make run-step3b. C'est totalement facultatif.

7. Étape 4 : Un outil plus sophistiqué : MCP

Logo ADK

Maintenant que nous avons vu les outils personnalisés et intégrés, passons à quelque chose de plus puissant : le modèle Model-as-a-Tool utilisant le protocole MCP (Model Context Protocol).

Pour que cette étape se concentre sur les puissantes fonctionnalités de MCP, nous allons à nouveau remplacer notre outil précédent (google_search). Nous allons réintroduire notre outil now simple pour qu'il s'exécute en même temps que l'outil airbnb_mcp. Cela montre comment un agent peut utiliser plusieurs outils compatibles (dans ce cas, un FunctionTool et un MCPToolset) pour effectuer des tâches complexes.

# Full Code: steps/step04_mcp/agent.py
# ... Imports as before
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StdioConnectionParams
from mcp import StdioServerParameters

def now() -> dict:
    # ... as before

# Configure the Airbnb MCP Toolset
airbnb_mcp = MCPToolset(
    connection_params=StdioConnectionParams(
        server_params=StdioServerParameters(
            command='npx',
            args=["-y", "@openbnb/mcp-server-airbnb", "--ignore-robots-txt"],
        ),
    )
)

root_agent = Agent(
    name="travel_mcp",
    model="gemini-2.5-flash",
    instruction="You are a helpful travel assistant. You can find accommodation using Airbnb, and have access to the current time.",
    tools=[now, airbnb_mcp],
)

Exécution

Pour cette étape, npx doit être installé sur votre système. Pour le reste, c'est la même chose que ci-dessus.

Avertissements/Erreurs

  1. Si vous obtenez une erreur de restriction robots.txt, vous pouvez corriger le MCP avec une directive d'ignorance des robots. Pour en savoir plus, consultez la documentation : https://github.com/openbnb-org/mcp-server-airbnb.
  2. Si vous obtenez une erreur timeout (cinq secondes étant trop courtes pour qu'Airbnb obtienne des réponses), consultez la documentation de l'ADK pour savoir comment augmenter le délai avant expiration, par exemple à 30 secondes. Ou… utilisez Gemini CLI pour le faire ! Notez que le 25 décembre 2023, Cloud Shell m'a renvoyé une erreur de délai d'expiration. J'ai corrigé l'erreur de délai d'expiration, mais j'ai continué à recevoir des erreurs jusqu'à ce que je force la version précédente : args=["-y", "@openbnb/mcp-server-airbnb@0.1.2", "--ignore-robots-txt"].

8. 🏅 Étape 1 terminée !

🏅 Félicitations ! 🏅 Vous êtes désormais un expert ADK ! Vous avez terminé la première partie de l'atelier et avez réussi à créer et à tester des agents IA avec des outils personnalisés, des outils intégrés et des outils MCP avancés. Vous êtes maintenant prêt à créer vos propres agents incroyables avec Google Agent Development Kit.

Vous disposez désormais d'un agent de voyage fonctionnel qui connaît l'heure et peut effectuer des recherches sur le Web. Les possibilités sont désormais infinies !

Il est maintenant temps d'ajouter une fonctionnalité supplémentaire avec "Gemini CLI".

9. 🏅 Étape 2 : Se lancer dans le vibe coding avec ADK via Gemini CLI

Nous entrons maintenant dans la partie intéressante de l'atelier.

  1. Assurez-vous d'avoir git commitenregistré le code dans un endroit sûr. Vous pouvez dupliquer le code d'origine ou créer une branche. Ne vous inquiétez pas, Gemini CLI est là pour vous aider.
  2. Trouvez une 💡 idée à mettre en œuvre. Vous pouvez consulter les idées ci-dessous, en trouver une vous-même ou demander à Gemini d'examiner la documentation dans rag/ et de proposer quelques idées intelligentes.
  3. Suivez les conditions préalables pour vous assurer que Gemini peut lire les documents ADK, et le tour est joué !

💡 Idées

  1. 🟢 [Facile] Vous parlez plusieurs langues ? Voulez-vous donner go, java ou TypeScript ? La refactorisation du code existant est très simple. Assurez-vous simplement de télécharger l'ADK approprié et demandez à Gemini CLI d'effectuer la traduction.
  2. 🟢 [Facile] Ajoutez des emoji ou spécifiez un format de sortie qui vous plaît (par exemple, un tableau avec un emoji d'hôtel, suivi du prix, suivi d'emoji de 1 à 5 étoiles, avec 🌕🌕🌕🌗🌑 pour les demi-étoiles).
  3. 🟢 [Facile] Modifiez le prompt pour lui indiquer ce que vous recherchez ou non (animaux acceptés, pas de rez-de-chaussée, calme, proche des transports en commun, etc.) et testez-le. Ajoute éventuellement une note personnelle, par exemple "une note de YOUR_NAME de 1 à 10" basée sur les éléments ci-dessus, et trie les résultats en fonction de cette note.
  4. 🟢 [easy] Any Operator in the room? Déployez sur Cloud Run. Ou à Vertex AI Agent Engine ! Saviez-vous que vous pouvez intégrer cet agent et l'appeler directement depuis le nouveau Gemini Enterprise ?
  5. 🟢 [Facile] Intégrez adk run à 🍌 NanoBanana MCP. Nécessite une clé API Gemini. Vous pourrez créer des images, mais pas les visualiser. Voir ci-dessous pour une variante plus difficile.
  6. 🟡 [Moyen] Créez un sous-agent qui effectue le HotelSearch et créez un BudgetAgent ou un LocationAgent qui peut doubler et itérer sur les hôtels en respectant vos besoins de localisation, par exemple "pas plus de X km de l'EMPLACEMENT". Si l'API ne le permet pas, il peut y avoir des allers-retours facilités par la recherche Google. Remarque : Gemini CLI peut vous aider.
  7. 🟡 [Moyen] Implémenter un AirbnbReviewAgent qui examine les avis et résume les points positifs et négatifs dans quelques puces à code couleur, pour un ou plusieurs hôtels résultant d'une recherche. Vous disposez déjà de deux ingrédients (GoogleSearch et MCP Airbnb). Vous devez ensuite les connecter à l'agent principal et peut-être inventer une sorte de protocole pour qu'ils communiquent.
  8. 🟡 [Moyenne] Intégrer avec A2A. Transformez-le en agent A2A ! Encore une fois, demandez de l'aide à Gemini CLI !
  9. 🔴 [complex] Vous pouvez intégrer Flights ou d'autres fonctionnalités MCP pour créer un agent de voyage multifonctionnel et polyvalent.
  10. 🔴 [Complexe] Intégrez ADK web à 🍌 NanoBanana MCP. Cette tâche est plus difficile que la précédente. Vous trouverez des conseils sur https://github.com/palladius/ai-friendly-agents/issues/11. Cela a pris trois heures à l'auteur, qui a dû échanger avec Gemini CLI et Gemini 3, et nous avons tous les deux dû lire la documentation et le code de rag/.

Vous cherchez d'autres idées ?

  1. Consultez le tutoriel officiel sur ADK pour trouver des idées.
  2. Demandez à Gemini CLI de trouver des idées en consultant la documentation sous rag/. Un prompt possible pourrait être : Is there a feature in here which seems very succulent to you? Give me 3 proposals and let's implement together the one I choose.

Prérequis pour le RAG ADK

Pour coder une fonctionnalité, nous vous recommandons de télécharger l'intégralité de l'ADK Python (remarque : vous pouvez l'adapter très facilement à votre langage préféré, comme Java ou Go).

Le code est disponible sous ./rag et peut être téléchargé avec ./download-adk.sh.

Comme le dossier rag est listé dans votre fichier .gitignore, assurez-vous que votre .gemini/settings.json contient les éléments suivants :

{
 "context": {
   "includeDirectories": ["rag"]
 }
}

Pourquoi ? Nous voulons que Gemini puisse lire ces fichiers, tout en les ignorant de manière sécurisée dans Git. Techniquement, vous pouvez également afficher tous les fichiers .gitignore en définissant context.fileFiltering.respectGitIgnore sur false, mais cela ouvre de nombreux fichiers node_modules/ et __pycache__/ inutiles. L'inclusion explicite de dossiers est donc l'option privilégiée.

10. Étapes suivantes

Curiosité : cet atelier a été conçu avec l'aide de Gemini CLI. Si vous souhaitez savoir comment j'ai procédé, vous pouvez consulter les fichiers GEMINI.md et WORKSHOP_PLAN.md dans ce dossier.

Leçons apprises

Nous avons appris à associer l'ADK à Gemini CLI

Autres ressources

6d05afb6b8b235d8.png