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 :
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énementstool.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 surreturn-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.