Skip to Content
DocumentaçãoGuiasSaída estruturada

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:

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

ModeloJSON ModeJSON Schema
openai/gpt-4oSimSim
openai/gpt-4o-miniSimSim
anthropic/claude-sonnet-4.5Sim
google/gemini-3-flash-previewSimSim

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