Ollama : Les sorties structurées en pratique

L'exécution de LLM locaux entraîne souvent des erreurs d'analyse JSON. Vous demandez au modèle de ne renvoyer que du JSON, mais il ajoute tout de même des balises markdown ou du texte supplémentaire. Cela fait planter votre code.

Depuis Ollama 0.3.0, vous pouvez corriger cela en utilisant le paramètre format. Cela force le modèle à suivre un schéma JSON. Il devient alors physiquement impossible pour le modèle d'ajouter du texte ou du markdown supplémentaire.

J'ai testé cela avec Gemma4 et Ollama 0.30.7. Voici les résultats.

Le problème du texte naturel Les modèles sont entraînés pour la conversation. Ils veulent dire "Voici votre JSON". Même avec des prompts stricts, ils enveloppent souvent les réponses dans des blocs de code. La fonction json.loads() de Python échoue lorsqu'elle rencontre ces blocs.

L'avantage en termes de vitesse L'utilisation du paramètre format est beaucoup plus rapide.

  • Sans sortie structurée : 32 secondes
  • Avec sortie structurée : 5 secondes

Cela représente une amélioration de la vitesse de 6,4x. Le modèle ne perd pas de temps à décider comment formater le texte. Il génère uniquement les tokens qui correspondent à votre schéma.

Utiliser Pydantic pour la sécurité du typage Vous n'avez pas besoin d'écrire des schémas JSON à la main. Utilisez des modèles Pydantic pour les générer automatiquement.

  1. Définissez votre modèle Pydantic.
  2. Utilisez model_json_schema() pour créer le schéma.
  3. Transmettez ce schéma à Ollama.
  4. Utilisez model_validate_json() pour analyser et valider les données en une seule étape.

Cette approche est parfaite pour les agents IA. Vous pouvez l'utiliser pour décider quel outil un agent doit appeler ensuite. Si le modèle tente d'inventer un nom d'outil qui n'existe pas, Pydantic le détecte immédiatement.

Limitations actuelles

  • Les schémas profondément imbriqués peuvent parfois renvoyer des tableaux vides avec les modèles plus petits.
  • Les champs optionnels peuvent renvoyer des chaînes vides au lieu de null.
  • Les schémas volumineux consomment davantage de votre fenêtre de contexte.

Bonnes pratiques

  • Utilisez une extraction simple pour les petits modèles.
  • Utilisez Pydantic pour la validation et la sélection d'outils pour les agents.
  • Utilisez des modèles plus grands pour les données complexes et imbriquées.
  • Ajoutez une logique de réessai lorsque Pydantic renvoie une erreur de validation.

Arrêtez d'espérer que vos prompts fonctionnent. Utilisez des sorties structurées pour rendre vos pipelines de LLM locaux fiables.

Source: https://dev.to/jangwook_kim_e31e7291ad98/ollama-structured-outputs-in-practice-getting-type-safe-json-from-local-llms-with-pydantic-m38

Communauté d'apprentissage optionnelle: https://t.me/GyaanSetuAi