Agents¶
Machinevertaling van het Franse origineel.
De term "agent" omvat twee verschillende objecten binnen het park, en het verwarren ervan kost u uren.
| Wat het is | Waar het woont | |
|---|---|---|
| De uitvoerder | een programma dat een opdracht ontvangt, leest, nadenkt en een tekst genereert | een machine binnen het park – een niet-interactieve claude -p, een Python-service, een workflow-engine |
| De definitie | wat het is, welk model het mag aanroepen, welke tekst het mag lezen, wat het kost | het proxy LLM, in zijn register van agents |
De regel van het park, vanaf 2026-09-13: de definitie is de referentie, en deze bevindt zich in het proxy. Het opslaan van een agent omvat alleen zijn back-up – wat overblijft wanneer het proxy niet reageert.
Waarom deze twee scheiden?
Een uitvoerder is verbonden met een machine: het heeft een schijf, een repository en een geauthenticeerde sessie nodig. Een definitie daarentegen moet door iedereen leesbaar zijn – de UI, een script, een ander agent, de kostenadministratie. Het samenhouden van deze vereist dat de configuratiebestand overal wordt geklond, waar iemand weet wat het agent doet.
A2A, in één pagina¶
A2A (Agent-to-Agent) is een open protocol dat een specifieke vraag beantwoordt: hoe kan een programma met een agent praten die het niet zelf heeft geschreven?
Het bestaat uit drie onderdelen.
1. Het agent-document¶
Een JSON-document dat door de agent zelf wordt aangeboden, op een standaardadres: /.well-known/agent-card.json. Het geeft zijn naam, beschrijving, URL, de vaardigheden (skills) die het exposeert, de formaten die het accepteert en genereert, en hoe men zich bij hem kan authenticeren.
Dit is vergelijkbaar met een OpenAPI-bestand voor een REST-API: informatie over hoe je een API kunt aanroepen zonder de code aan de andere kant te lezen.
2. Een JSON-RPC-aanroep¶
Een enkele methode is voldoende om te beginnen: message/send. Er wordt een bericht gestuurd, bestaande uit delen (tekst, een afbeelding, een bestand), en de agent reageert.
{
"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. Een taak met een levenscyclus¶
Een agent reageert niet altijd binnen twee seconden. A2A modelleert een taak met toestanden — ingediend, in uitvoering, voltooid — en artefacten die geleverd worden. Dit onderscheidt A2A van een eenvoudige HTTP-aanroep: het protocol houdt rekening met de duur van de taak.
De valkuil van het ontwerp, en dat is een structureel probleem
Een agent die meerdere minuten nodig heeft om te reageren, is niet synchroon. Als de aanroeper op dezelfde verbinding wacht op de reactie, dan heeft elk element tussen de twee — proxy, reverse proxy, HTTP-client — zijn eigen timeout, en het eerste element dat verloopt, wint. Een trage agent is ontworpen met de levenscyclus van de taak, niet tegen.
Wat het proxy LLM toevoegt¶
Het proxy van het park — dat al alle modellen alias bedient — heeft ook een register van agents. Wat het toevoegt, is niet het protocol: het zijn alle dingen die we niet opnieuw in elke agent willen implementeren.
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
| Wat het proxy toevoegt | Wat het voorkomt |
|---|---|
| Een directory — de lijst met agents, hun kaart, hun vaardigheden | elk houdt zijn eigen lijst, en deze verschillen |
| Een identiteit — een virtuele sleutel per agent | één gedeelde sleutel, dus een kostenpost die we niet kunnen toewijzen aan iemand |
| Beperkingen — doorstroom per agent, een lijst met toegestane modellen, budget | een agent die in een lus terechtkomt, steelt het budget van iedereen |
| De kosten — elke aanroep genereert een record | een kostenpost die we kunnen verdelen, dus een fictieve kostenpost |
| Twee interfaces — het A2A-protocol en de klassieke chat-API | het herschrijven van een client voor elke agent |
De beide zijden, en dat is het belangrijkste¶
Een geregistreerde agent kan op twee manieren worden bereikt, zonder dat er iets verandert aan de kant van de agent:
- via A2A, op
/a2a/<id>/message/send— dit is het protocol, met zijn kaart en taakcyclus; - via een chat-API, door simpelweg het model
a2a/<nom>op/v1/chat/completionsaan te vragen.
De tweede optie is in de praktijk de belangrijkste: elke applicatie in het park die kan communiceren met een model, kan dan ook communiceren met de agent, zonder dat er code nodig is. De chat-interface, de workflow-engine, een script van drie regels — ze zien een nieuw modelnaam in de lijst.
De verbinding werkt ook in de andere richting: een geregistreerde agent kan dat een model met beperkingen heeft, en de proxy zorgt ervoor dat het model een A2A-interface heeft.
Wat vandaag waar is, en wat niet¶
Een register van externe agenten
Het register verwacht agenten die al ergens actief zijn: een A2A-server of een commerciële agentenplatform. Er is geen type "commandoregelprogramma".
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
De lijst met agenten die door de proxy worden gebruikt, bevindt zich in het geheugen en wordt niet opnieuw gelezen wanneer het proces opnieuw start. Na een herstart zijn de agenten nog steeds aanwezig, maar de lijst is leeg — en de resolutie a2a/<nom>, die dezezelfde registratie leest, stopt voor alle gebruikers. Een periodieke controle die de definities opnieuw toepast, lost het probleem op; zonder deze, is de storing stil en lijkt de service normaal te functioneren.
De volgende stap, per veld: Een agent definiëren en gebruiken.
Dernière vérification de cette page : 2026-09-13