Anti-Pattern Too Many Tools : trop d’outils

Quand un agent possède trop d’outils disponibles.
Sur cette page
  1. Idée en 30 secondes
  2. Exemple de l'anti-pattern
  3. Pourquoi cela arrive et ce qui se passe mal
  4. Bonne approche
  5. Test rapide
  6. Différence avec les autres anti-patterns
  7. Tool Calling Everywhere vs Too Many Tools
  8. Multi-Agent Overkill vs Too Many Tools
  9. Giant System Prompt vs Too Many Tools
  10. Auto-vérification : avez-vous cet anti-pattern ?
  11. FAQ
  12. Et ensuite

Idée en 30 secondes

Too Many Tools est un anti-pattern où un agent reçoit trop d'outils sans frontières claires par type de tâche.

Le résultat est un bruit de sélection d'action : l'agent choisit plus souvent un outil non pertinent et consomme des étapes à re-sélectionner. Cela augmente la latency, le cost et l'instabilité de la réponse.

Règle simple : pour chaque scénario, l'agent ne doit voir que l'ensemble minimal d'outils réellement nécessaires.


Exemple de l'anti-pattern

L'équipe construit un agent support pour les demandes liées aux commandes, retours et paiements.

Au lieu d'un ensemble réduit, l'équipe donne à l'agent une grande liste d'outils "pour tous les cas".

PYTHON
response = agent.run(
    "User: Pourquoi le paiement de la commande #8341 échoue ?"
)

Dans ce schéma, l'agent a des dizaines d'options et peut partir dans la mauvaise direction :

PYTHON
tools = ["get_payment_status", "get_invoice", "get_order"]
selected_tool = agent.pick_tool(tools)
result = run_tool(selected_tool, order_id)

# l'agent peut choisir get_invoice d'abord,
# ne pas trouver la cause de l'échec,
# puis seulement passer à get_payment_status

Pour ce cas, une route courte avec quelques outils suffit :

PYTHON
payment_data = get_payment_status(order_id)
return format_payment_answer(payment_data)

Ici, l'excès d'outils ajoute :

  • du bruit dans le choix des actions
  • des appels d'outil inutiles
  • un risque plus élevé de mauvais routage

Pourquoi cela arrive et ce qui se passe mal

Cet anti-pattern apparaît souvent quand une équipe essaie de construire immédiatement un agent "universel" pour toutes les demandes.

Causes typiques :

  • ajout de nouveaux outils sans retirer les anciens
  • absence d'allowlist d'outils par type de tâche
  • peur que "un seul outil ne suffise pas"
  • copie de gros toolsets de démos sans valider les cas production

Cela crée des problèmes :

  • sélection instable - l'agent choisit un outil qui correspond formellement, mais n'est pas le meilleur
  • latency plus élevée - boucle de sélection et appels répétés prennent plus de temps
  • cost plus élevé - étapes tool ou LLM inutiles pour une demande typique
  • contexte gonflé - le prompt contient trop de descriptions d'outils et de résultats intermédiaires
  • debug difficile - difficile d'expliquer pourquoi l'agent a choisi ce chemin

Signaux production typiques montrant qu'il y a déjà trop d'outils :

  • une demande utilisateur typique lance 3-5 appels d'outil alors que 1-2 suffiraient
  • une même tâche passe par des chemins différents selon les runs
  • l'équipe ne peut pas expliquer clairement pourquoi l'outil A est choisi au lieu de l'outil B
  • l'ajout d'un nouvel outil dégrade la quality des scénarios existants

Au final, l'agent passe plus d'étapes à choisir l'action qu'à résoudre la tâche elle-même. Point important : le choix d'outil fait partie de l'inference LLM. Le modèle choisit une action parmi les options visibles dans le prompt. Quand le nombre d'outils augmente, le nombre de chemins possibles augmente aussi, et le choix devient moins stable : le modèle choisit plus souvent un outil qui semble convenir, mais n'est pas le meilleur.

Quand ce schéma grossit, sans trace ni visualisation d'exécution, il devient difficile de comprendre pourquoi l'agent a choisi ce chemin d'outils. C'est pourquoi les systèmes de production ont généralement une couche d'observabilité dédiée aux runs d'agents.

Bonne approche

Commencez par la route la plus simple qui couvre de façon stable la majorité des demandes actuelles. Ajoutez des outils uniquement lorsqu'il existe un échec mesurable, un risque ou une limite du design actuel.

