- L’architecture centrale d’un assistant de code IA n’est pas une magie complexe, mais environ 200 lignes de code Python simple
- Le système repose sur une boucle de conversation avec un LLM : lorsque le LLM demande un appel d’outil, le code local l’exécute puis lui renvoie le résultat
- Les trois outils de base nécessaires sont la lecture de fichier (
read), la liste des fichiers (list) et l’édition de fichier (edit), ce qui permet d’explorer un projet et de modifier du code
- Le LLM décide lui-même quel outil appeler et à quel moment à partir de la signature et de la description (
docstring) des outils
- Cette structure est identique au cœur de produits commerciaux comme Claude Code, et une architecture simple suffit à créer un agent de code puissant
Concept de base d’un agent de code
- Un agent de code est un système conversationnel basé sur un LLM qui reçoit une instruction utilisateur et effectue de vraies opérations sur les fichiers via des appels d’outils
- L’utilisateur saisit par exemple une demande comme « créer un nouveau fichier contenant une fonction hello world »
- Le LLM répond avec les appels d’outils nécessaires au format JSON
- Le programme exécute ensuite l’outil concerné et renvoie le résultat au LLM
- Le LLM n’accède pas directement au système de fichiers : il se contente de formuler des requêtes, tandis que le travail réel est pris en charge par le code local
Les trois outils nécessaires
- read_file : lit et renvoie l’intégralité du contenu du fichier indiqué
- list_files : renvoie la liste des fichiers et dossiers dans un répertoire
- edit_file : remplace une chaîne existante par une nouvelle, ou crée un nouveau fichier si
old_str est vide
- Si la chaîne à remplacer n’est pas trouvée, l’outil renvoie « old_str not found »
- Ces trois outils suffisent déjà pour créer, modifier et explorer des fichiers
Enregistrement des outils et intégration au LLM
- Tous les outils sont enregistrés dans TOOL_REGISTRY avec leur nom et leur fonction, ce qui permet au LLM de les appeler
- La docstring et la signature de chaque outil sont extraites puis transmises au LLM
- Le prompt système indique clairement au LLM la liste des outils disponibles et le format d’appel
- Les appels d’outils sont limités au format
'tool: TOOL_NAME({JSON_ARGS})'
- Les résultats d’exécution sont renvoyés au LLM sous la forme
tool_result(...)
Analyse des appels d’outils et traitement des réponses du LLM
- Dans la réponse du LLM, le système recherche les lignes commençant par
tool: afin d’extraire le nom de l’outil et ses arguments (JSON)
- Après exécution de chaque outil, le résultat est sérialisé en JSON puis ajouté à l’historique de conversation
- La fonction execute_llm_call appelle l’API du LLM et renvoie le texte de réponse
- run_coding_agent_loop reçoit l’entrée utilisateur et maintient la boucle de conversation avec le LLM
- La boucle interne se répète jusqu’à ce que le LLM ne demande plus d’appel d’outil
Exemple d’exécution et possibilités d’extension
- Exemple de conversation :
- « crée le fichier
hello.py et implémente hello world » → création d’un nouveau fichier via un appel à edit_file
- « ajoute à
hello.py une fonction qui multiplie deux nombres » → appel à read_file, puis à edit_file
- Il est possible d’implémenter un assistant de code complet avec environ 200 lignes de code
- Les produits commerciaux y ajoutent ensuite la gestion des erreurs, les réponses en streaming, la gestion du contexte, des outils supplémentaires et des procédures d’approbation
- La structure centrale reste la même : une boucle simple où le LLM décide et le code exécute
Mise en pratique et extension
- Le code source complet tient en environ 200 lignes et peut être étendu en remplaçant le fournisseur de LLM ou en ajoutant de nouveaux outils
- Même avec une structure simple, il est possible d’implémenter soi-même un prototype puissant d’agent IA de codage
Aucun commentaire pour le moment.