Sorties structurées avec Ollama
(ollama.com)Sorties structurées
6 décembre 2024
Ollama prend désormais en charge les sorties structurées, qui permettent de contraindre la sortie du modèle à un format spécifique défini par un schéma JSON. Les bibliothèques Python et JavaScript d’Ollama ont été mises à jour pour prendre en charge les sorties structurées.
- Cas d’usage des sorties structurées :
- Analyse de données dans des documents
- Extraction de données à partir d’images
- Structuration de toutes les réponses des modèles de langage
- Offre une fiabilité et une cohérence supérieures au mode JSON
Pour commencer
- Télécharger la dernière version d’Ollama
- Mettre à niveau la bibliothèque Python ou JavaScript d’Ollama vers la dernière version
cURL
- Le paramètre
formatpermet de transmettre une sortie structurée au modèle
Sortie
- La réponse est renvoyée dans le format défini par le schéma JSON de la requête
Python
- Utiliser la bibliothèque Python d’Ollama pour transmettre le schéma sous forme d’objet JSON au paramètre
format - Il est recommandé d’utiliser Pydantic pour sérialiser le schéma
Sortie
name='Canada' capital='Ottawa' languages=['English', 'French']
JavaScript
- Utiliser la bibliothèque JavaScript d’Ollama pour transmettre le schéma sous forme d’objet JSON au paramètre
format - Il est recommandé d’utiliser Zod pour sérialiser le schéma
Sortie
{ name: "Canada", capital: "Ottawa", languages: [ "English", "French" ] }
Exemples
Extraction de données
- Définir un schéma représentant les informations afin d’extraire des données structurées à partir de texte
- Le modèle extrait les informations et renvoie les données en JSON selon le schéma défini
Exemple de sortie
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') ]
Description d’image
- Les sorties structurées peuvent être utilisées avec des modèles de vision
- Utiliser
llama3.2-visionpour décrire une image et renvoyer une sortie structurée
Exemple de sortie
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
Compatibilité OpenAI
- Compatible avec les sorties structurées via le client OpenAI
Conseils
- Pour utiliser les sorties structurées de manière fiable :
- Définir le schéma de réponse avec Pydantic (Python) ou Zod (JavaScript)
- Ajouter « renvoyer en JSON » dans le prompt pour aider le modèle à comprendre la requête
- Régler la température sur 0 pour une sortie plus déterministe
Prochaines étapes
- Exposition des logits pour une génération contrôlée
- Amélioration des performances et de la précision des sorties structurées
- Accélération GPU pour l’échantillonnage
- Prise en charge de formats supplémentaires au-delà du schéma JSON
1 commentaires
Avis Hacker News
Il est possible de définir des contraintes de sortie plus fortes via la fonctionnalité gbnf de llama.cpp
C’est utile pour supprimer le texte inutile lors de la structuration d’un prompt classique afin de le convertir en données CSV
En utilisant gemma2:2b et en entrant du texte, on peut obtenir une sortie structurée au format JSON
{"amount": 190, "balance": 5098, "category": "Shopping", "place": "Fresh Mart"}Certains se demandent comment les contraintes influencent la qualité de sortie d’un LLM
Une question est posée sur la possibilité de l’utiliser avec les modèles pris en charge
Certains se demandent si llama.cpp et ollama exploitent la fonctionnalité native de sortie structurée de llama, ou si c’est implémenté autrement
Une question porte sur la valeur ajoutée par rapport à
outlinesLa raison de continuer à utiliser oobabooga est la prise en charge d’exlv2, qui permet une inférence plus efficace sur deux 3090
Il vaudrait mieux commencer par un exemple
curlUne question est posée sur la meilleure manière de fournir une entrée structurée à un LLM