Cadre pratique :

  • définissez une tool allowlist claire pour chaque type de tâche
  • gardez un petit ensemble d'outils sur chaque route
  • ajoutez un nouvel outil seulement avec une raison mesurable (par exemple amélioration de success rate ou réduction d'erreurs sans forte hausse de latency et de cost per request)
PYTHON
def answer_payment_question(order_id: str, user_message: str) -> str:
    route = classify_intent(user_message)  # classifieur simple ou règles

    if route == "payment_status":
        allowed_tools = ["get_payment_status"]
        data = run_tool("get_payment_status", order_id)
        return format_payment_answer(data)

    allowed_tools = ["get_payment_status", "get_invoice"]
    return agent.run(
        user_message=user_message,
        allowed_tools=allowed_tools,
    )

Dans ce schéma, l'agent travaille avec un ensemble d'outils réduit et pertinent, donc le choix d'action devient plus stable.

Test rapide

Si vous répondez "oui" à ces questions, vous avez un risque too-many-tools :

  • Une demande typique nécessite-t-elle régulièrement 3+ appels d'outil alors que 1-2 devraient suffire ?
  • La même demande suit-elle des chemins d'outils différents selon les runs ?
  • Les nouveaux outils sont-ils ajoutés plus vite que l'équipe ne peut les limiter, retirer ou revoir ?

Différence avec les autres anti-patterns

Tool Calling Everywhere vs Too Many Tools

Tool Calling EverywhereToo Many Tools
Problème principal : les outils sont appelés même quand un reasoning ou un workflow simple suffit.Problème principal : il y a trop d'outils, et l'agent choisit entre eux de façon instable.
Quand il apparaît : quand presque chaque demande est automatiquement convertie en appel d'outil.Quand il apparaît : quand une route possède un ensemble d'outils surchargé sans allowlist claire.

Multi-Agent Overkill vs Too Many Tools

Multi-Agent OverkillToo Many Tools
Problème principal : trop d'agents et coordination complexe entre rôles.Problème principal : surcharge d'outils à l'intérieur d'une route agent.
Quand il apparaît : quand une demande passe par trop de handoffs entre agents.Quand il apparaît : quand l'agent essaie plusieurs tools de suite pour trouver le bon.

Giant System Prompt vs Too Many Tools

Giant System PromptToo Many Tools
Problème principal : un grand system prompt avec des instructions conflictuelles.Problème principal : l'agent voit trop d'outils et se trompe dans le choix d'action.
Quand il apparaît : quand de nouvelles règles sont ajoutées en continu dans un prompt monolithique.Quand il apparaît : quand on ajoute des tools sans réviser les outils obsolètes ou dupliqués.

Auto-vérification : avez-vous cet anti-pattern ?

Vérification rapide de l'anti-pattern Too Many Tools.
Cochez les points pour votre système et regardez le statut ci-dessous.

Vérifiez votre système :

Progression: 0/8

⚠ Il y a des signes de cet anti-pattern

Essayez de déplacer les étapes simples dans un workflow et de garder l'agent uniquement pour les décisions complexes.

FAQ

Q : Est-ce que cela veut dire que beaucoup d'outils est toujours mauvais ?
R : Non. Le problème n'est pas le nombre en soi. Le problème est que l'agent voit trop d'options non pertinentes dans un scénario donné.

Q : Quand ajouter un nouvel outil ?
R : Quand il existe un signal concret : lacunes de couverture, échecs de quality ou limites de route que l'ensemble actuel ne peut pas couvrir sans croissance disproportionnée de latency, de cost ou de complexité de debugging.

Q : Comment réduire le chaos de sélection d'outils sans gros refactor ?
R : Commencez simplement : mettez une allowlist par type de tâche, fixez une limite de steps, et retirez les tools rarement utilisés ou redondants.


Et ensuite

Anti-patterns proches :

Ce qu'il faut construire à la place :

  • Allowed Actions - comment définir des limites claires de ce que l'agent peut faire.
  • Routing Agent - comment router les tâches et n'exposer à l'agent que les outils pertinents.
  • Tool Execution Layer - où contrôler les appels d'outils et les politiques d'accès dans l'architecture.
⏱️ 8 min de lectureMis à jour 16 mars 2026Difficulté: ★★★
Implémenter dans OnceOnly
Safe defaults for tool permissions + write gating.
Utiliser dans OnceOnly
# onceonly guardrails (concept)
version: 1
tools:
  default_mode: read_only
  allowlist:
    - search.read
    - kb.read
    - http.get
writes:
  enabled: false
  require_approval: true
  idempotency: true
controls:
  kill_switch: { enabled: true, mode: disable_writes }
audit:
  enabled: true
Intégré : contrôle en productionOnceOnly
Ajoutez des garde-fous aux agents tool-calling
Livrez ce pattern avec de la gouvernance :
  • Budgets (steps / plafonds de coût)
  • Permissions outils (allowlist / blocklist)
  • Kill switch & arrêt incident
  • Idempotence & déduplication
  • Audit logs & traçabilité
Mention intégrée : OnceOnly est une couche de contrôle pour des systèmes d’agents en prod.
Auteur

Cette documentation est organisée et maintenue par des ingénieurs qui déploient des agents IA en production.

Le contenu est assisté par l’IA, avec une responsabilité éditoriale humaine quant à l’exactitude, la clarté et la pertinence en production.

Les patterns et recommandations s’appuient sur des post-mortems, des modes de défaillance et des incidents opérationnels dans des systèmes déployés, notamment lors du développement et de l’exploitation d’une infrastructure de gouvernance pour les agents chez OnceOnly.