- La manière dont les LLM traitent l’intégralité des résultats d’appel d’outils est lente, coûteuse et peu adaptée au passage à l’échelle
- À la place, il est proposé de laisser le LLM orchestrer un traitement où les données structurées sont manipulées directement par du code à partir d’un schéma de sortie
- Cette approche est adaptée au traitement de grands volumes de données grâce à l’enchaînement de fonctions par le code et à la gestion de la mémoire via des variables
- Le traitement des données fondé sur l’exécution de code offre une excellente précision et une bonne scalabilité, car le LLM n’a pas à reconstituer lui-même les données
- La mise en place d’un environnement d’exécution IA sécurisé apparaît comme un nouveau défi, avec le besoin d’un environnement d’exécution durable et capable de conserver l’état
LLM function calls don't scale; code orchestration is simpler, more effective.
Limites de l’approche classique qui renvoie les résultats des outils au LLM
- Lorsqu’on utilise des outils MCP (Machine Context Protocol), on transmet généralement au LLM le résultat produit par l’outil sous forme de message afin de guider l’action suivante
- Dans des cas d’usage réels, les serveurs MCP de Linear et d’Intercom renvoient de grosses réponses au format JSON
- Le JSON ressemble à une API, mais sans schéma de sortie défini, le LLM doit parser l’ensemble du texte, ce qui crée une charge importante
- Par exemple, le résultat d’une requête listant les issues de Linear contient 70 000 caractères pour 50 éléments, soit environ 25 000 tokens, ce qui est très volumineux
- Beaucoup de champs
id n’apportent pas de sens mais consomment des tokens, et si le LLM doit les reproduire tels quels, le coût et le risque d’erreur augmentent
Pourquoi il faut séparer traitement des données et orchestration
- L’approche actuelle mélange le traitement des données et l’orchestration dans une même session de chat
- Certains créent pour cela d’autres threads « agents », mais lorsque le JSON est structuré, cette méthode reste inefficace
- Une meilleure approche consiste à traiter directement les données structurées avec du code
- Exemple : pour trier des issues, au lieu de demander au LLM de générer la sortie, on exécute
sort en code puis on ne renvoie que le tableau résultant
Traitement des données fondé sur l’exécution de code
- Les calculs IA via exécution de code sont déjà utilisés dans divers interprètes IA
- Cette approche permet une structure plus simple dans laquelle le LLM n’a pas à produire directement les données et n’a qu’à décider de la manière d’utiliser les outils
Concepts clés
- Utiliser les variables comme mémoire : affecter une valeur = stocker, l’afficher = la consulter, la transmettre comme argument lors d’un appel de fonction
- Prise en charge de l’enchaînement de fonctions : combiner plusieurs appels de fonctions en parallèle ou en séquence, avec des dépendances exprimées naturellement dans le flux du code
- Traitement extensible de gros volumes de données : combiné à NumPy, pandas, etc., ce modèle permet de traiter facilement des milliers à des dizaines de milliers d’éléments
- Possibilité d’appeler d’autres LLM : le code écrit par le LLM peut à son tour appeler un autre LLM pour traiter des données non structurées
Le MCP est-il prêt ?
- La spécification MCP définit déjà un schéma d’entrée, et une PR pour le schéma de sortie a récemment été soumise
- Si les schémas de sortie se généralisent, les usages suivants deviennent possibles :
- tableau de bord de suivi des issues
- rapport hebdomadaire des tickets terminés
- surveillance et relance par l’IA des tickets bloqués
Défis de l’environnement d’exécution de code
- La sécurité est l’enjeu central : comme on exécute du code généré par l’IA ou par l’utilisateur, il faut concevoir le système de façon à empêcher l’exposition des clés API et des données
- Dans le cas de Lutra, l’environnement d’exécution est conçu selon une approche sandbox, et seul la documentation des appels API est fournie au modèle
- Les environnements d’exécution avec conservation d’état (comme Jupyter) sont coûteux, et pour des sessions longues il faut des propriétés stateless + persistent
- Cela forme une nouvelle catégorie d’AI runtime, dont la conception fait encore l’objet de travaux actifs
Conclusion
- L’approche classique qui consiste à faire traiter au LLM les résultats d’appel d’outils atteint des limites en coût et en précision
- L’orchestration par code permet un traitement simple, extensible et précis
- Les environnements d’exécution de code pour l’IA attirent l’attention en tant que runtimes de nouvelle génération alliant sécurité, persistance et scalabilité
1 commentaires
Avis Hacker News
huggingface smolagentest présenté comme un cas représentatif de cette approche, mais avec le problème que les rollbacks ou récupérations deviennent très difficiles en cas d’échec réel. Une solution de principe existe, comme encapsuler l’ensemble du bloc d’exécution dans une transaction distribuée, mais en pratique le LLM, en essayant de produire du code robuste, s’accorde mal avec ce pattern, ce qui rend le suivi des erreurs et l’identification de leur cause difficiles