Limites et coût des agents de code
Un agent de code travaille par étapes, et chaque étape coûte du temps et de l’argent. Sans budget ni règle d’arrêt, un agent peut tourner en rond une heure sur une tâche que vous feriez en dix minutes.
Chaque changement qu’il fait demande encore votre relecture. Décider au jugé quoi déléguer ne suffit pas ; cette leçon ajoute les chiffres.
À la fin de cette leçon
Remarque
Je peux fixer un budget et une règle d’arrêt à un agent de code et juger si une tâche mérite de lui être confiée.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Étape | une action d’un agent : lire, modifier ou lancer | |
| Budget | le maximum d’étapes ou d’argent qu’une exécution peut utiliser | |
| Règle d’arrêt | un contrôle qui termine une exécution plus tôt | |
| Patience | les étapes permises sans progrès | 3 |
| Minutes nettes | les minutes gagnées après la rédaction et la relecture |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un budget et une règle d’arrêt
Donnez un budget à chaque exécution : au plus 10 étapes et au plus 40 centimes. Donnez-lui aussi une patience : si le nombre de tests réussis n’a pas monté depuis 3 étapes, on arrête.
Contrôlez après chaque étape, dans un ordre fixe : fini, budget dépassé, aucun progrès, étapes épuisées. Le premier contrôle vrai termine l’exécution.
Exemple guidé : l’exécution bloquée, étape par étape
| Étape | Coût | Dépensé | Réussis sur 6 | Étapes depuis une hausse |
|---|---|---|---|---|
| 1 | 4 | 4 | 2 | 0 |
| 2 | 5 | 9 | 3 | 0 |
| 3 | 6 | 15 | 3 | 1 |
| 4 | 5 | 20 | 3 | 2 |
| 5 | 6 | 26 | 3 | 3, donc arrêt : aucun progrès |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Le temps gagné face au temps passé
Un agent ne vous fait pas gagner toutes les minutes d’une tâche faite à la main. Vous passez encore des minutes à écrire la tâche et à relire le changement. Les minutes nettes, ce sont les minutes à la main moins les deux.
Gardez une tâche quand le net vaut 0 ou moins. Gardez-la aussi quand le risque est élevé, comme un contrôle de paiement ou une suppression de données, quoi que disent les minutes.
Exemple guidé : quatre tâches
| Tâche | À la main | Rédaction plus relecture | Net | Décision |
|---|---|---|---|---|
| Renommer une fonction dans 12 fichiers | 40 | 15 | 25 | Déléguer |
| Ajouter une page de doc | 30 | 15 | 15 | Déléguer |
| Corriger une coquille d’une ligne | 2 | 5 | -3 | Garder |
| Modifier le contrôle de paiement | 60 | 40 | 20 | Garder : risque élevé |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une erreur fréquente
Attention
Beaucoup pensent que le temps d’un agent est gratuit parce qu’il travaille pendant qu’on fait autre chose. Votre propre temps part dans la tâche, la relecture et les corrections. Comptez ces minutes avant de déléguer, et gardez le travail à risque élevé quoi que dise le compte.
Écrire l’assistant du modèle, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const base = process.env.AI_URL || \"http://ai:4000\";' '// Les jetons d’une réponse, ou null si elle n’en donne pas.' 'function compter(donnees, nom) {' ' return donnees.usage && typeof donnees.usage[nom] === \"number\" ? donnees.usage[nom] : null;' '}' > model.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire l’assistant du modèle, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function demander(messages, echantillon, max) {' ' try {' ' const res = await fetch(base + \"/v1/chat/completions\", {' ' method: \"POST\",' ' headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' ' body: JSON.stringify({ model: \"lab\", messages: messages, max_tokens: max || 100 }),' ' signal: AbortSignal.timeout(30000),' ' });' ' if (res.ok === false) throw new Error(\"statut \" + res.status);' ' const d = await res.json();' ' return { texte: d.choices[0].message.content, entree: compter(d, \"prompt_tokens\"), sortie: compter(d, \"completion_tokens\"), enregistre: false };' ' } catch (erreur) {' ' console.log(\"Échantillon enregistré : aucun modèle n’a répondu (\" + erreur.message + \").\");' ' return { texte: echantillon, entree: null, sortie: null, enregistre: true };' ' }' '}' 'module.exports = { demander };' >> model.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire le script de budget, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'const LIMITE = { etapes: 10, centimes: 40, patience: 3 };' 'const executions = {' ' \"régulier\": { total: 6, cout: [3, 4, 3, 5, 4, 3], reussis: [1, 2, 3, 4, 5, 6] },' ' \"bloqué\": { total: 6, cout: [4, 5, 6, 5, 6, 7, 6, 5], reussis: [2, 3, 3, 3, 3, 3, 3, 3] },' ' \"coûteux\": { total: 8, cout: [9, 12, 10, 11, 9], reussis: [1, 2, 3, 4, 5] },' '};' > budget.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire le script de budget, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function arret(r) {' ' let depense = 0;' ' let meilleur = 0;' ' let monte = 0;' ' for (let i = 0; i < r.cout.length; i += 1) {' ' const etape = i + 1;' ' depense += r.cout[i];' ' const fin = \"étape \" + etape + \", \" + depense + \" centimes\";' ' if (r.reussis[i] > meilleur) { meilleur = r.reussis[i]; monte = etape; }' ' if (meilleur === r.total) return \"fini à l’\" + fin;' ' if (depense > LIMITE.centimes) return \"budget dépassé à l’\" + fin;' ' if (etape - monte >= LIMITE.patience) return \"aucun progrès à l’\" + fin;' ' if (etape >= LIMITE.etapes) return \"étapes épuisées à l’\" + fin;' ' }' ' return \"fin de l’enregistrement, \" + depense + \" centimes\";' '}' >> budget.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire le script de budget, partie 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const taches = [' ' { nom: \"renommer une fonction dans 12 fichiers\", main: 40, redaction: 5, relecture: 10, risque: \"faible\" },' ' { nom: \"ajouter une page de doc\", main: 30, redaction: 5, relecture: 10, risque: \"faible\" },' ' { nom: \"corriger une coquille d’une ligne\", main: 2, redaction: 3, relecture: 2, risque: \"faible\" },' ' { nom: \"modifier le contrôle de paiement\", main: 60, redaction: 10, relecture: 30, risque: \"élevé\" },' '];' 'function decider(t) {' ' if (t.risque === \"élevé\") return \"garder : risque élevé\";' ' const net = t.main - t.redaction - t.relecture;' ' return net > 0 ? \"déléguer, gagne \" + net + \" minutes\" : \"garder : ne gagne rien\";' '}' >> budget.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire le script de budget, partie 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' Object.keys(executions).forEach(function (nom) { console.log(nom + \" : \" + arret(executions[nom])); });' ' taches.forEach(function (t) { console.log(t.nom + \" : \" + decider(t)); });' ' const q = \"En une phrase courte, pourquoi un agent de code doit-il s’arrêter quand il ne progresse plus ?\";' ' const echantillon = \"Une exécution qui n’avance plus ne fait que dépenser de l’argent et vous donner plus à relire.\";' ' const reponse = await demander([{ role: \"user\", content: q }], echantillon, 60);' ' console.log(\"le modèle dit : \" + reponse.texte);' '}' 'main();' >> budget.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lancer le script de budget
docker exec -w /home/node/project agent node budget.jsAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ce qu’affiche le Run
| Ligne | Ce qu’elle montre |
|---|---|
| régulier : fini à l’étape 6, 22 centimes | Tous les tests passent dans le budget |
| bloqué : aucun progrès à l’étape 5, 26 centimes | Trois étapes sans hausse |
| coûteux : budget dépassé à l’étape 4, 42 centimes | Il a passé les 40 centimes |
| renommer une fonction dans 12 fichiers : déléguer, gagne 25 minutes | Vaut la peine d’être confié à un agent |
| corriger une coquille d’une ligne : garder : ne gagne rien | Plus rapide à la main |
| modifier le contrôle de paiement : garder : risque élevé | Gardé quoi que disent les minutes |
| le modèle dit : ... | Une phrase du labo. Une ligne Échantillon enregistré si aucun modèle ne répond |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.