Cet article s'adresse à tous ceux qui ont découvert que rendre les outils « utiles » aux LLM les rendait en réalité moins utiles.
TL;DR : J'ai essayé de rendre les outils d'exploration DOM de mes serveurs MCP utiles en ajoutant des interprétations sémantiques à leur sortie. Les outils sont devenus fragiles, spécifiques à des tâches et plus difficiles à utiliser correctement pour les LLM. Supprimer toute interprétation et renvoyer uniquement des faits structurels bruts a rendu le système plus fiable, plus composable et, paradoxalement, plus utile. Cet article explique pourquoi les outils orientés LLM nécessitent des principes de conception fondamentalement différents de ceux des API orientées vers l'humain, et pourquoi les outils « plus stupides » créent des agents plus intelligents.
Partie 1 : Le problème (lecture de 2 min)
Partie 2 : Pourquoi c'est important (lecture de 2 minutes)
Partie 3 : Principes de conception (lecture de 2 minutes)
Partie 4 : Ce que cela signifie pour les constructeurs (lecture de 2 minutes)
Quand j'ai construit pour la première foisrésoudre_conteneurpour Verdex, je voulais que ce soit utile. L'outil parcourt l'arborescence DOM à partir d'un élément cible et renvoie la chaîne ancêtre. Mais je n'ai pas seulement renvoyé des balises et des attributs, j'ai ajouté une interprétation :
{ "type": "product-card", // L'outil devine la signification sémantique "role": "list-item", // L'outil devine l'objectif structurel "confidence": 0,85, // L'outil évalue sa propre supposition "recommendation": "Utilisez ceci comme portée de votre conteneur" }Cela semblait raisonnable. J'aidais le LLM en pré-analysant la structure et en faisant des recommandations. L'outil effectuait le dur travail d'interprétation, le LLM n'avait donc pas à le faire.
Ensuite, je suis passé à la production.
Une page avec des cartes de profil utilisateur. L’outil les a étiquetés en toute confiance comme des fiches produits (confiance : 0,85). Le LLM a fait confiance à l'interprétation de l'outil. Il a généré des sélecteurs limités au mauvais modèle. Les tests ont été mystérieusement interrompus lorsque l'heuristique a échoué dans des cas extrêmes.
Le problème n’était pas que l’interprétation était généralement fausse – elle était généralement juste. Le problème était fondamental : l’interprétation dépend du contexte, et l’outil n’avait pas de contexte.
Prends undivavecdata-testid="carte-produit". Qu'est-ce que cela signifie?
Pour la création de sélecteurs : ce div est un conteneur stable. UtilisergetByTestId("carte-produit")comme votre portée.
Pour les tests visuels : il s’agit d’une limite de composant. Capture d'écran de cette carte entière.
Pour le web scraping : c’est une structure de données. Extrayez les informations sur les produits des descendants.
Pour l'audi...
[Courte citation de 8% de l'article original]