Salida estructurada con Ollama
(ollama.com)Salida estructurada
6 de diciembre de 2024
Ollama ahora admite salidas estructuradas que permiten restringir la salida del modelo a un formato específico definido con un esquema JSON. Las bibliotecas de Ollama para Python y JavaScript se actualizaron para admitir salidas estructuradas.
- Casos de uso de las salidas estructuradas:
- Parseo de datos desde documentos
- Extracción de datos desde imágenes
- Estructuración de todas las respuestas de modelos de lenguaje
- Mayor confiabilidad y consistencia que el modo JSON
Primeros pasos
- Descargar la versión más reciente de Ollama
- Actualizar la biblioteca de Ollama para Python o JavaScript a la versión más reciente
cURL
- Se puede pasar una salida estructurada al modelo usando el parámetro
format
Salida
- La respuesta se devuelve en el formato definido por el esquema JSON de la solicitud
Python
- Usar la biblioteca de Ollama para Python para pasar el esquema como un objeto JSON en el parámetro
format - Se recomienda usar Pydantic para serializar el esquema
Salida
name='Canada' capital='Ottawa' languages=['English', 'French']
JavaScript
- Usar la biblioteca de Ollama para JavaScript para pasar el esquema como un objeto JSON en el parámetro
format - Se recomienda usar Zod para serializar el esquema
Salida
{ name: "Canada", capital: "Ottawa", languages: [ "English", "French" ] }
Ejemplos
Extracción de datos
- Definir un esquema que represente la información para extraer datos estructurados desde texto
- El modelo extrae la información y devuelve los datos en JSON con el esquema definido
Salida de ejemplo
pets=[ Pet(name='Luna', animal='cat', age=5, color='grey', favorite_toy='yarn'), Pet(name='Loki', animal='cat', age=2, color='black', favorite_toy='tennis balls') ]
Descripción de imágenes
- Las salidas estructuradas pueden usarse con modelos de visión
- Usar
llama3.2-visionpara describir una imagen y devolver una salida estructurada
Salida de ejemplo
summary='A palm tree on a sandy beach with blue water and sky.'objects=[ Object(name='tree', confidence=0.9, attributes='palm tree'), Object(name='beach', confidence=1.0, attributes='sand') ]scene='beach', colors=['blue', 'green', 'white'], time_of_day='Afternoon', setting='Outdoor', text_content=None
Compatibilidad con OpenAI
- Compatible con salidas estructuradas usando el cliente de OpenAI
Consejos
- Para usar salidas estructuradas de forma confiable:
- Usar Pydantic (Python) o Zod (JavaScript) para definir el esquema de respuesta
- Agregar "devolver en JSON" al prompt para que el modelo entienda la solicitud
- Establecer la temperatura en 0 para una salida más determinista
Próximos pasos
- Exposición de logits para generación controlada
- Mejora del rendimiento y la precisión de las salidas estructuradas
- Aceleración por GPU para muestreo
- Soporte para formatos adicionales más allá del esquema JSON
1 comentarios
Comentarios de Hacker News
Se pueden establecer restricciones de salida más potentes mediante la función gbnf de llama.cpp
Es útil al estructurar prompts regulares y convertirlos en datos csv, porque permite eliminar texto innecesario
Usando gemma2:2b, al ingresar texto se puede obtener una salida estructurada en formato JSON
{"amount": 190, "balance": 5098, "category": "Shopping", "place": "Fresh Mart"}Hay una opinión que se pregunta cómo afectan las restricciones a la calidad de salida del LLM
Hay una pregunta sobre si se puede usar con los modelos compatibles
Hay curiosidad sobre si llama.cpp y ollama aprovechan la función de salida estructurada de llama o si está implementada de otra manera
Hay una pregunta sobre qué valor agregado ofrece en comparación con
outlinesLa razón para seguir usando oobabooga es que, con soporte para exlv2, ofrece una inferencia más eficiente en dual 3090s
Sería mejor que el ejemplo con curl apareciera primero
Hay una pregunta sobre la mejor manera de proporcionar entradas estructuradas a un LLM