Aller au contenu

Guide complet Google ADK 2026 : Construisez des agents IA intelligents avec du code

Qu'est-ce que Google ADK ?

Google ADK (Agent Development Kit) est un framework de développement d'agents IA open source conçu par Google pour les développeurs qui souhaitent intégrer des agents IA dans des applications réelles. Contrairement à des frameworks comme LangChain ou LlamaIndex, l'ADK adopte une approche « code-first » (code en priorité), rendant le comportement des agents aussi prévisible et testable que celui des logiciels traditionnels.

Fonctionnalités principales

  • Code en priorité : Définissez le comportement des agents en Python pur, sans configurations YAML complexes
  • Sécurité de type : Tire pleinement parti des annotations de type Python, offrant l'auto-complétion IDE et la vérification des erreurs
  • Testabilité : La logique des agents peut être testée unitairement comme des fonctions ordinaires
  • Prêt pour la production : Intègre la journalisation, la surveillance, la gestion des erreurs et autres fonctionnalités essentielles en production
  • Support multi-modèles : Prend en charge Gemini, GPT-4, Claude et autres grands modèles de langage principaux

Cas d'utilisation

  • Chatbots de service client
  • Assistants d'automatisation des flux de travail
  • Analyse de données et génération de rapports
  • Révision de code et aide à la programmation
  • Systèmes de questions-réponses sur les connaissances internes des entreprises

Installation et configuration

