OneProvider

Uso de herramientas

Añade function calling a tu app: define herramientas, lee bloques tool_use, controla tool_choice y haz llamadas en paralelo, al estilo Anthropic y OpenAI.

Function calling en el endpoint nativo de Anthropic. La API normaliza tool_choice para que los SDK antiguos que emiten {type:any} o {type:tool} sigan funcionando.

Todos los modelos, capacidades y precios Índice de la documentación para agentes de IA: https://oneprovider.dev/docs/llms.txt

Forma de la solicitud

Declara las herramientas como un arreglo. Cada herramienta tiene un name, una description y un input_schema en JSON Schema. El modelo emite un bloque de contenido tool_use cada vez que decide llamar a una.

json
{
"model": "claude-sonnet-5-5",
"max_tokens": 1024,
"tools": [
{
"name": "get_weather",
"description": "Return current weather for a city.",
"input_schema": {
"type": "object",
"properties": {
"city": { "type": "string" },
"units": { "type": "string", "enum": ["c", "f"] }
},
"required": ["city"]
}
}
],
"messages": [
{ "role": "user", "content": "What's the weather in Berlin in celsius?" }
]
}

Respuesta con una llamada a una herramienta

json
{
"id": "msg_01...",
"stop_reason": "tool_use",
"content": [
{ "type": "text", "text": "Let me check that for you." },
{
"type": "tool_use",
"id": "toolu_bdrk_01...",
"name": "get_weather",
"input": { "city": "Berlin", "units": "c" }
}
]
}

Continuar el ciclo

Cuando tu código ejecute la herramienta, devuelve el resultado como un mensaje user que contenga un bloque tool_result. Entonces el modelo emite otra llamada a una herramienta o una respuesta de texto final.

json
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_bdrk_01...",
"content": "{\"city\":\"Berlin\",\"temp_c\":18,\"sky\":\"clear\"}"
}
]
}

tool_choice: cómo lo normalizamos

Anthropic acepta cuatro formas de tool_choice. La API de OneProvider acepta las cuatro desde tu cliente, pero pasa dos de ellas al modelo en otra forma:

Datos de referencia
El cliente envíaEl modelo recibePor qué
{"type":"auto"} (o ausente)sin cambiosEl modelo decide: el caso normal.
{"type":"none"}sin cambiosFuerza una respuesta solo de texto.
{"type":"any"}{"type":"auto"} + indicación del sistemaNo todos los modelos admiten llamadas forzadas a herramientas; la indicación le dice al modelo “you MUST call a tool” (debes llamar a una herramienta).
{"type":"tool","name":"X"}{"type":"auto"} + indicación del sistemaIgual; la indicación nombra la herramienta.
Por qué importa Sin esta reescritura, tool_choice:any y tool_choice:tool fallarían en algunos modelos. Con auto y una indicación de sistema firme, cerca del 95 % de estas solicitudes funcionan en nuestras pruebas. Si ves que una llamada a una herramienta que esperabas se sustituye por texto, la indicación no bastó para orientar al modelo: afina tu prompt de usuario o cambia a un modelo más capaz.

Llamadas paralelas a herramientas

Una misma respuesta puede contener varios bloques tool_use: el modelo decide si hace varias llamadas en paralelo. Ejecútalas todas y devuelve un único mensaje user con varios bloques tool_result (uno por tool_use_id). El orden no importa.

Nombres de herramientas

  • Los nombres distinguen mayúsculas de minúsculas y pasan tal cual: el modelo repite lo que registraste.
  • Funcionan tanto snake_case como PascalCase. La CLI de Claude Code usa PascalCase (Read, Bash, Edit); los SDK genéricos suelen usar snake_case.
  • Mantén los nombres por debajo de 64 caracteres y en ASCII [a-zA-Z0-9_].

Llamadas a herramientas al estilo OpenAI

En el endpoint /v1/chat/completions , usa la forma estándar de OpenAI con tools / tool_calls: la traducimos por dentro a bloques tool_use de Anthropic.

Respuestas rápidas

¿Qué base URL uso?

Claude Code y los SDK de Anthropic usan https://api.oneprovider.dev. Los SDK de OpenAI y los clientes compatibles con OpenAI usan https://api.oneprovider.dev/v1. Una misma clave funciona con ambas; la lista de modelos está en la página de modelos y las tarifas, en la página de precios .

¿Cómo me autentico?

Envía la clave sk-… tal cual en x-api-key o en Authorization: Bearer: en uno de los dos, nunca en ambos. Guarda la clave en una variable de entorno, no en un archivo que se suba al repositorio. Más sobre la autenticación .

¿Dónde obtengo una clave?

Abre tu panel en el bot de Telegram @oneprovider_robot o en app.oneprovider.dev, recarga el saldo y pulsa “Emitir una clave”. Cada clave puede tener su propio límite de gasto. Panel y claves de API .

¿Qué significan 401, 404 y 429?

401: falta la clave, está mal escrita o se envió en un encabezado equivocado; pega la clave completa, sin comillas ni espacios. 404: casi siempre es una base URL incorrecta, por ejemplo con /v1 ausente o duplicado. 429 con “Insufficient balance”: se agotó el saldo del panel o el límite de gasto de la clave, así que recarga en lugar de reintentar; cualquier otro 429 es un límite de frecuencia, así que espera según Retry-After. Detalles: códigos de error y solución de problemas .

¿Por qué se cortan o se reinician los streams?

Las VPN y los proxies VLESS suelen almacenar SSE en búfer o romper la negociación de HTTP/2. OneProvider no tiene restricciones regionales y no almacena los streams en búfer: desactiva el proxy y reintenta.

¿Dónde pregunto si esto no basta?

Escribe a @Oneproviderhelpbot en Telegram o abre “Soporte” en el panel web, con el código de estado HTTP y el mensaje de error exacto. Cómo funciona el soporte .

Última actualización: 2026-11-08 ¿Encontraste un error? @Oneproviderhelpbot