Usiamo i cookie. Cookie e memoria del browser ti mantengono connesso e ricordano le tue preferenze. Con il tuo consenso misuriamo anche come viene usato il sito. Puoi in qualsiasi momento. Consulta la nostra cookie policy.

Tool calling

Endpoint

Tool calling

Lascia che i modelli chiamino le tue funzioni con il formato tools di OpenAI: parametri, ciclo di chiamata, streaming dei tool call e gestione degli errori.

Provalo nel playground

Il tool calling (function calling) permette a un modello di chiedere al tuo codice di eseguire una funzione e di usare poi il risultato nella sua risposta. api14 usa il formato tools di OpenAI per ogni modello che supporta gli strumenti: OpenAI, Anthropic, Google, Mistral, Qwen, DeepSeek e altri. Per trovare i modelli compatibili con gli strumenti, filtra per parametri supportati nell'elenco Modelli (supported_parameters include tools).

Parametri della richiesta

ParametroTipoDescrizione
toolsarray[{ "type": "function", "function": { "name", "description", "parameters" } }], dove parameters è uno JSON Schema.
tool_choicestring | object"auto" (predefinito), "none", "required", oppure { "type": "function", "function": { "name": "get_weather" } }.
parallel_tool_callsbooleanConsente più chiamate di strumento in un solo turno (predefinito true dove supportato).
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);

Il ciclo

  1. Invia messages e tools.
  2. Se la risposta ha finish_reason: "tool_calls", esegui ogni voce in message.tool_calls.
  3. Aggiungi il messaggio dell'assistente, poi un messaggio { "role": "tool", "tool_call_id", "content" } per ogni chiamata, e invia di nuovo la richiesta.
  4. Ripeti finché il modello risponde con un normale contenuto.

Risposta con una chiamata di strumento:

{
  "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 richiesta successiva include il risultato dello strumento:

{
  "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\"}" }
  ]
}

Continua a inviare tools a ogni richiesta del ciclo. Molti provider rifiutano un messaggio tool se la richiesta non contiene le definizioni di tools.

Suggerimenti

  • arguments è una stringa di JSON. Analizzala e validala, perché i modelli possono produrre JSON non valido.
  • In streaming, le chiamate di strumento arrivano in frammenti delta.tool_calls indicizzati da index. Unisci le stringhe arguments prima di analizzarle.
  • Per instradare solo verso provider che supportano gli strumenti, imposta provider: { "require_parameters": true }. Vedi Instradamento dei provider.
  • Ogni iterazione del ciclo è una richiesta fatturata separatamente.

Errori

Un modello che non supporta gli strumenti può restituire un 400 o 404 dell'upstream ("No endpoints found that support tool use"). Gli altri errori sono gli stessi di Chat completions. Vedi Errori.