toolkitbox

~/ / Artículos de IA / LLM locales en un VPS / Llamar a un modelo local desde tu código: salidas estructuradas y la API compatible con OpenAI en Ollama

Llamar a un modelo local desde tu código: salidas estructuradas y la API compatible con OpenAI en Ollama

Cuando Ollama ya funciona en tu servidor, tu propio código necesita dos cosas: una forma de obtener respuestas con una forma fija y una forma de llegar al servidor desde bibliotecas que ya hablan la API de OpenAI. Ollama documenta ambas. Este artículo resume la página de salidas estructuradas y la página de compatibilidad con OpenAI, y señala lo que la documentación indica que no se admite.

Publicado: · 4 min de lectura · Comprobado con la documentación oficial de Ollama el 2026-10-26. Las funciones admitidas cambian entre versiones, así que confírmalas en los documentos actuales.

Dos formas de llamar al mismo servidor

Ollama tiene su propia API, en la que los ejemplos de la documentación hacen POST a http://localhost:11434/api/chat. También ofrece una API compatible con OpenAI bajo /v1/, de modo que los clientes de OpenAI existentes puedan comunicarse con él cambiando la URL base.

ElementoNative APIOpenAI-compatible API
Dirección basehttp://localhost:11434/api/chathttp://localhost:11434/v1/
Clave de APIno se menciona en los ejemplosapi_key='ollama', que la página marca como obligatoria pero ignorada
Campo de salida estructuradaformatresponse_format

La línea de la clave de API procede del ejemplo de servidor local de la documentación. Para la nube, la página muestra base_url https://ollama.com/v1 con una clave de API de tu cuenta de Ollama, que es un caso distinto.

Salidas estructuradas: el campo format

El campo format limita la respuesta. Acepta la cadena json para JSON genérico, o un objeto de JSON Schema. En los ejemplos de cURL de la documentación, el cuerpo de la petición tiene cuatro campos: model, messages, stream establecido en false y format. El esquema de los ejemplos tiene type, properties y required.

Valor de formatEfecto según la documentación
"json"El modelo responde con JSON genérico
un objeto de JSON SchemaLa respuesta queda limitada a ese esquema
  • La documentación dice que lo ideal es pasar también el JSON Schema como cadena en el prompt, para anclar la respuesta del modelo.
  • También dice que se baje la temperature, por ejemplo a 0, para obtener respuestas más deterministas.
  • Para Python y JavaScript sugiere definir los esquemas con Pydantic o Zod, de modo que se puedan reutilizar para la validación.
  • Los modelos de visión aceptan el mismo parámetro format. El ejemplo de visión de la documentación pasa una imagen junto con un esquema.
  • Según la página, la nube de Ollama no admite por ahora las salidas estructuradas.

Antes de confiar en un esquema, compruébalo. El JSON Schema Validator de abajo te indica si el propio esquema es válido y si una respuesta de ejemplo lo cumple.

Comprueba el esquema que envías

Un esquema con un error puede fallar tarde, cuando la primera petición llega al modelo. Pega el esquema y un ejemplo del JSON que esperas, y comprueba si coinciden.

Pruébalo: JSON Schema Validator

Sigue JSON Schema Draft 2020-12 en las palabras clave que admite. Lee $ref solo dentro del mismo esquema.

Todo se ejecuta en tu navegador. El esquema y los datos no se suben.

Los endpoints compatibles con OpenAI

EndpointLo que indica la páginaIndicado como no admitido
/v1/chat/completionschat, streaming, JSON mode, salidas reproducibles, visión, herramientas, control del razonamientologprobs, tool_choice, logit_bias, user, n; URL de imágenes (usa base64)
/v1/completionscompletions, streaming, JSON mode, salidas reproducibleslogprobs, best_of, echo, logit_bias, user, n
/v1/modelslistar y recuperar modelosno figura
/v1/embeddingsentrada de cadena o de matriz de cadenas, formato de codificación, dimensionesmatrices de tokens, user
/v1/responsesstreaming, herramientas de llamada a funciones, resúmenes de razonamientopeticiones con estado: previous_response_id, conversation, truncation
  • En el endpoint de chat, la página enumera estos campos de la petición entre los admitidos: response_format, tools, stream, stream_options, seed, stop, temperature, top_p, max_tokens, frequency_penalty y presence_penalty.
  • La página afirma que las salidas estructuradas funcionan a través de la API compatible con OpenAI mediante response_format.
  • Si tu código usa un campo de la columna de no admitidos, cambia el código en lugar de esperar que el servidor lo ignore. La documentación no explica cómo se trata cada campo no admitido, salvo en el caso del habla, donde los valores no admitidos devuelven un error 400.

Herramientas y el formato de sus definiciones

Tanto la API nativa como el endpoint de chat compatible con OpenAI aceptan tools. Si describes las herramientas con la forma de OpenAI, el Tool Definition Checker de este sitio comprueba los nombres, las descripciones y los esquemas de parámetros según ese formato antes de que los envíes.

Cuando la respuesta sigue sin ser JSON válido

Limitar la salida sirve para obtener JSON válido, pero tu propio código aún puede recibir texto de otro modelo, de una versión anterior o de una petición sin format. La herramienta de abajo repara los fallos habituales, como los bloques de código, las comas finales y las comillas incorrectas, y avisa cuando una reparación cambia el significado.

Pruébalo: LLM JSON Repair

Sangría

Solo se aplican las correcciones que tienen una respuesta clara. Todo lo demás se informa con su posición en lugar de adivinarse.

Todo se ejecuta en tu navegador. El texto que pegas no se sube.

Una nota sobre el acceso

El ejemplo local de la documentación dice que la clave de API es obligatoria pero se ignora. Nuestra interpretación, no una afirmación de los documentos: la clave no protege el servidor, así que mantén Ollama en su dirección predeterminada y pon una autenticación por delante si otra máquina debe acceder a él.

Fuentes

Sigue leyendo