Passer au contenu principal
Définissez un outil quand un agent doit lire des données de l’application, appeler un service interne ou effectuer une action. Le modèle appelle l’outil par son ID ; le SDK vérifie les arguments, exécute votre code dans votre processus et renvoie le résultat au tour suivant.

Définir un outil

Champs d’un outil

Les schémas acceptent le validateur natif de chaque langage : en TypeScript, une fonction ou un objet avec parse() ou safeParse() ; en Python, un callable, un modèle Pydantic ou un objet avec parse ou safe_parse ; ailleurs, une fonction ou un callable qui renvoie la valeur ou lève une exception.

Effet d’un délai d’expiration

Un appel à un ID d’outil absent de la liste d’outils courante fait échouer l’exécution (unknown tool en Go, Unknown tool '<name>' en C#, PHP, Ruby et Java, Unknown tool: <name> sous forme d’AgentError en Rust). En TypeScript avec return-to-model, un outil inconnu ou des arguments illisibles reçoivent à la place la même réponse qu’une erreur d’outil.

Exiger une approbation

Mettez l’indicateur d’approbation d’un outil à true, ou donnez-lui une fonction qui décide pour chaque appel. Une fonction d’approbation au niveau de l’agent, quand le langage en a une, s’applique à tous les outils et prime sur les deux. Un appel soumis à approbation met l’exécution en pause avec le statut waiting_for_human ; approuvez-le ou rejetez-le par ID d’appel dans État et approbation.

Confier un appel à une personne ou à un autre système

Un outil manuel n’a pas d’exécuteur : votre application, une file d’attente ou un autre service fait le travail. Un outil interactif exécute un hook qui peut se mettre en pause pour une personne. Dans les deux cas, l’exécution reste en pause jusqu’à ce que vous la repreniez avec une sortie d’outil pour l’ID d’appel ; voir État et approbation. Si le hook interactif renvoie plutôt une valeur, elle devient immédiatement le résultat de l’outil. Après la reprise, onResponseReceived (ou l’équivalent du langage) peut valider ou transformer la sortie fournie avant que le validateur de sortie la vérifie. L’outil externe Rust ne prend pas d’exécuteur :
Si un même tour du modèle mélange des outils automatiques et des outils en attente, le runtime exécute les outils automatiques avant de renvoyer la pause.

Signaler la progression et mettre à jour le contexte

Un outil peut publier des résultats préliminaires pendant qu’il travaille et remplacer le contexte applicatif pour les tours suivants. La progression apparaît sous forme d’événements tool.preliminary_result (voir Streaming), vérifiés par le validateur d’événements quand vous en définissez un.

Se remettre des erreurs d’outil

Par défaut, une erreur levée par un outil fait échouer l’exécution et est relancée. Définissez la politique d’erreur de l’outil sur return-to-model pour renvoyer l’erreur comme résultat de l’outil ({"error": "..."}) afin que le modèle puisse essayer autre chose. Gardez le comportement par défaut pour les échecs dangereux ou irrécupérables. En TypeScript, toolExecution.maxOutputChars limite la part de la sortie d’un outil que voit le modèle ; une sortie plus longue garde son début et sa fin autour d’un avis.

Exécuter les outils en parallèle

Quand un tour du modèle appelle plusieurs outils indépendants, définissez une limite de concurrence pour les exécuter en même temps. Go, C#, Ruby et Java exécutent les outils un par un tant que vous ne le faites pas. Les résultats sont ajoutés dans l’ordre des appels du modèle, quel que soit leur ordre de fin. En Go et en C#, si plusieurs outils concurrents définissent le contexte, le dernier dans l’ordre des appels l’emporte.
Dernière modification le 5 novembre 2026