For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navigation principale

Fonctions

Définissez des fonctions, traitez les appels en attente et renvoyez les résultats.

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: true et fournissez output sous 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: false et fournissez dans error un 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 :

Renvoyez le résultat d’une fonction
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.