Skip to content

Note

Le cloud Ollama ne prend actuellement pas en charge les sorties structurées.

Les sorties structurées vous permettent d'appliquer un schéma JSON aux réponses du modèle, afin de pouvoir extraire des données structurées de manière fiable, décrire des images ou conserver une cohérence dans toutes les réponses.

Génération de JSON structuré

cURL

shell
curl -X POST http://localhost:11434/api/chat -H "Content-Type: application/json" -d '{
  "model": "gpt-oss",
  "messages": [{"role": "user", "content": "Tell me about Canada in one line"}],
  "stream": false,
  "format": "json"
}'

Python

python
from ollama import chat

response = chat(
  model='gpt-oss',
  messages=[{'role': 'user', 'content': 'Tell me about Canada.'}],
  format='json'
)
print(response.message.content)

JavaScript

javascript
import ollama from 'ollama'

const response = await ollama.chat({
  model: 'gpt-oss',
  messages: [{ role: 'user', content: 'Tell me about Canada.' }],
  format: 'json'
})
console.log(response.message.content)

Génération de JSON structuré avec un schéma

Fournissez un schéma JSON au champ format.

Note

Il est recommandé de transmettre également le schéma JSON sous forme de chaîne de caractères dans l'invite pour ancrer la réponse du modèle.

cURL

shell
curl -X POST http://localhost:11434/api/chat -H "Content-Type: application/json" -d '{
  "model": "gpt-oss",
  "messages": [{"role": "user", "content": "Tell me about Canada."}],
  "stream": false,
  "format": {
    "type": "object",
    "properties": {
      "name": {"type": "string"},
      "capital": {"type": "string"},
      "languages": {
        "type": "array",
        "items": {"type": "string"}
      }
    },
    "required": ["name", "capital", "languages"]
  }
}'

Python

Utilisez des modèles Pydantic et transmettez model_json_schema() à format, puis validez la réponse :

python
from ollama import chat
from pydantic import BaseModel

class Country(BaseModel):
  name: str
  capital: str
  languages: list[str]

response = chat(
  model='gpt-oss',
  messages=[{'role': 'user', 'content': 'Tell me about Canada.'}],
  format=Country.model_json_schema(),
)

country = Country.model_validate_json(response.message.content)
print(country)

JavaScript

Sérialisez un schéma Zod avec z.toJSONSchema() et analysez la réponse structurée :

javascript
import ollama from 'ollama'
import * as z from 'zod'

const Country = z.object({
  name: z.string(),
  capital: z.string(),
  languages: z.array(z.string()),
})

const response = await ollama.chat({
  model: 'gpt-oss',
  messages: [{ role: 'user', content: 'Tell me about Canada.' }],
  format: z.toJSONSchema(Country),
})

const country = Country.parse(JSON.parse(response.message.content))
console.log(country)

Exemple : Extraire des données structurées

Définissez les objets que vous souhaitez récupérer et laissez le modèle remplir les champs :

python
from ollama import chat
from pydantic import BaseModel

class Pet(BaseModel):
  name: str
  animal: str
  age: int
  color: str | None
  favorite_toy: str | None

class PetList(BaseModel):
  pets: list[Pet]

response = chat(
  model='gpt-oss',
  messages=[{'role': 'user', 'content': 'I have two cats named Luna and Loki...'}],
  format=PetList.model_json_schema(),
)

pets = PetList.model_validate_json(response.message.content)
print(pets)

Exemple : Vision avec des sorties structurées

Les modèles de vision acceptent le même paramètre format, permettant des descriptions déterministes d'images :

python
from ollama import chat
from pydantic import BaseModel
from typing import Literal, Optional

class Object(BaseModel):
  name: str
  confidence: float
  attributes: str

class ImageDescription(BaseModel):
  summary: str
  objects: list[Object]
  scene: str
  colors: list[str]
  time_of_day: Literal['Morning', 'Afternoon', 'Evening', 'Night']
  setting: Literal['Indoor', 'Outdoor', 'Unknown']
  text_content: Optional[str] = None

response = chat(
  model='gemma4',
  messages=[{
    'role': 'user',
    'content': 'Describe this photo and list the objects you detect.',
    'images': ['path/to/image.jpg'],
  }],
  format=ImageDescription.model_json_schema(),
  options={'temperature': 0},
)

image_description = ImageDescription.model_validate_json(response.message.content)
print(image_description)

Conseils pour des sorties structurées fiables

  • Définissez des schémas avec Pydantic (Python) ou Zod (JavaScript) afin qu'ils puissent être réutilisés pour la validation.
  • Baissez la température (par exemple, réglez-la sur 0) pour des complétions plus déterministes.
  • Les sorties structurées fonctionnent via l'API compatible OpenAI grâce au paramètre response_format