Les outils de type fonction permettent à un agent d’appeler le code de votre application. Vous définissez la fonction et ses arguments. L’agent demande un appel, votre code renvoie un résultat, puis le harnais poursuit le tour.
Votre gestionnaire peut s’exécuter sur un serveur d’applications, dans un worker ou dans un environnement que vous contrôlez. Associer un environnement à une session n’y exécute pas automatiquement les outils de type fonction.
Si vous utilisez l’appel de fonction dans l’API Responses, vous pouvez réutiliser votre implémentation de fonction avec le déroulement de session décrit ici.
Définissez une fonction
Ajoutez une définition de fonction à agent.tools lorsque vous configurez l’agent. Donnez-lui un nom, une description et un schéma JSON Schema pour ses arguments :
{
"type": "function",
"name": "get_customer",
"description": "Look up a customer by ID.",
"parameters": {
"type": "object",
"properties": { "customer_id": { "type": "string" } },
"required": ["customer_id"],
"additionalProperties": false
}
}
Traitez les actions requises
Lorsque l’agent a besoin du résultat d’une fonction, la session émet agent.session.requires_action. Lisez les appels en attente dans event.session.required_actions. Vous pouvez aussi récupérer la session et lire session.required_actions sans diffusion en continu.
Une entrée de fonction dans required_actions se présente ainsi :
{
"type": "function_call",
"turn_id": "turn_123",
"call_id": "call_123",
"name": "get_customer",
"arguments": { "customer_id": "123" }
}
Exécutez la fonction indiquée avec les arguments fournis. Utilisez required_actions pour déterminer quels appels nécessitent des résultats ; la seule présence d’un élément function_call dans l’historique de la session ne permet pas d’établir qu’un résultat est attendu.
Renvoyez le résultat
Envoyez agent.session.input.tool_result au point de terminaison des événements de session. Copiez turn_id et call_id depuis l’action en attente :
- En cas de réussite, utilisez
success: trueet fournissezoutputsous forme de chaîne de caractères ou de tableau de contenu pris en charge. Sérialisez les objets JSON en chaînes de caractères. - En cas d’erreur, utilisez
success: falseet fournissez danserrorun message que l’agent peut exploiter.
Pour chaque appel get_customer en attente, effectuez votre recherche et renvoyez son résultat. Ici, action correspond à l’entrée de required_actions :
const result = {
turn_id: action.turn_id,
call_id: action.call_id,
};
let outcome;
outcome = {
success: true,
output: JSON.stringify(getCustomer(action.arguments)),
};
await client.beta.agents.sessions.events.create(sessionId, {
events: [
{ type: "agent.session.input.tool_result", ...result, ...outcome },
],
});Le harnais poursuit le tour après avoir reçu les résultats requis. Suivez les événements et éléments de session pour vérifier l’issue du tour et récupérer sa sortie.
Reprenez après une déconnexion
Récupérez la session pour trouver les actions en attente. Si vous avez déjà exécuté une fonction, soumettez son résultat enregistré avec les mêmes valeurs turn_id et call_id.
Pour les fonctions ayant des effets de bord, enregistrez les résultats de manière persistante, en les indexant par identifiants de session, de tour et d’appel. Si l’exécution a pu réussir sans qu’un résultat ait été enregistré, vérifiez son issue avant de relancer la fonction.
Chargez les fonctions à la demande
Par défaut, les fonctions sont chargées immédiatement. Pour différer le chargement d’une fonction, ajoutez defer_loading: true à sa définition et incluez { "type": "tool_search" } dans agent.tools. Consultez Recherche d’outils pour un exemple complet.