Aller au contenu

Agents

Le mot « agent » recouvre deux objets différents dans le parc, et les confondre fait perdre des heures.

Ce que c'est Où il vit
L'exécutant un programme qui reçoit une consigne, lit, réfléchit, rend un texte une machine du parc — un claude -p non interactif, un service Python, un moteur de workflow
La définition qui il est, quel modèle il a le droit d'appeler, ce qu'il a le droit de lire, ce qu'il coûte le proxy LLM, dans son registre d'agents

La règle du parc depuis le 2026-09-13 : la définition est la référence, et elle est dans le proxy. Le dépôt d'un agent ne porte plus que son plan de secours — ce qui reste quand le proxy ne répond pas.

Pourquoi séparer les deux

Un exécutant est attaché à une machine : il lui faut le disque, le dépôt, la session authentifiée. Une définition, elle, doit être lisible par tout le monde — l'UI, un script, un autre agent, le tableau de dépense. Les garder ensemble oblige à cloner le fichier de configuration partout où quelqu'un veut savoir ce que fait l'agent.

A2A, en une page

A2A (Agent-to-Agent) est un protocole ouvert qui répond à une question précise : comment un programme parle-t-il à un agent qu'il n'a pas écrit ?

Il tient en trois pièces.

1. La carte d'agent

Un document JSON servi par l'agent lui-même, à une adresse conventionnelle : /.well-known/agent-card.json. Elle dit son nom, sa description, son URL, les compétences (skills) qu'il expose, les formats qu'il accepte et rend, et comment s'authentifier auprès de lui.

C'est l'équivalent d'un fichier OpenAPI pour une API REST : de quoi appeler sans avoir lu le code d'en face.

2. Un appel JSON-RPC

Une seule méthode suffit pour commencer : message/send. On poste un message fait de parts (du texte, une image, un fichier), l'agent répond.

{
  "jsonrpc": "2.0", "id": "1", "method": "message/send",
  "params": { "message": {
      "role": "user",
      "parts": [{ "kind": "text", "text": "vérifie la continuité de la scène 1" }],
      "messageId": "f1e2d3"
  }}
}

3. Une tâche qui a une vie

Un agent ne répond pas toujours en deux secondes. A2A modélise donc une tâche avec des états — submitted, working, completed — et des artefacts livrés au fil de l'eau. C'est ce qui distingue A2A d'un simple appel HTTP : le protocole prévoit que le travail dure.

Le piège de conception, et il est structurel

Un agent qui travaille plusieurs minutes s'appelle mal en synchrone. Si l'appelant attend la réponse sur la même connexion, tout ce qui est entre les deux — proxy, reverse proxy, client HTTP — a son propre délai d'expiration, et le premier qui expire gagne. Un agent lent se conçoit avec le cycle de vie de tâche, pas contre lui.

Ce que le proxy LLM ajoute

Le proxy du parc — celui qui sert déjà tous les alias de modèles — porte aussi un registre d'agents. Ce qu'il apporte n'est pas le protocole : c'est tout ce qu'on ne veut pas réécrire dans chaque agent.

flowchart LR
    subgraph consommateurs
        s["Script · cron"]
        w["Moteur de workflows"]
        c["Interface de chat"]
        a2["Un autre agent"]
    end

    p["Proxy LLM<br/>registre + identité + limites + dépense"]
    ag["Agent<br/>serveur A2A"]
    m["Modèles<br/>locaux · souverains · API"]

    s --> p
    w --> p
    c --> p
    a2 --> p
    p -->|"A2A : message/send"| ag
    p -->|"OpenAI : chat/completions"| m
    ag -->|"ses propres appels,<br/>avec SA clé"| p
Ce que le proxy apporte Ce que ça évite
Un annuaire — la liste des agents, leur carte, leurs compétences chacun tient sa propre liste, et elles divergent
Une identité — une clé virtuelle par agent une seule clé partagée, donc une dépense qu'on ne sait imputer à personne
Des limites — débit par agent, liste blanche de modèles, budget un agent qui part en boucle emporte le budget de tout le monde
La dépense — chaque appel écrit sa ligne un coût qu'on répartit au prorata, donc un coût inventé
Deux façades — protocole A2A et API de chat classique réécrire un client pour chaque agent

Les deux façades, et c'est le point important

Un agent enregistré est joignable de deux manières, sans rien changer côté agent :

  • en A2A, à /a2a/<id>/message/send — c'est le protocole, avec sa carte et son cycle de tâche ;
  • en API de chat, en demandant simplement le modèle a2a/<nom> sur /v1/chat/completions.

La deuxième est celle qui compte en pratique : toute application du parc qui sait parler à un modèle sait alors parler à l'agent, sans une ligne de code. L'interface de chat, le moteur de workflows, un script de trois lignes — ils voient un nom de modèle de plus dans la liste.

Le pont fonctionne aussi dans l'autre sens : un agent enregistré peut n'être qu'un modèle avec des limites, et le proxy lui fabrique une façade A2A.

Ce qui est vrai aujourd'hui, et ce qui ne l'est pas

Un registre d'agents externes

Le registre attend des agents qui écoutent déjà quelque part : un serveur A2A, ou une plateforme d'agents commerciale. Il n'existe aucun type « programme en ligne de commande ».

Conséquence directe pour le parc : un agent qui est un claude -p lancé sur une machine ne devient joignable par les autres que si on lui met un serveur A2A devant. Tant que ce serveur n'existe pas, le registre sert de référence de définition — ce qui est déjà beaucoup — mais pas de point d'appel, et l'URL annoncée sur sa carte ne répond pas.

Un registre qui oublie au redémarrage

La liste d'agents que sert le proxy vit en mémoire, et n'est pas relue depuis la base quand le processus repart. Après un redémarrage, les agents existent toujours mais la liste est vide — et la résolution de a2a/<nom>, qui lit ce même registre, s'arrête pour tous les consommateurs. Un contrôle périodique qui réapplique les définitions referme le trou ; sans lui, la panne est silencieuse et le service a l'air en pleine santé.

La suite du geste, champ par champ : Définir un agent et le consommer.

Dernière vérification de cette page : 2026-09-13