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