toolkitbox

~/ / Articles sur l'IA / LLM locaux sur un VPS / Appeler un modèle local depuis votre code : sorties structurées et API compatible OpenAI dans Ollama

Appeler un modèle local depuis votre code : sorties structurées et API compatible OpenAI dans Ollama

Une fois Ollama en marche sur votre serveur, votre propre code a besoin de deux choses : un moyen d'obtenir des réponses dans une forme fixe, et un moyen de joindre le serveur depuis des bibliothèques qui parlent déjà l'API OpenAI. Ollama documente les deux. Cet article résume la page sur les sorties structurées et la page sur la compatibilité OpenAI, et signale ce que la documentation indique comme non pris en charge.

Publié: · 4 min de lecture · Vérifié le 2026-10-26 par rapport à la documentation officielle d'Ollama. Les fonctionnalités prises en charge changent d'une version à l'autre ; confirmez-les dans les documents actuels.

Deux façons d'appeler le même serveur

Ollama possède sa propre API, pour laquelle les exemples de la documentation envoient un POST à http://localhost:11434/api/chat. Il propose aussi une API compatible OpenAI sous /v1/, afin que les clients OpenAI existants puissent s'y connecter en changeant l'URL de base.

ÉlémentAPI nativeAPI compatible OpenAI
Adresse de basehttp://localhost:11434/api/chathttp://localhost:11434/v1/
Clé d'APInon mentionnée dans les exemplesapi_key='ollama', que la page indique comme obligatoire mais ignorée
Champ de sortie structuréeformatresponse_format

La ligne sur la clé d'API provient de l'exemple de serveur local de la documentation. Pour le cloud, la page montre base_url https://ollama.com/v1 avec une clé d'API issue de votre compte Ollama, ce qui est un autre cas.

Sorties structurées : le champ format

Le champ format contraint la réponse. Il accepte la chaîne json pour du JSON générique, ou un objet JSON Schema. Dans les exemples cURL de la documentation, le corps de la requête comporte quatre champs : model, messages, stream défini à false, et format. Le schéma des exemples comporte type, properties et required.

Valeur de formatEffet selon la documentation
"json"Le modèle répond avec du JSON générique
un objet JSON SchemaLa réponse est contrainte à ce schéma
  • La documentation indique qu'il est idéal de passer aussi le JSON Schema sous forme de chaîne dans le prompt, pour ancrer la réponse du modèle.
  • Elle indique aussi de baisser la température, par exemple à 0, pour obtenir des complétions plus déterministes.
  • Pour Python et JavaScript, elle suggère de définir les schémas avec Pydantic ou Zod, afin de pouvoir les réutiliser pour la validation.
  • Les modèles de vision acceptent le même paramètre format. L'exemple de vision de la documentation transmet une image avec un schéma.
  • Selon la page, le cloud d'Ollama ne prend actuellement pas en charge les sorties structurées.

Avant de vous fier à un schéma, vérifiez-le. Le JSON Schema Validator ci-dessous vous indique si le schéma lui-même est valide et si un exemple de réponse y correspond.

Vérifier le schéma que vous envoyez

Un schéma comportant une erreur peut échouer tardivement, lorsque la première requête atteint le modèle. Collez le schéma et un exemple du JSON attendu, et voyez s'ils concordent.

Essayer: JSON Schema Validator

Suit JSON Schema Draft 2020-12 pour les mots-clés pris en charge. Il ne lit $ref qu'à l'intérieur du même schéma.

Tout s'exécute dans votre navigateur. Le schéma et les données ne sont pas envoyés.

Les points de terminaison compatibles OpenAI

Point de terminaisonCe que la page énumèreIndiqué comme non pris en charge
/v1/chat/completionschat, streaming, JSON mode, sorties reproductibles, vision, tools, contrôle du raisonnementlogprobs, tool_choice, logit_bias, user, n ; URL d'images (utiliser base64)
/v1/completionscomplétions, streaming, JSON mode, sorties reproductibleslogprobs, best_of, echo, logit_bias, user, n
/v1/modelslister et récupérer des modèlesnon indiqué
/v1/embeddingsentrée sous forme de chaîne ou de tableau de chaînes, format d'encodage, dimensionstableaux de tokens, user
/v1/responsesstreaming, tools d'appel de fonctions, résumés de raisonnementrequêtes avec état : previous_response_id, conversation, truncation
  • Pour le point de terminaison de chat, la page range parmi les champs de requête pris en charge : response_format, tools, stream, stream_options, seed, stop, temperature, top_p, max_tokens, frequency_penalty et presence_penalty.
  • La page indique que les sorties structurées fonctionnent via l'API compatible OpenAI grâce à response_format.
  • Si votre code utilise un champ de la colonne des champs non pris en charge, modifiez le code au lieu d'attendre que le serveur l'ignore. La documentation n'indique pas comment chaque champ non pris en charge est traité, sauf pour la parole (speech), où les valeurs non prises en charge renvoient une erreur 400.

Tools et format des définitions d'outils

L'API native comme le point de terminaison de chat compatible OpenAI acceptent tools. Si vous décrivez des outils dans le format OpenAI, le Tool Definition Checker de ce site vérifie les noms, les descriptions et les schémas de paramètres par rapport à ce format avant l'envoi.

Quand la réponse n'est toujours pas du JSON valide

Contraindre la sortie vise à vous donner du JSON valide, mais votre propre code peut tout de même recevoir du texte provenant d'un autre modèle, d'une version plus ancienne ou d'une requête sans format. L'outil ci-dessous répare les défauts courants tels que les blocs de code délimités, les virgules finales et les guillemets incorrects, et avertit lorsqu'une réparation modifie le sens.

Essayer: LLM JSON Repair

Indentation

Seules les corrections qui n'ont qu'une réponse possible sont appliquées. Le reste est signalé avec sa position, sans être deviné.

Tout s'exécute dans votre navigateur. Le texte collé n'est pas envoyé.

Une remarque sur l'accès

L'exemple local de la documentation indique que la clé d'API est obligatoire mais ignorée. Notre lecture, et non une déclaration des documents : la clé ne protège pas le serveur ; gardez donc Ollama sur son adresse par défaut et placez une authentification devant lui si une autre machine doit y accéder.

Sources

À lire ensuite