Saída estruturada
A saída estruturada faz o modelo retornar dados no formato JSON que você especificar, ideal para extração de dados, classificação, preenchimento de formulários e cenários semelhantes.
JSON Mode
A forma mais simples de saída estruturada — força o modelo a retornar JSON válido:
Python
json_mode.py
from openai import OpenAI
client = OpenAI(
base_url="https://api.ofox.ai/v1",
api_key="<Sua OFOXAI_API_KEY>"
)
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[
{"role": "system", "content": "Você é um assistente de extração de dados. Retorne os resultados em formato JSON."},
{"role": "user", "content": "Extraia nome, empresa e cargo do seguinte texto: João Silva é engenheiro sênior na Microsoft"}
],
response_format={"type": "json_object"}
)
import json
result = json.loads(response.choices[0].message.content)
print(result)
# {"name": "João Silva", "company": "Microsoft", "title": "Engenheiro Sênior"}Ao usar o JSON Mode, o system prompt deve conter a palavra-chave “JSON”, caso contrário alguns modelos podem ignorar o requisito de formato.
Restrições com JSON Schema
Controle mais preciso da estrutura de saída, garantindo que nomes de campos e tipos correspondam ao esperado:
json_schema.py
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[
{"role": "user", "content": "Analise o sentimento desta avaliação: Este produto é fantástico, muito fácil de usar!"}
],
response_format={
"type": "json_schema",
"json_schema": {
"name": "sentiment_analysis",
"schema": {
"type": "object",
"properties": {
"sentiment": {
"type": "string",
"enum": ["positive", "negative", "neutral"],
"description": "Tendência de sentimento"
},
"confidence": {
"type": "number",
"description": "Confiança 0-1"
},
"keywords": {
"type": "array",
"items": {"type": "string"},
"description": "Palavras-chave de sentimento"
}
},
"required": ["sentiment", "confidence", "keywords"],
"additionalProperties": False
}
}
}
)Saída:
{
"sentiment": "positive",
"confidence": 0.95,
"keywords": ["fantástico", "muito fácil de usar"]
}Cenários práticos
Extração de dados
# Extrair dados estruturados de texto não estruturado
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{
"role": "user",
"content": """Extraia as seguintes informações do pedido:
O cliente Maria Santos fez um pedido em 15 de janeiro de 2025 de 3 MacBook Pro,
preço unitário R$ 18.999, endereço de entrega: São Paulo, Av. Paulista, 123"""
}],
response_format={
"type": "json_schema",
"json_schema": {
"name": "order_info",
"schema": {
"type": "object",
"properties": {
"customer": {"type": "string"},
"date": {"type": "string"},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"},
"quantity": {"type": "integer"},
"unit_price": {"type": "number"}
}
}
},
"address": {"type": "string"}
},
"required": ["customer", "date", "items", "address"]
}
}
}
)Classificação
# Classificação multi-label
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{
"role": "user",
"content": "Classifique o tema deste artigo: A tecnologia de IA está sendo cada vez mais aplicada na área da saúde..."
}],
response_format={
"type": "json_schema",
"json_schema": {
"name": "classification",
"schema": {
"type": "object",
"properties": {
"primary_category": {"type": "string"},
"secondary_categories": {
"type": "array",
"items": {"type": "string"}
},
"tags": {
"type": "array",
"items": {"type": "string"}
}
},
"required": ["primary_category"]
}
}
}
)Modelos suportados
| Modelo | JSON Mode | JSON Schema |
|---|---|---|
openai/gpt-4o | Sim | Sim |
openai/gpt-4o-mini | Sim | Sim |
anthropic/claude-sonnet-4.5 | Sim | — |
google/gemini-3-flash-preview | Sim | Sim |
Modelos que não suportam JSON Schema podem alcançar um efeito semelhante descrevendo detalhadamente o formato JSON esperado no system prompt.
Last updated on