View a markdown version of this page

Découverte d'outils - AWS Conseils prescriptifs

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Découverte d'outils

Il existe trois approches pour découvrir et enregistrer des outils dans votre agent auprès des serveurs MCP : définition statique, découverte dynamique et fonction de recherche.

Définition statique

Tout d'abord, vous pouvez définir statiquement les outils disponibles directement dans le code de l'agent. Dans cette approche, vous définissez un outil distant (un objet de référence côté client dans un framework tel que Strands Agent SDK) pour chaque outil fourni par le serveur MCP auquel un client MCP accède. L'exemple suivant utilise le transport HTTP streamable :

from mcp.client.streamable_http import streamablehttp_client from strands import Agent from strands.tools.mcp import MCPClient streamable_http_mcp_client = MCPClient( lambda: streamablehttp_client("https://mcp1:8000/mcp") ) reverse_text = RemoteTool( name="reverseText", client=streamable_http_mcp_client ) agent = Agent(tools=[reverse_text])

L'enregistrement individuel des outils vous permet d'être très sélectif quant aux outils que vous mettez à la disposition du LLM, ce qui minimise le nombre de fenêtres contextuelles utilisées. L'inconvénient est que cela nécessite de connaître le nom des outils disponibles et peut être fragile si les outils disponibles changent sur le serveur MCP.

Découverte dynamique

L'approche suivante consiste à utiliser la découverte dynamique et à enregistrer tous les outils disponibles auprès de l'agent. Cette approche utilise le contexte de manière linéaire à mesure que de nouveaux outils sont ajoutés au serveur MCP. Voici un exemple de cette approche :

from mcp.client.streamable_http import streamablehttp_client from strands import Agent from strands.tools.mcp import MCPClient streamable_http_mcp_client = MCPClient( lambda: streamablehttp_client("https://mcp1:8000/mcp") ) with streamable_http_mcp_client: tools = streamable_http_mcp_client.list_tools_sync() agent = Agent(tools=tools)

Imaginons un scénario dans lequel une définition d'outil typique consomme environ 250 à 500 jetons (y compris le nom, la description et le schéma). L'enregistrement de 20 outils consommerait entre 5 000 et 10 000 jetons de votre fenêtre contextuelle. Lorsque vous disposez d'un petit nombre de serveurs MCP et que vous contrôlez le nombre d'outils, cette option est la plus simple à mettre en œuvre. Toutefois, si l'on s'attend à ce que la liste des outils augmente, cela peut créer des problèmes de gestion du contexte silencieux chez vos agents. Une autre variante de cette approche consiste à utiliser un paramètre de filtre d'outil lors de l'appellist_tools, tel que celui fourni par le SDK Strands Agents, afin de réduire le nombre d'outils enregistrés auprès de l'agent.

La troisième option consiste à utiliser une fonction de recherche pour trouver les outils pertinents pendant l'exécution. Vous listez tous les outils disponibles sur votre serveur MCP, puis vous effectuez une recherche sémantique sur ces outils en fonction de l'invite de l'utilisateur. Ensuite, les outils obtenus sont enregistrés auprès de votre agent. Amazon Bedrock AgentCore Gateway fournit une fonctionnalité de recherche sémantique native qui peut faciliter la mise en œuvre de ce type de solution.

Bonnes pratiques pour la découverte d'outils MCP

  • Préservation de la fenêtre contextuelle — Choisissez une approche de découverte et d'enregistrement d'outils qui préserve autant que possible votre fenêtre contextuelle.

  • Utilisez des fonctionnalités de filtrage d'outils ou de recherche sémantique — Fournissez dynamiquement au LLM un ensemble d'outils parmi lesquels choisir, ce qui améliore sa précision et son efficacité lorsqu'il s'agit de choisir le bon outil. Le filtrage des outils peut fonctionner sur les noms des outils (correspondance exacte ou modèles), les descriptions des outils (correspondance sémantique) ou les balises de domaine ou de catégorie. La recherche sémantique est particulièrement efficace pour faire correspondre l'intention de l'utilisateur aux descriptions des outils. Les deux approches réduisent l'utilisation des fenêtres contextuelles.