La boucle générer, critiquer, réviser
Le besoin
Une équipe commerciale rédige des dizaines d'offres par mois à partir de briefs courts : l'entreprise, l'offre, la cible, le problème du client, l'action attendue. Elle veut un premier texte publiable, pas un brouillon à reprendre entièrement. Ses exigences sont connues : clair, concret, une seule action à la fin, un ton professionnel, sans faute, lisible sur un téléphone.
L'idée : séparer celui qui écrit de celui qui juge
L'article Self-Refine (Madaan et al., 2023) a montré qu'un modèle qui critique son propre texte puis le révise produit souvent une meilleure version que son premier jet. On sépare ici les rôles en agents distincts : chacun a une instruction courte et focalisée.
sequenceDiagram participant R as redacteur participant C as critique participant A as arbitre (Python) participant V as reviseur R->>C: brouillon v0 C->>A: notes 4,5,5,4,4 et remarques A->>V: moyenne 4.4 inférieure à 4.8, 4 consignes V->>C: brouillon v1 C->>A: notes 4,5,5,5,5 A-->>A: grille satisfaite, escalate, fin de boucle
| Rôle | Type d'agent | Pourquoi ce choix |
|---|---|---|
| Rédacteur | LLM, modèle léger | un premier jet n'a pas besoin du modèle le plus cher |
| Critique | LLM, sortie structurée | des notes chiffrées, exploitables par du code |
| Arbitre | BaseAgent en Python | la décision d'arrêter doit être prévisible |
| Réviseur | LLM, modèle léger | applique des consignes précises |
Une grille qu'une machine peut appliquer
Une bonne grille mélange deux types de critères :
- Jugés par le modèle (subjectifs, notés de 1 à 5) : clarté, concret, appel à l'action, ton, correction de la langue.
- Mesurés par le code (objectifs, vrai ou faux) : nombre de mots entre 90 et 150, aucun mot interdit (« révolutionnaire », « leader »…), présence des mentions obligatoires (le prix exact, le lien de réservation).
Lequel de ces critères faut-il vérifier en code plutôt que par le critique LLM ?
La présence d'une chaîne exacte se vérifie avec un simple test « in ». Les deux autres demandent un jugement : c'est le rôle du critique.
Quand arrêter la boucle ?
Une boucle sans condition d'arrêt fiable coûte cher et peut ne jamais finir. Il en faut deux :
- Arrêt sur succès : la grille est satisfaite (chaque note ≥ 4, moyenne ≥ 4,8, tous les contrôles en code passent).
- Arrêt de sécurité : un nombre maximal de tours (
max_iterations=4). Atteint, on rend le dernier texte marqué non validé, pour relecture humaine.
Dans ADK, un LoopAgent répète ses sous-agents dans l'ordre et s'arrête dès qu'un événement porte actions.escalate = True, ou quand max_iterations est atteint. Il y a deux façons de produire cet événement :
| Méthode | Qui décide ? | Avantage | Limite |
|---|---|---|---|
Outil intégré exit_loop donné à un agent LLM | le modèle | une ligne de code | le modèle peut l'appeler trop tôt, ou jamais |
Agent BaseAgent qui émet escalate=True | votre code | décision prévisible et testable | quelques lignes de plus |
Le lab utilise la seconde ; l'exercice de la leçon 3 vous fait écrire la première.
La boucle atteint max_iterations sans que la grille soit satisfaite. Que doit faire le système ?
max_iterations est une sécurité de coût, pas un gage de qualité. Le texte final n'a pas passé la grille : on le signale (valide=False) et un humain décide.
Exercice : écrire la grille d'un autre contenu
Vous adaptez la boucle à des fiches produit pour une boutique en ligne. Proposez 4 critères jugés par le modèle et 3 contrôles en code.
Voir la solution
Critères jugés (1 à 5) :
- exactitude : aucune caractéristique absente de la fiche technique ;
- bénéfice client : chaque caractéristique est traduite en usage ;
- lisibilité : phrases courtes, une idée par phrase ;
- ton de marque : conforme au guide éditorial fourni.
Contrôles en code :
- longueur entre 60 et 120 mots ;
- la référence produit et le prix apparaissent tels quels ;
- aucune allégation interdite (« garanti à vie », « médical », etc.).
Résultat obtenu
Trace réelle du 2026-10-15 (gemini-3.5-flash-lite pour écrire, gemini-3.5-flash pour critiquer) : le premier jet est refusé, la révision est validée au tour 2.
[redacteur] Expert-comptable, ne laissez pas une panne informatique paralyser votre cabinet en pleine période fiscale ! ...
[critique] {"clarte":4,"concret":5,"appel_action":5,"ton":4,"correction":4,"remarques":["Corriger la faute d'élision dans 'en cas de incident' ...
[arbitre] Tour 1 : 4 consigne(s)
[reviseur] Expert-comptable, ne laissez pas une panne informatique paralyser votre cabinet en période fiscale ! ...
[critique] {"clarte":4,"concret":5,"appel_action":5,"ton":5,"correction":5,"remarques":[...]}
[arbitre] Tour 2 : VALIDÉJe sais faire
- J'explique pourquoi séparer rédacteur, critique et arbitre
- Je construis une grille qui mélange critères jugés et contrôles mesurés
- Je prévois un arrêt sur succès ET un arrêt de sécurité
- Je compare
exit_loopet un arbitre déterministe