Orchestrer des sous-agents : planification, isolation, budgets
Un harness où un planificateur découpe un dossier de veille en sous-tâches, lance des sous-agents isolés et budgétés en parallèle, tranche leurs contradictions et trace toute la trajectoire. Écrit deux fois, à la main puis avec ADK Workflow, et mesuré.

Nordelec Réseaux, gestionnaire fictif d'un réseau de distribution électrique, doit choisir le serveur d'inférence qui hébergera l'assistant de ses 600 techniciens d'astreinte. Le comité d'architecture se réunit le 20 octobre. Le corpus à dépouiller : 40 documents internes (bancs d'essai, devis, bulletins de sécurité, comptes rendus, billets de blog), dont une dizaine sans rapport et quatre paires qui se contredisent. Un agent unique qui lit tout dans un seul contexte mélange les chiffres, oublie la moitié des sources et coûte de plus en plus cher à chaque tour. Ce projet construit l'alternative : un planificateur qui découpe, des sous-agents qui ne voient que leur part, un budget strict par sous-agent, une synthèse qui tranche les contradictions, et un journal qui montre où sont passés le temps et l'argent.
Ce que vous livrez
| Livrable | Contenu |
|---|---|
| Harness « à la main » | asyncio + google-genai : planification structurée, boucle d'outils, budgets, reprise, synthèse |
| Harness ADK | le même pipeline sur google.adk.workflow (ADK 2.10), sans les agents dépréciés |
| Journal de trajectoire | journal.jsonl + page HTML autonome : arbre des tâches, frise, tokens et coût par nœud |
| Grille de qualité | 12 faits attendus, 4 contradictions plantées, validité des citations, bruit cité |
| Mesures | séquentiel contre parallèle, à la main contre ADK, sur le vrai modèle |
| Tests | 21 tests sans clé ni réseau, qui exercent les deux versions avec le même faux modèle |
Architecture
flowchart LR D["Demande du comité"] --> P["Planificateur<br/>(voit le catalogue, pas le contenu)"] P --> V["Validation du plan<br/>(code, pas modèle)"] V --> S1["Sous-agent st-1<br/>périmètre + budget"] V --> S2["Sous-agent st-2<br/>périmètre + budget"] V --> S3["Sous-agent st-n<br/>périmètre + budget"] S1 --> A["Dossier de preuves<br/>(métadonnées des sources)"] S2 --> A S3 --> A A --> Y["Synthèse<br/>arbitrage des contradictions"] Y --> C["Contrôles déterministes<br/>citations, arbitrages"] C --> R["dossier.md + trajectoire.html"]
Stack et coût
- Python 3.10 ou plus,
google-genai,google-adk==2.10.0,pydantic,pytest. Aucune ressource Google Cloud : une clé Gemini API suffit. - Sous-agents :
gemini-3.5-flash-lite(0,30 par million de tokens en entrée / sortie). Planificateur et synthèse :gemini-3.8-flash(0,75 jusqu'au 31 décembre 2026, le double ensuite). Tarifs relevés le 2026-10-15 sur la page officielle. - Coût mesuré le 2026-10-15 : 0,03 à 0,04 .
Prérequis
- Avoir écrit une boucle d'appel d'outils (function calling) et une sortie structurée avec Gemini.
- Être à l'aise avec
asyncio(gather,Semaphore,wait_for) et pydantic. - Une clé Gemini API (Google AI Studio).
Programme
| # | Leçon | À la fin, cette commande marche |
|---|---|---|
| 1 | Le problème et l'architecture | make setup && make test |
| 2 | Le planificateur : décomposer sans tout lire | pytest -k plan |
| 3 | Sous-agents isolés et budgets | pytest -k "isolation or budget" |
| 4 | Parallélisme, reprise sur échec, journal | make run |
| 5 | Agrégation et contradictions | make run affiche la note de la grille |
| 6 | La même chose avec ADK Workflow | make run IMPL=adk |
| 7 | Mesurer et décider | make e2e |
Le code complet est dans files/ : clonez-le, puis make setup, make test, make run. Nettoyage : make clean (aucune ressource cloud n'est créée).
Recursos
- example.env.example1 KB
- jsongrille.json2 KBVer
- mdREADME.md2 KBVer
- txtrequirements.txt1 KBVer
- pyrun.py6 KBVer
Referencias
- ADK : Workflows, applications multi-agents et multi-nœudsgoogle.github.io
- google/adk-python (code source d'ADK)github.com
- Gemini API : appel de fonctionsai.google.dev
- Gemini API : sortie structuréeai.google.dev
- Gemini API : réflexion (thinking)ai.google.dev
- Gemini API : tarifsai.google.dev
- Anthropic : How we built our multi-agent research systemanthropic.com
- Python : asyncio, tâches et coroutinesdocs.python.org