Prérequis

  • Python 3.10 ou version supérieure
  • Gestionnaire de paquets pip
  • Compte Google Cloud (lors de l'utilisation du modèle Gemini)

Étapes d'installation

# Créer un environnement virtuel (recommandé)
python3 -m venv adk-env
source adk-env/bin/activate  # Linux/macOS
# adk-env\Scripts\activate  # Windows

# Installer Google ADK
pip install google-adk

# Installer des dépendances supplémentaires (selon les besoins)
pip install google-adk[cli]  # Inclut les outils en ligne de commande
pip install google-adk[testing]  # Inclut les outils de test

Configuration de la clé API

# Méthode 1 : Utiliser les variables d'environnement (recommandé pour le développement)
export GEMINI_API_KEY="your-api-key-here"

# Méthode 2 : Utiliser le fichier d'identifiants Google Cloud
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account.json"

# Méthode 3 : Configuration directe dans le code (non recommandé pour la production)

Concepts fondamentaux

1. Agent (Agent intelligent)

L'agent est le composant central de l'ADK, responsable de la réception des entrées utilisateur, de l'appel d'outils et de la génération de réponses.

from google.adk import Agent
from google.adk.models import Gemini

# Créer un agent de base
agent = Agent(
    name="customer_support",
    model=Gemini(model="gemini-2.0-flash"),
    instruction="Vous êtes un assistant de service professionnel qui aide les utilisateurs à résoudre les problèmes de produits.",
)

2. Tools (Outils)

Les outils sont des fonctions externes que l'agent peut appeler pour exécuter des tâches spécifiques.

from google.adk import Tool
from google.adk.tools import FunctionTool

# Définir une fonction outil
def search_knowledge_base(query: str) -> str:
    """Rechercher des informations pertinentes dans la base de connaissances"""
    # L'implémentation réelle peut appeler une base de données ou une API
    return f"Résultats de la recherche '{query}'..."

# Créer l'outil
search_tool = FunctionTool(
    func=search_knowledge_base,
    name="search_kb",
    description="Rechercher dans la base de connaissances produits",
)

# Ajouter l'outil à l'agent
agent.tools = [search_tool]

3. Sessions (Sessions)

Les sessions gèrent l'historique des interactions entre l'utilisateur et l'agent, prenant en charge les conversations multi-tours.

from google.adk import Session

# Créer une session
session = Session(
    agent=agent,
    user_id="user_123",
)

# Envoyer un message
response = await session.send("Mon produit ne démarre pas, que faire ?")
print(response.text)

4. Events (Événements)

Le système d'événements prend en charge le traitement asynchrone des messages et les réponses en streaming.

from google.adk import Event

async def handle_event(event: Event):
    if event.type == "user_message":
        response = await session.send(event.content)
        await event.reply(response.text)

Exemples pratiques

Exemple 1 : Robot de questions-réponses simple

from google.adk import Agent, Session, Runner
from google.adk.models import Gemini

# Créer l'agent
agent = Agent(
    name="faq_bot",
    model=Gemini(model="gemini-2.0-flash"),
    instruction="""Vous êtes un robot FAQ qui répond aux questions sur les produits.
    - Gardez les réponses concises et claires
    - Si vous ne connaissez pas la réponse, dites-le honnêtement
    - Fournissez des conseils d'aide pertinents""",
)

# Exécuter une session interactive
async def main():
    runner = Runner(agent=agent)
    await runner.run_interactive()

# python3 faq_bot.py

Exemple 2 : Assistant d'analyse de données avec outils

from google.adk import Agent, Tool
from google.adk.tools import FunctionTool
from google.adk.models import Gemini
import pandas as pd

# Définir les outils d'analyse de données
def load_csv(file_path: str) -> dict:
    """Charger un fichier CSV et retourner les informations de base"""
    df = pd.read_csv(file_path)
    return {
        "rows": len(df),
        "columns": list(df.columns),
        "dtypes": df.dtypes.astype(str).to_dict(),
    }

def calculate_stats(file_path: str, column: str) -> dict:
    """Calculer les statistiques pour une colonne spécifiée"""
    df = pd.read_csv(file_path)
    numeric_col = pd.to_numeric(df[column], errors="coerce")
    return {
        "mean": float(numeric_col.mean()),
        "median": float(numeric_col.median()),
        "std": float(numeric_col.std()),
        "min": float(numeric_col.min()),
        "max": float(numeric_col.max()),
    }

# Créer les outils
tools = [
    FunctionTool(func=load_csv, name="load_csv", description="Charger un fichier CSV"),
    FunctionTool(func=calculate_stats, name="calc_stats", description="Calculer les statistiques"),
]

# Créer l'agent
agent = Agent(
    name="data_analyst",
    model=Gemini(model="gemini-2.0-flash"),
    instruction="Vous êtes un assistant d'analyse de données, aidant les utilisateurs à analyser des fichiers de données CSV.",
    tools=tools,
)

Exemple 3 : Système de collaboration multi-agents

from google.adk import Agent, Runner
from google.adk.models import Gemini

# Créer plusieurs agents spécialisés
researcher = Agent(
    name="researcher",
    model=Gemini(model="gemini-2.0-flash"),
    instruction="Vous êtes responsable de la collecte et de la recherche d'informations, fournissant des faits et des données détaillés.",
)

writer = Agent(
    name="writer",
    model=Gemini(model="gemini-2.0-flash"),
    instruction="Vous êtes responsable de l'organisation des résultats de recherche en rapports structurés et lisibles.",
)

reviewer = Agent(
    name="reviewer",
    model=Gemini(model="gemini-2.0-flash"),
    instruction="Vous êtes responsable de la vérification de la qualité des rapports, assurant l'exactitude et l'exhaustivité.",
)

# Orchestrer plusieurs agents avec un flux de travail
async def collaborative_workflow(user_query: str):
    # Phase de recherche
    research_result = await researcher.run(user_query)

    # Phase de rédaction
    draft = await writer.run(f"Rédiger un rapport basé sur les résultats de recherche suivants : {research_result}")

    # Phase de révision
    final_report = await reviewer.run(f"Vérifier et améliorer le rapport suivant : {draft}")

    return final_report

Fonctionnalités avancées

Réponses en streaming

from google.adk import Agent, Session
from google.adk.models import Gemini

agent = Agent(
    name="streaming_bot",
    model=Gemini(model="gemini-2.0-flash"),
)

session = Session(agent=agent)

# Traiter la réponse en streaming
async for chunk in session.send_stream("Racontez une histoire sur l'IA"):
    print(chunk.text, end="", flush=True)

Middleware personnalisé

from google.adk import Middleware

class LoggingMiddleware(Middleware):
    """Middleware de journalisation, enregistrant toutes les requêtes et réponses"""

    async def on_request(self, request):
        print(f"[REQUEST] {request.user_id}: {request.content}")
        return request

    async def on_response(self, response):
        print(f"[RESPONSE] {response.text[:100]}...")
        return response

# Ajouter le middleware
agent.middleware = [LoggingMiddleware()]

Gestion des erreurs et nouvelles tentatives

from google.adk import Agent
from google.adk.models import Gemini
from google.adk.retry import RetryConfig

agent = Agent(
    name="robust_bot",
    model=Gemini(model="gemini-2.0-flash"),
    retry_config=RetryConfig(
        max_retries=3,
        retry_delay=1.0,
        retry_on=[TimeoutError, ConnectionError],
    ),
)

Meilleures pratiques

1. Ingénierie de prompts

# Bonne pratique : instructions claires et précises
agent = Agent(
    instruction="""Vous êtes un assistant de support technique professionnel.

    Règles de réponse :
    1. Confirmez d'abord la compréhension du problème de l'utilisateur
    2. Fournissez des solutions étape par étape
    3. Si le problème est complexe, suggérez de contacter le support humain
    4. Maintenez un ton amical et professionnel""",
)

# À éviter : instructions vagues et génériques
agent = Agent(
    instruction="Aider l'utilisateur à résoudre son problème",  # Trop vague
)

2. Conception d'outils

# Bonne pratique : responsabilité unique, documentation claire
def get_order_status(order_id: str) -> dict:
    """
    Vérifier le statut d'une commande

    Args:
        order_id: Numéro de commande (format : ORD-XXXXXX)

    Returns:
        Dictionnaire contenant status, estimated_delivery, etc.
    """
    pass

# À éviter : multifonction, trop de paramètres
def handle_order(action: str, order_id: str, user_id: str, 
                 items: list, address: dict, payment: dict) -> dict:
    # Trop complexe, difficile à maintenir
    pass

3. Stratégie de test

import pytest
from google.adk import Agent, Session

@pytest.fixture
def test_agent():
    return Agent(
        name="test_bot",
        model=Gemini(model="gemini-2.0-flash"),
        instruction="Vous êtes un assistant de test",
    )

@pytest.mark.asyncio
async def test_agent_response(test_agent):
    session = Session(agent=test_agent)
    response = await session.send("Bonjour")
    assert response.text is not None
    assert len(response.text) > 0

4. Optimisation des performances

# Utiliser un pool de connexions
from google.adk.models import Gemini

model = Gemini(
    model="gemini-2.0-flash",
    max_concurrent_requests=10,
    timeout=30.0,
)

# Mettre en cache les réponses fréquentes
from functools import lru_cache

@lru_cache(maxsize=100)
def get_faq_answer(question_hash: str) -> str:
    # Logique de cache
    pass

Guide de déploiement

Serveur de développement local

from google.adk import Agent, Runner
from google.adk.models import Gemini

agent = Agent(
    name="web_bot",
    model=Gemini(model="gemini-2.0-flash"),
)

# Démarrer le serveur Web
runner = Runner(agent=agent)
runner.serve(host="0.0.0.0", port=8000)

# Accéder à http://localhost:8000

Déploiement Docker

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 8000

CMD ["python", "main.py"]

Google Cloud Run

# cloud-run.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: adk-agent
spec:
  template:
    spec:
      containers:
      - image: gcr.io/your-project/adk-agent
        env:
        - name: GEMINI_API_KEY
          valueFrom:
            secretKeyRef:
              name: api-keys
              key: gemini

Questions fréquemment posées

Q1 : Quelle est la différence entre ADK et LangChain ?

R : L'ADK met l'accent sur le code en priorité et la sécurité de type, adapté aux développeurs ayant une expérience en programmation ; LangChain offre des composants préconstruits plus riches et des configurations YAML, idéal pour le prototypage rapide.

Q2 : Quels grands modèles de langage sont pris en charge ?

R : Prise en charge native des modèles de la famille Google Gemini. Via des fournisseurs personnalisés, vous pouvez également intégrer OpenAI GPT, Anthropic Claude, des modèles locaux, etc.

Q3 : Comment déboguer le comportement de l'agent ?

R : Utilisez le mode de débogage intégré de l'ADK :

from google.adk import Runner

runner = Runner(agent=agent, debug=True)
# Les journaux détaillés seront affichés dans la console

Q4 : Que faut-il prendre en compte pour l'environnement de production ?

R : - Utiliser les variables d'environnement pour gérer les clés API - Configurer des limites de taux appropriées - Implémenter la journalisation et la surveillance - Ajouter la gestion des erreurs et les mécanismes de nouvelle tentative - Effectuer des tests de charge approfondis

Résumé

Google ADK offre aux développeurs un outil puissant et flexible pour construire des applications d'agents IA prêtes pour la production. Son approche de conception code-first rapproche le développement d'agents des pratiques de génie logiciel traditionnelles, facilitant les tests, la maintenance et l'extension.

Prochains pas

  1. Lire la documentation officielle
  2. Consulter le répertoire d'exemples GitHub
  3. Rejoindre la communauté de développeurs
  4. Essayer de construire votre premier projet Agent

Ressources associées :