Lección 1 — Le protocole A2A

Pourquoi A2A, et ce que dit une Agent Card

5 min de lectura

Este contenido aún no está traducido. Se muestra la versión original.

Pourquoi A2A, et ce que dit une Agent Card

Le problème : des agents qui ne vivent pas ensemble

Avec ADK, des sub_agents dans un même programme suffisent tant qu'une seule équipe maintient tout. Dès que l'agent stock appartient à la logistique et l'agent tarification au commercial, trois contraintes apparaissent :

  • chaque agent est déployé séparément (son propre serveur, son propre rythme de mise en production) ;
  • l'appelant ne connaît pas le code de l'appelé, seulement ce qu'il sait faire ;
  • l'appelé est un agent : il raisonne, peut prendre du temps, renvoyer un résultat partiel ou demander une précision.

A2A est un protocole ouvert (lancé par Google, aujourd'hui hébergé par la Linux Foundation) qui standardise ce dialogue sur HTTP : découvrir un agent, lui envoyer un message, suivre la tâche qui en résulte.

flowchart LR
  subgraph "Équipe commerciale"
    O["Orchestrateur"]
  end
  subgraph "Équipe logistique"
    S["Agent stock"]
  end
  subgraph "Équipe tarification"
    P["Agent tarification"]
  end
  O -->|"1. GET Agent Card"| S
  O -->|"2. SendMessage"| S
  O -->|"1. GET Agent Card"| P
  O -->|"2. SendMessage"| P

A2A et MCP ne font pas la même chose

MCP (Model Context Protocol)A2A (Agent2Agent)
Relieun agent à des outils et des donnéesun agent à un autre agent
L'autre côtéune fonction déterministeun système autonome qui raisonne
Unité d'échangeappel d'outil → résultatmessage → tâche avec un état (en cours, terminée, échouée…)
Exemple du labcheck_stock("CHAISE-ERGO")« Service stock, combien de chaises ergonomiques ? »

Les deux se combinent : dans ce lab, l'agent stock expose son outil check_stock à son propre modèle, et s'expose lui-même aux autres agents en A2A.

L'agent tarification est maintenu par une autre équipe, sur un autre serveur. Que choisir pour que l'orchestrateur l'utilise ?

L'Agent Card : la carte d'identité de l'agent

Chaque serveur A2A publie un document JSON à une adresse bien connue (well-known URI) : /.well-known/agent-card.json. Un client n'a besoin que de l'adresse du serveur pour savoir :

  • qui est l'agent (name, description, version) ;
  • où et comment l'appeler (supportedInterfaces : URL, liaison JSONRPC, version du protocole) ;
  • ce qu'il sait faire (skills) et ses capacités (capabilities.streaming) ;
  • quels formats il accepte (defaultInputModes, defaultOutputModes).

Avec ADK, cette carte est générée automatiquement à partir de l'agent : son nom, sa description et la docstring de chaque outil.

Résultat obtenu

Carte réellement servie par l'agent stock du lab le 2026-10-15 (curl -s localhost:8101/.well-known/agent-card.json, mise en forme) :

{
  "name": "stock_agent",
  "description": "Donne le stock disponible d'un article (par entrepôt) à partir de sa référence.",
  "supportedInterfaces": [
    {"url": "http://localhost:8101", "protocolBinding": "JSONRPC", "protocolVersion": "1.0"}
  ],
  "version": "0.0.1",
  "capabilities": {"streaming": true},
  "defaultInputModes": ["text/plain"],
  "defaultOutputModes": ["text/plain"],
  "skills": [
    {"id": "stock_agent", "name": "model", "description": "Donne le stock disponible…", "tags": ["llm"]},
    {"id": "stock_agent-check_stock", "name": "check_stock",
     "description": "Retourne le stock disponible d'un article, par entrepôt. …", "tags": ["llm", "tools"]}
  ]
}

Remarquez protocolVersion: "1.0" : le SDK a2a-sdk 1.x parle la version 1.0 du protocole. Le chemin /.well-known/agent-card.json est celui de cette version ; des versions antérieures du protocole utilisaient un autre nom de fichier.

Dans la carte ci-dessus, d'où vient la compétence (skill) nommée check_stock ?

Quelles informations un orchestrateur peut-il tirer de la carte sans jamais appeler le modèle de l'agent ? (plusieurs réponses)

Exercice : lire une carte

Lancez l'agent stock (uvicorn stock_agent:app --port 8101, voir stock_agent.py), récupérez sa carte, puis répondez : combien de compétences publie-t-il ? Que change la carte si vous modifiez la docstring de check_stock et relancez ?

Voir la solution
export A2A_TOKEN=$(python -c "import secrets; print(secrets.token_urlsafe(24))")
uvicorn stock_agent:app --port 8101 &
curl -s localhost:8101/.well-known/agent-card.json | python -m json.tool

Deux compétences : model (l'agent lui-même) et check_stock (son outil). La carte est reconstruite au démarrage du serveur : la nouvelle docstring apparaît dans skills[1].description après redémarrage. La carte est donc toujours alignée sur le code, ce qui évite qu'une documentation écrite à la main ne dérive.

Je sais faire

  • Expliquer en deux phrases le problème que résout A2A
  • Distinguer A2A de MCP avec un exemple
  • Récupérer et lire l'Agent Card d'un agent
  • Dire d'où ADK tire le contenu de la carte
Siguiente