JSON Schema a definición de tool de LLM: OpenAI, Claude, Gemini
Estás construyendo una app en la que el bot puede ejecutar tu función (consultar el tiempo, guardar algo en una base de datos, enviar un correo). El nombre oficial es function calling (OpenAI y Google) o tool use (Anthropic). Para decirle al bot qué puede llamar, describes cada función en JSON Schema, un formato que el bot entiende: *"este es el nombre de la función, estos son sus argumentos, estos son los tipos obligatorios"*.
El problema: cada proveedor se atiene a su propio formato. OpenAI envuelve el schema en `{ type: "function", function: {...} }`. Anthropic usa `input_schema` en vez de `parameters`. Google Gemini lo mete todo en un array `functionDeclarations`. Mismo concepto, tres sintaxis distintas.
Pega tu JSON Schema una vez y obtén definiciones listas para los tres proveedores. Más un snippet TypeScript listo con la llamada a la API (`chat.completions.create`, `messages.create`, `generateContent`): suéltalo en tu código y listo.
Cómo usarlo
- Pega el JSON Schema de tu función. Necesita tres campos: `name` (el nombre), `description` (qué hace) y `parameters` (qué argumentos acepta).
- El validador revisa el schema mientras escribes. OK verde = todo bien, error rojo = te indicamos exactamente qué falla.
- Elige el proveedor objetivo: OpenAI, Anthropic o Gemini.
- Toggle Solo JSON / Code sample: la primera te da el schema pelado, la segunda un snippet TypeScript listo con la llamada a la API.
- Copia el resultado. Pégalo en tu código, en curl, en Postman, donde lo necesites.
Cuándo es útil
Seis situaciones típicas en las que este conversor da una ventaja concreta:
- Migrar de OpenAI a Claude (o a Gemini). Tu app tiene 50 funciones definidas para GPT-4o y el cliente quiere pasar a Claude. En vez de reescribir cada schema a mano (y meter erratas), las pasas por el conversor una a una y listo.
- App que usa varios modelos a la vez. Un modelo barato para tareas fáciles, uno más caro para las difíciles. Cada uno necesita el schema en su formato. Una única fuente de verdad (tu JSON Schema) → tres versiones consistentes en la salida.
- Junior dev aprendiendo function calling. Leer tres documentaciones lleva una hora que no tienes. Aquí ves al momento: *"así es para OpenAI, así para Claude, así para Gemini"*. Cinco minutos y entiendes las diferencias.
- Prototipo rápido. Probar una idea para una función. Empieza con OpenAI (más barata y rápida), ¿funciona? Conviértela a Claude (mejor calidad en consultas más complejas). Sin reescribir desde cero.
- Documentar una API para clientes. Tienes una API pública y quieres que los clientes la conecten a un LLM. Generas tres versiones (OpenAI, Anthropic, Gemini) y las pones en tu doc, que cada cliente elija la que le encaje.
- *"Mi bot no llama a mi función"*. Problema clásico de junior. Motivo número uno: bug en el schema (errata en `type`, anidación incorrecta, falta un campo). El validador aquí lo marca al momento, antes de enviar la petición a la API y pagar por una llamada rota.