Nettoyer le code spaghetti généré par un agent de codage IA et réduire les coûts de jetons
Après avoir confié le codage à un agent, le code s'est multiplié par un million et la facture des API a explosé. Cet article raconte comment y remédier.
Supprimer la base de code corrompue
Le code dupliqué produit en boucle infinie par l'agent peut être supprimé en 30 minutes. Il suffit d'utiliser knip et jscpd.
Créez un fichier knip.json à la racine du projet et indiquez-y les points d'entrée. Tapez npx knip dans le terminal pour trouver les paquets fantômes laissés par l'agent. Ensuite, exécutez npx jscpd ./src -t 1 pour extraire les blocs de fonctions dupliqués par des copier-coller.
Dans un monorepo de 158 fichiers, vous pouvez éliminer le code inutile d'un seul coup. Ouvrez ensuite biome.json, activez la règle noUnusedVariables et empêchez ainsi le code mort de revenir.
Maîtriser les coûts de jetons avec un bac à sable
Si vous envoyez l'intégralité du code à l'agent à chaque fois, les jetons s'évaporent. Il est nécessaire d'appliquer une structure Repo-Map de type Aider pour isoler uniquement le fichier sur lequel on travaille.
En ajoutant l'option --map-tokens 1024, vous pouvez limiter les jetons utilisés pour comprendre la structure du dépôt à moins de 2 000 jetons, même dans un projet contenant plus de 1 000 fichiers.
Pour fixer une limite de coûts, LiteLLM Proxy est la solution. Configurez litellm_config.yaml et limitez le nombre maximal de boucles par session à 15. En définissant un plafond de dépenses à 2,50 dollars, le proxy interrompt l'appel dès que l'agent dépasse la limite.
Contrôler l'agent avec des tests déclaratifs
Écrire de longs prompts en malais ne sert à rien. Il faut d'abord soumettre du code de test unitaire qui échoue pour empêcher l'agent de faire n'importe quoi.
Selon l'étude SWE-bench Verified, l'injection préalable de cas de tests unitaires réduit le taux de régression de 6,08 % à 1,82 %, tandis que le taux de résolution des problèmes passe de 24 % à 32 %.
Créez d'abord le fichier de test qui échoue, puis demandez à l'agent d'écrire uniquement la partie implémentation qui permet de réussir ce test.
Le script de vérification doit également être automatisé. Créez un fichier local_verifier.sh et intégrez-y successivement les commandes npx tsc --noEmit, npx biome check ./src et npx vitest run. Même si l'agent prétend avoir fini le code, le commit est bloqué si le code de sortie de ce script est différent de 0.
Un flux de travail hybride avec intervention humaine directe
Le code produit par l'agent est découpé en pull requests et vérifié manuellement.
Vérifiez si les lignes modifiées dépassent 200, si un paquet suspect a été ajouté au fichier package.json, ou si les erreurs ont été grossièrement masquées par @ts-ignore. En associant Husky et lint-staged, la présence de code dupliqué supérieur à 2 % est immédiatement bloquée au moment du commit.
Le travail est réparti en 3 étapes. Le modèle de pointe répartit les tâches et crée un fichier TODO.md. Ensuite, un modèle économique implémente chaque élément. Enfin, un développeur senior vérifie le diff Git. Cette structure permet d'économiser plus de 70 % des coûts par rapport à l'utilisation d'un seul modèle frontalier.