Usamos cookies. Las cookies y el almacenamiento del navegador mantienen tu sesión iniciada y recuerdan tus preferencias. Con tu permiso, también medimos cómo se usa el sitio. Puedes en cualquier momento. Consulta nuestra política de cookies.

Llamadas a herramientas

Endpoints

Llamadas a herramientas

Deja que los modelos llamen a tus funciones con el formato tools de OpenAI: parámetros, el bucle de llamadas, tool_choice y consejos con streaming.

Pruébalo en el playground

Las llamadas a herramientas (function calling) permiten que un modelo pida a tu código que ejecute una función y luego use el resultado en su respuesta. api14 usa el formato tools de OpenAI para todos los modelos que admiten herramientas: OpenAI, Anthropic, Google, Mistral, Qwen, DeepSeek y otros. Para encontrar modelos con soporte de herramientas, filtra por parámetros admitidos en la lista de Modelos (supported_parameters incluye tools).

Parámetros de la petición

ParámetroTipoDescripción
toolsarray[{ "type": "function", "function": { "name", "description", "parameters" } }], donde parameters es un JSON Schema.
tool_choicestring | object"auto" (por defecto), "none", "required", o { "type": "function", "function": { "name": "get_weather" } }.
parallel_tool_callsbooleanPermite varias llamadas a herramientas en un mismo turno (por defecto true donde se admita).
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);

El bucle

  1. Envía messages y tools.
  2. Si la respuesta tiene finish_reason: "tool_calls", ejecuta cada entrada de message.tool_calls.
  3. Añade el mensaje del asistente, luego un mensaje { "role": "tool", "tool_call_id", "content" } por cada llamada, y envía la petición de nuevo.
  4. Repite hasta que el modelo responda con contenido de texto.

Respuesta con una llamada a herramienta:

{
  "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 petición siguiente incluye el resultado de la herramienta:

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

Sigue enviando tools en cada petición del bucle. Muchos proveedores rechazan un mensaje tool si la petición no incluye definiciones en tools.

Consejos

  • arguments es un string de JSON. Analízalo y valídalo, porque los modelos pueden producir JSON no válido.
  • Con streaming, las llamadas a herramientas llegan en fragmentos de delta.tool_calls identificados por index. Une los strings de arguments antes de analizarlos.
  • Para enrutar solo a proveedores que admitan herramientas, establece provider: { "require_parameters": true }. Consulta Enrutamiento de proveedores.
  • Cada iteración del bucle es una petición facturada por separado.

Errores

Un modelo que no admite herramientas puede devolver un 400 o 404 del proveedor ("No endpoints found that support tool use"). Los demás errores son los mismos que en Chat completions. Consulta Errores.