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

1. Introduction

9344c1d1a9f221b7.png

Dernière mise à jour : 02/02/2026

Créer un agent de voyage simple avec ADK

Bienvenue dans cet atelier Python(*) ADK, qui est fourni avec les batteries incluses, grâce à Gemini CLI !

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

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

La deuxième partie de cet atelier de programmation est idéale 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 choisir la dernière version de l'ADK Python, insérer le code et la documentation, et fournir le code le plus récent/le plus adapté à votre objectif.

Il s'agit d'une partie guidée manuellement où nous obtenons une application entièrement fonctionnelle par petits incréments simples. Cette opération prend généralement environ une heure (en plus du temps d'installation).

Étape 2 : Étendre votre agent

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

Objectifs de l'atelier

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

  • Connectez-vous aux API Airbnb via Airbnb MCP.
  • Rechercher des informations à jour en ligne (météo, dates, etc.)
  • Exécuter des outils personnalisés
  • Créez des images des appartements/chambres à l'aide de Nano Banana.

Gemini CLI vous guidera tout au long de ce processus : écrire/examiner du code et trouver les derniers documents 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
  • Utiliser Gemini CLI pour coder des applications basées sur des documents locaux
  • Voici comment interagir avec un serveur MCP pour se connecter à des sources de données externes en temps réel :

Prérequis

  • Un ordinateur qui vous permet d'installer des packages (par exemple, npm install ..)
  • Capacité de programmation de base en Python, TypeScript, Go ou Java.
  • Un IDE ( Antigravity, vscode, IntelliJ, vim, etc.) est fortement recommandé.

Pourquoi utiliser ADK et Gemini CLI ?

Certains d'entre vous se demandent peut-être : Pourquoi dois-je utiliser ADK (un SDK de création d'agents) avec un outil d'assistance pour le code agentique local (comme la CLI Gemini) ? En effet, ces deux outils sont incroyablement puissants, mais leur interaction n'est pas simple. De nombreuses personnes ont essayé de les utiliser conjointement, mais 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 cette

l'atelier de programmation sur votre propre machine, ou démarrer Cloud Shell si vous souhaitez exécuter cet atelier de programmation 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.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le 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 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.

Prérequis (installation)

Pour ce tutoriel, vous devez installer :

1. Python et uv

python et uv (gestionnaire de paquets pour Python). C'est nécessaire pour ADK. Assurez-vous que uv est installé :

$ 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 garantira que la configuration ENV/PATH pour Python sera la même pour vous et pour Gemini CLI. Votre expérience shell sera donc à peu près 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 ici : https://github.com/google-gemini/gemini-cli .

Remarque : Vous devez avoir installé npm ou npx.

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 à partir de https://nodejs.org/en/download.

Pour l'étape 4 (plus tard), vous aurez également besoin d'installer npx. npm et npx devraient être des fonctionnalités naturelles de Gemini CLI. Si ce n'est pas le cas, demandez à Gemini CLI de vous aider.

Vous pouvez également installer just, qui est un Makefile plus avancé et auto-documenté. Vous pouvez également demander à Gemini CLI de vous aider à l'installer. Il peut le faire pour vous !

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) : s'authentifier 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 donc 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/ai-friendly-agents/
cd ai-friendly-agents/adk/workshops/simple-travel-agent/

# 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 sync

# 4. Call Gemini CLI
gemini  # This runs Gemini CLI under the simple-travel-agent/ folder.
# Login with your GMail account.

uv sync n'est pas strictement nécessaire, mais si cela échoue, vous savez que vous devez corriger votre installation Python ou uv.

Solutions disponibles

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

Cet atelier de programmation ne porte pas sur l'apprentissage de l'écriture de code ADK de qualité. Il s'agit de configurer votre environnement pour obtenir automatiquement du code de qualité écrit selon vos instructions.

  1. Installer le logiciel
  2. la configuration / le fonctionnement, et
  3. en saisissant une boucle de rétroaction juste ;

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

3. É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 y ajoutant le contenu suivant :

from .agent import root_agent

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

Modifiez le fichier nommé mysolution/agent.py en y 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

Cela s'applique à toutes les étapes. ADK vous permet de tester votre agent de deux manières : avec la CLI et sur le Web.

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

Conseil : Pour cet exercice, utilisez le Web pour accomplir n'importe quelle tâche (sauf les tests unitaires). C'est vraiment incroyable ! Conservez la CLI uniquement pour les tests automatisés.

Voici un bon exemple de requête qui teste correctement les étapes 1 à 4 (requête "litmus" intelligente) :

