La granularité des outils dans les agents LLM : ce que 20 configurations de workflow nous ont appris

Ingénierie · 9 min de lecture

La sagesse populaire autour des outils d'agents LLM tend à converger vers l'un de deux slogans : « donnez moins d'outils au modèle pour qu'il ne s'embrouille pas », ou « exposez chaque opération comme un outil pour que le modèle puisse composer librement ». Les deux ont tort de manière intéressante. Nous avons construit AgentDoc – un éditeur de documents piloté par MCP – en partie pour disposer d'un banc d'essai crédible sur cette question, et nous avons exécuté 20 configurations de workflow (A–T) sur 13 scénarios de benchmark afin de voir ce qui fait réellement bouger les choses.

Cet article est un compte rendu de ce que nous avons découvert ; nous nous concentrons ici sur les enseignements pratiques pour quiconque conçoit des outils pour des agents LLM – que ce soit pour un serveur MCP, une API de function-calling, ou un orchestrateur sur mesure.

Le dispositif, en bref

Chaque configuration est une combinaison différente de (a) surface d'outils – atomique vs composite vs mixte ; (b) contrôle du workflow – prompting ReAct pur vs FSM ReAct à états contraints ; et (c) politique de vérification – appel optionnel vs obligatoire de get_document_context après chaque mutation. Les configurations vont d'une référence zero-shot monolithique (un seul outil edit_document géant, sans FSM) jusqu'à un FSM étroitement contrôlé avec 35 primitives atomiques.

Le scoring utilise la distance de Levenshtein sur le document final, plus la consommation de tokens et un décompte explicite des hallucinations (appels d'outils référençant des index qui n'existent pas).

Conclusion 1 : « moins d'outils » gagne sur les tokens, perd sur la précision

La référence monolithique edit_document est de loin la moins chère en tokens – le modèle émet un seul gros appel et c'est terminé. Mais ses scores de Levenshtein sont environ 3× pires que les configurations à outils atomiques sur les tâches multi-étapes, parce que le modèle doit planifier la mutation entière en une seule passe avant, sans aucune possibilité de vérifier l'état intermédiaire.

Sur les documents longs, ce régime échoue purement et simplement : le modèle émet une modification référençant un titre qui n'existe plus à l'offset supposé (parce que des modifications hypothétiques antérieures « dans le même plan » ont décalé les index), et le résultat est un document corrompu sur lequel il est difficile de raisonner, même pour le tour d'agent suivant.

Conclusion 2 : « chaque opération comme un outil » gagne sur la précision, perd sur les tokens – et sur les ruptures

Les outils purement atomiques (un find, un delete_substring, un insert_string distincts, etc.) repoussent la vérification dans la boucle de raisonnement du modèle. Avec des modèles de pointe instruction-tuned, la précision est élevée – mais le nombre de tokens explose, et nous observons une rupture nette autour de surfaces de 25 outils : au-delà, le modèle commence à mal choisir entre des outils quasi synonymes (insert_paragraph vs insert_text vs append_text), ce qui constitue son propre mode de défaillance qui n'apparaît pas dans les configurations à 8 outils.

Le nombre d'outils interagit avec l'entropie de nommage. Vingt outils dont les noms se regroupent sémantiquement (insert_*, append_*, prepend_*) sont plus difficiles pour le modèle que trente outils qui couvrent des verbes manifestement distincts.

Conclusion 3 : un petit ensemble de macros bien nommées est le point d'équilibre idéal

Les configurations qui se classent le plus haut sur le score conjoint précision/tokens partagent une structure : des primitives atomiques pour la longue traîne, plus trois à cinq macros bien nommées pour les chemins courants évidents (replace_all, format_all_matches, convert_paragraph_to_heading). Les macros suppriment les séquences multi-étapes les plus courantes – réduisant 4 allers-retours à 1 – sans forcer le modèle à les composer de zéro.

L'astuce n'est pas le nombre de macros ; c'est que chaque macro doit correspondre à une requête en langage naturel que les utilisateurs formulent réellement. Les macros inventées pour l'élégance du code (« composeFormatBatch ») sont ignorées par le modèle au profit des primitives atomiques. Les macros nommées d'après des requêtes courantes (« remplace tous les X par des Y ») sont utilisées immédiatement et correctement.

Conclusion 4 : la vérification structurelle surpasse la vérification par prompt

Dire au modèle « relis toujours le document avant de muter » fonctionne une partie du temps. Un FSM ReAct à états contraints qui verrouille les outils d'écriture jusqu'à ce qu'un appel à get_document_context soit terminé fonctionne tout le temps. Les configurations FSM réduisent les erreurs d'index halluciné d'environ 14 % dans la condition prompt-seul à moins de 2 % – et le coût est un unique aller-retour supplémentaire tous les quelques tours, ce qui est dérisoire par rapport à une modification corrompue.

C'est l'enseignement pratique le plus fort de toute l'étude : si votre agent opère contre un état sensible aux index (un document, un buffer, un arbre syntaxique), ne vous fiez pas aux prompts seuls. Rendez la vérification structurellement inévitable dans la surface d'outils elle-même.

Conclusion 5 : la dérive d'index est un bug de conception d'outils, pas un bug du modèle

Nous avons constaté à plusieurs reprises que les configurations les moins performantes n'étaient pas « faibles » selon une quelconque métrique de capacité – elles exposaient simplement des outils dont les contrats permettaient au modèle de réussir localement et d'échouer globalement. Un outil qui prend un index de caractère et renvoie un succès sans dire au modèle que tout ce qui suit cet index a été décalé est le bug. Les modèles de pointe finiront par apprendre à compenser. Votre surface d'outils ne devrait pas les y obliger.

Concrètement : chaque outil de mutation dans AgentDoc renvoie une charge utile structurée qui inclut un descripteur de plage modifiée ({shifted_after: 412, delta: -23}). L'appel d'outil suivant le voit, et le FSM impose une relecture. Les hallucinations sont tombées proches du plancher en conséquence.

Ce que cela signifie si vous construisez un agent

Trois règles empiriques valant plus que n'importe quel chiffre spécifique ci-dessus :

Le prochain article de cette série porte sur l'architecture voice-first – y compris pourquoi nous avons choisi de relier Gemini Live directement à la surface MCP plutôt que via un proxy de transcription. Cette décision découle exactement des conclusions ci-dessus.

← Notes de version – avril 2026 Suivant : l'édition de documents voice-first →