Nous utilisons des cookies. Les cookies et le stockage du navigateur vous gardent connecté et mémorisent vos préférences. Avec votre accord, nous mesurons aussi l’utilisation du site. Vous pouvez à tout moment. Consultez notre politique relative aux cookies.

Appel d'outils

Endpoints

Appel d'outils

Laissez les modèles appeler vos fonctions avec le format tools d'OpenAI : paramètres, boucle d'appel, tool_choice, streaming et gestion des erreurs.

Essayer dans le playground

L'appel d'outils (function calling) permet à un modèle de demander à votre code d'exécuter une fonction, puis d'utiliser le résultat dans sa réponse. api14 utilise le format tools d'OpenAI pour tous les modèles qui prennent en charge les outils : OpenAI, Anthropic, Google, Mistral, Qwen, DeepSeek et d'autres. Pour trouver les modèles compatibles avec les outils, filtrez par paramètres pris en charge dans la liste des Modèles (supported_parameters contient tools).

Paramètres de la requête

ParamètreTypeDescription
toolsarray[{ "type": "function", "function": { "name", "description", "parameters" } }], où parameters est un JSON Schema.
tool_choicestring | object"auto" (par défaut), "none", "required", ou { "type": "function", "function": { "name": "get_weather" } }.
parallel_tool_callsbooleanAutorise plusieurs appels d'outils dans un même tour (true par défaut quand c'est pris en charge).
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api14.com/api/v1",
  apiKey: process.env.API14_API_KEY,
});

const result = await client.chat.completions.create({
  "model": "openai/gpt-5-mini",
  "messages": [
    {
      "role": "user",
      "content": "What is the weather in Istanbul?"
    }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Get the current weather",
        "parameters": {
          "type": "object",
          "properties": {
            "city": {
              "type": "string"
            }
          },
          "required": [
            "city"
          ]
        }
      }
    }
  ]
});
console.log(result.choices[0].message.tool_calls);

La boucle

  1. Envoyez messages et tools.
  2. Si la réponse a finish_reason: "tool_calls", exécutez chaque entrée de message.tool_calls.
  3. Ajoutez le message de l'assistant, puis un message { "role": "tool", "tool_call_id", "content" } par appel, et renvoyez la requête.
  4. Répétez jusqu'à ce que le modèle réponde par du contenu simple.

Réponse avec un appel d'outil :

{
  "id": "gen-1760000000-tool1",
  "model": "anthropic/claude-sonnet-4.5",
  "choices": [
    {
      "index": 0,
      "finish_reason": "tool_calls",
      "message": {
        "role": "assistant",
        "content": null,
        "tool_calls": [
          {
            "id": "call_01",
            "type": "function",
            "function": { "name": "get_weather", "arguments": "{\"city\":\"Istanbul\"}" }
          }
        ]
      }
    }
  ],
  "usage": { "prompt_tokens": 182, "completion_tokens": 21, "total_tokens": 203, "cost": 0.000861 }
}

La requête suivante inclut le résultat de l'outil :

{
  "model": "anthropic/claude-sonnet-4.5",
  "tools": [ ... same tools ... ],
  "messages": [
    { "role": "user", "content": "What's the weather in Istanbul?" },
    { "role": "assistant", "content": null, "tool_calls": [ { "id": "call_01", "type": "function", "function": { "name": "get_weather", "arguments": "{\"city\":\"Istanbul\"}" } } ] },
    { "role": "tool", "tool_call_id": "call_01", "content": "{\"temp_c\": 21, \"sky\": \"clear\"}" }
  ]
}

Continuez à envoyer tools à chaque requête de la boucle. De nombreux fournisseurs rejettent un message tool si la requête n'a pas de définitions tools.

Conseils

  • arguments est une chaîne de JSON. Analysez-la et validez-la, car les modèles peuvent produire du JSON invalide.
  • En streaming, les appels d'outils arrivent dans des fragments delta.tool_calls indexés par index. Concaténez les chaînes arguments avant de les analyser.
  • Pour ne router que vers les fournisseurs qui prennent en charge les outils, définissez provider: { "require_parameters": true }. Voir Routage des fournisseurs.
  • Chaque itération de la boucle est une requête facturée séparément.

Erreurs

Un modèle qui ne prend pas en charge les outils peut renvoyer un 400 ou 404 du fournisseur (« No endpoints found that support tool use »). Les autres erreurs sont les mêmes que pour les Chat completions. Voir Erreurs.