# <!– litmus prompt –> Bonjour, je voudrais réserver un hôtel à Paris pour demain soir, une nuit, dans le centre-ville de Paris. Idéalement à proximité de la gare de Lyon. Budget : moins de 200 € par nuit.

  1. Dis-moi la date et le jour de la semaine de demain.
  2. Indique-moi au moins trois hôtels pour demain. Je souhaite voir : > le prix, l'adresse, une note (au format XX/YY, par exemple "4,7/5" provenant de Google Hotels, Booking ou Airbnb), le nombre d'avis. Présente-les sous forme de tableau. Dans l'idéal, le nom de l'hôtel doit être associé à une URL (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 pleinement qu'à l'étape 4. Bien sûr, vous pouvez 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 d'utiliser la "requête litmus" ci-dessus.

Il échouera probablement à identifier des 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 le rediriger vers le sous-dossier "mysolution/".
  2. Sélectionnez mysolution/ en haut à droite (voir l'image ci-contre).
  3. Posez votre question par écrit ou à l'aide du micro, en utilisant une formulation similaire à la "litmus prompt".

TODO(ricc): <image here>

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

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

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

L'agent ne sait pas ce qu'est "aujourd'hui". Donnons-lui un outil.

TODO(image): ricc put here image of step2.

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

  travel_agent = LlmAgent(
        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 (mal).

Vous pouvez également le tester avec une commande comme celle-ci :

# 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/

5. Étape 3 : Changeons de vitesse : google_search

Maintenant que nous savons comment créer un outil personnalisé, voyons comment utiliser l'un des puissants outils intégrés fournis par ADK : 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écuter

Identique à l'étape 1.

Experts uniquement : Pour une intégration plus avancée (en utilisant google_search et now ensemble), consultez le code dans steps/step03b_search_and_tool/agent.py et exécutez-le avec just run-step3b. Cette étape est totalement facultative.

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

TODO(ricc): add image 4

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 Model Context Protocol (MCP).

Pour que cette étape reste axée sur les puissantes fonctionnalités de MCP, nous allons une fois de plus remplacer notre outil précédent (google_search). Nous allons réintroduire notre simple outil now pour qu'il s'exécute en parallèle de 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écuter

Cette étape nécessite l'installation de npx sur votre système. Pour le reste, la procédure est identique à celle décrite ci-dessus.

Avertissements/ Erreurs

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

7. 🏅 Étape 1 terminée !

🏅 Félicitations ! 🏅 Vous êtes désormais un expert ADK ! Vous avez terminé la première partie de l'atelier. Vous avez créé et testé des agents d'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. Il n'y a plus de limite !

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

8. 🏅 Étape 2 : faire du vibe coding dans l'ADK avec Gemini CLI

Nous allons maintenant aborder la partie intéressante de l'atelier.

  1. Assurez-vous d'avoir git commit le code dans un endroit sûr. Vous pouvez forker 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 à implémenter. 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 vous proposer quelques idées intéressantes.
  3. Suivez les conditions préalables pour vous assurer que Gemini peut lire la documentation ADK. Vous serez alors prêt à vous lancer !

💡 Idées

Voici un menu avec des idées de complexité variable.

  1. 🟢 [facile] Parlez-vous plusieurs langues ? Voulez-vous donner go, java ou Typescript ? Refactoriser le 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] Ajoute des emoji ou spécifie un format de sortie de ton choix (par exemple, un tableau avec des emoji d'hôtel, suivis du prix, puis des emoji d'étoiles de 1 à 5, en utilisant 🌕🌕🌕🌗🌑 pour les demi-étoiles).
  3. 🟢 [Facile] Modifiez la requête pour lui indiquer ce que vous recherchez ou ce que vous ne voulez pas (animaux acceptés, pas de rez-de-chaussée, calme, à proximité des transports en commun, etc.), puis testez-la. Vous pouvez également ajouter une note personnelle (par exemple, "une note de YOUR_NAME de 1 à 10") en fonction des informations ci-dessus, puis trier les résultats par note.
  4. 🟢 [facile] Un opérateur est-il dans la pièce ? Déployez sur Cloud Run. Ou à Vertex AI Agent Engine. Saviez-vous que vous pouviez intégrer cet agent et l'appeler directement depuis la nouvelle édition Gemini Enterprise ?
  5. 🟢 [facile] Intégrer `adk run`` à 🍌 NanoBanana MCP. Nécessite une clé API Gemini. Vous pourrez y créer des images, mais pas les visualiser. Vous trouverez ci-dessous une variante plus difficile.
  6. 🟡 [moyen] Créez un sous-agent qui effectue HotelSearch et créez un BudgetAgent ou un LocationAgent qui peut redoubler d'efforts et itérer sur les hôtels en respectant vos besoins de localisation, par exemple "pas plus de X km de LOCATION". Si l'API ne le permet pas, Google Search peut vous aider à trouver une solution. Remarque : Gemini CLI peut vous aider.
  7. 🟡 [moyen] Implémentez un AirbnbReviewAgent qui examine les avis et résume les points positifs et négatifs dans quelques puces de 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 puissent communiquer.
  8. 🟡 [Moyen] Intégrer à A2A. Définissez-la comme agent A2A. Demandez encore une fois de l'aide à Gemini CLI !
  9. 🔴 [complexe] Vous pouvez intégrer Flights ou d'autres fonctionnalités MCP pour créer un agent de voyage multifonctionnel et polyvalent.
  10. 🔴 [complexe] Intégrer ADK Web à 🍌 NanoBanana MCP. C'est plus difficile que la précédente. Vous trouverez des conseils sur https://github.com/palladius/ai-friendly-agents/issues/11. L'auteur a passé trois heures à échanger avec Gemini CLI et Gemini3, et à lire la documentation et le code de rag/.

Vous avez besoin d'inspiration ?

  1. Consultez le tutoriel ADK de Maurizio pour trouver des idées.
  2. Demandez à Gemini CLI de trouver des idées en consultant la documentation sous rag/. Voici un exemple de prompt : 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 l'ADK "RAG"

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

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

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

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

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

9. Étapes suivantes

Curiosité : cet atelier a été créé avec l'aide de Gemini CLI. Si vous êtes curieux, vous pouvez voir comment j'ai fait en regardant les fichiers GEMINI.md et WORKSHOP_PLAN.md dans ce dossier.

Leçons apprises

Nous avons appris à associer ADK à Gemini CLI.

Autres ressources

6d05afb6b8b235d8.png