Documentação da API: Criar Saídas Estruturadas
Descrição da API
Dado um prompt (Prompt), o modelo retornará uma ou mais respostas de preenchimento (completion) previstas e possui suporte para forçar o modelo a gerar dados estruturados de acordo com um JSON Schema especificado.
Documentação Oficial de Referência: OpenAI Structured Outputs
Informações Básicas da API
- Método da Requisição:
POST - Endpoint da Requisição:
https://api.codingplanx.ai/v1/chat/completions - Formato de Dados:
application/json
Cabeçalhos da Requisição (Headers)
| Nome do Parâmetro | Obrigatório | Tipo | Valor de Exemplo | Descrição |
|---|---|---|---|---|
Content-Type | Sim | string | application/json | Especifica o tipo de dados do corpo da requisição |
Accept | Sim | string | application/json | Especifica o tipo de dados aceito pelo cliente |
Authorization | Não | string | Bearer {{YOUR_API_KEY}} | Credencial de autenticação |
Corpo da Requisição (Request Body)
| Nome do Parâmetro | Obrigatório | Tipo | Descrição |
|---|---|---|---|
model | Sim | string | ID do modelo a ser utilizado (ex: gpt-4.1-2025-04-14). |
messages | Sim | array | Lista de mensagens que compõem a conversa até o momento. |
? messages[].role | Sim | string | Papel do remetente da mensagem, como system, user, assistant. |
? messages[].content | Sim | string | O conteúdo específico da mensagem. |
tools | Sim | array | Lista de ferramentas que o modelo pode chamar. Atualmente suporta apenas funções. Usado para fornecer uma lista de funções para as quais o modelo pode gerar entradas em JSON. |
tool_choice | Sim | object | Controla qual função o modelo deve chamar. none significa que não chamará nenhuma, auto indica seleção automática. Também pode forçar a chamada via {"type": "function", "function": {"name": "my_function"}}. |
temperature | Não | integer | Temperatura de amostragem, entre 0 e 2. Valores mais altos (como 0.8) tornam a saída mais aleatória, enquanto valores mais baixos (como 0.2) a tornam mais focada e determinística. Recomenda-se alterar este parâmetro ou top_p, mas não ambos. |
top_p | Não | integer | Parâmetro de amostragem de núcleo (nucleus sampling). 0.1 significa que apenas os tokens que compõem os 10% superiores da massa de probabilidade são considerados. Recomenda-se alterar este parâmetro ou temperature, mas não ambos. |
n | Não | integer | Quantas opções de completion gerar para cada mensagem de entrada. O padrão é 1. |
stream | Não | boolean | Se deve habilitar a saída em fluxo (streaming). Se true, enviará incrementos parciais de mensagens na forma de Server-Sent Events (SSE) e será encerrado com data: [DONE]. O padrão é false. |
stop | Não | string | Sequência onde a API parará de gerar novos tokens (até 4 sequências). O padrão é null. |
max_tokens | Não | integer | Número máximo de tokens gerados no chat completion. O padrão é inf (infinito). |
presence_penalty | Não | number | Penalidade de presença (-2.0 a 2.0). Valores positivos penalizam novos tokens com base em sua presença no texto até o momento, aumentando a probabilidade do modelo mudar para novos tópicos. |
frequency_penalty | Não | number | Penalidade de frequência (-2.0 a 2.0). Valores positivos penalizam novos tokens com base em sua frequência no texto até o momento, reduzindo a probabilidade do modelo repetir as mesmas frases. |
logit_bias | Não | null/object | Aceita um objeto JSON mapeando IDs de tokens para valores de viés (-100 a 100), usado para modificar a probabilidade de um token específico aparecer no completion. |
user | Não | string | Um identificador único que representa o usuário final, ajudando a monitorar e detectar abusos. |
response_format | Não | object | Especifica o formato que o modelo deve produzir. Ao definir {"type": "json_schema", "json_schema": {...}}, você pode habilitar Saídas Estruturadas (Structured Outputs), garantindo que o modelo gere um formato JSON válido. |
seen | Não | integer | (Recurso Beta) Define uma semente aleatória (Seed). O sistema fará o possível para amostrar de forma determinística; solicitações repetidas com a mesma semente e parâmetros devem retornar o mesmo resultado. |
Exemplo de Requisição (Request Example)
{
"model": "gpt-4.1-2025-04-14",
"messages": [
{
"role": "system",
"content": "Determine if the user input violates specific guidelines and explain if they do."
},
{
"role": "user",
"content": "How do I prepare for a job interview?"
}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "content_compliance",
"description": "Determines if content is violating specific moderation rules",
"schema": {
"type": "object",
"properties": {
"is_violating": {
"type": "boolean",
"description": "Indicates if the content is violating guidelines"
},
"category": {
"type": ["string", "null"],
"description": "Type of violation, if the content is violating guidelines. Null otherwise.",
"enum": ["violence", "sexual", "self_harm"]
},
"explanation_if_violating": {
"type": ["string", "null"],
"description": "Explanation of why the content is violating"
}
},
"required": ["is_violating", "category", "explanation_if_violating"],
"additionalProperties": false
},
"strict": true
}
}
}
Corpo da Resposta (Response Body)
| Nome do Parâmetro | Tipo | Descrição |
|---|---|---|
id | string | Identificador único para a requisição de completion. |
object | string | Tipo de objeto, fixo como chat.completion. |
created | integer | Carimbo de data/hora de criação (Unix timestamp em segundos). |
choices | array | Lista de opções de completion geradas. |
? choices[].index | integer | Índice da opção na lista. |
? choices[].message | object | Objeto da mensagem gerada pelo modelo. |
? choices[].message.role | string | Nome do papel (geralmente assistant). |
? choices[].message.content | string | Conteúdo específico da mensagem. |
? choices[].finish_reason | string | Motivo pelo qual o modelo parou de gerar tokens (ex: stop, length). |
usage | object | Estatísticas de uso de tokens. |
? usage.prompt_tokens | integer | Quantidade de tokens consumidos pelo prompt. |
? usage.completion_tokens | integer | Quantidade de tokens consumidos pelo completion gerado. |
? usage.total_tokens | integer | Quantidade total de tokens consumidos. |
Exemplo de Resposta (Response Example)
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "\r
\r
Hello there, how may I assist you today?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
Perguntas Frequentes (FAQs)
1. O que é response_format e como garantir que o modelo produza um JSON rigoroso?
O parâmetro response_format permite solicitar que o modelo retorne dados em um formato específico. Se você deseja usar "Saídas Estruturadas" (Structured Outputs), deve defini-lo como {"type": "json_schema"} e definir o seu JSON Schema internamente, ativando strict: true. Isso garante que o modelo gere conteúdo 100% de acordo com os campos e tipos de dados que você definiu, eliminando a necessidade de verificações adicionais de tolerância a falhas JSON no seu código.
2. Por que minha saída JSON foi truncada?
Se nos seus dados de resposta, o valor de choices[0].finish_reason for length, isso significa que o texto gerado atingiu o limite de max_tokens ou excedeu o limite máximo de comprimento de contexto do modelo. Recomenda-se aumentar o valor do parâmetro max_tokens na sua requisição.
3. Qual é a diferença entre os parâmetros temperature e top_p? Qual devo ajustar?
Ambos são parâmetros usados para controlar a aleatoriedade da saída do modelo:
temperatureredimensiona a distribuição de probabilidade da saída do modelo. Valores mais baixos tornam a saída mais rigorosa e determinística; valores mais altos a tornam mais divergente e criativa.top_p(Amostragem de Núcleo) restringe o modelo a escolher apenas entre os tokens mais frequentes cuja probabilidade cumulativa atingep. Recomendação Oficial: Ajuste apenas um desses parâmetros, não modifiquetemperatureetop_pao mesmo tempo.
4. O que acontece ao ativar stream: true?
Quando stream: true é configurado, a API não esperará até que a resposta completa seja gerada para retornar. Em vez disso, ela transmitirá os fragmentos de dados em tempo real (streaming), como uma máquina de escrever. O formato de dados retornado será alterado para Server-Sent Events (SSE). O cliente precisará escutar o fluxo de dados para concatenar o delta.content até receber o marcador [DONE], o que indica o fim da transmissão.
5. Como posso garantir a mesma resposta exata sempre que chamar o mesmo Prompt?
Embora os grandes modelos de linguagem (LLMs) tenham uma natureza aleatória, você pode obter o máximo de determinismo na saída passando o parâmetro de semente (seen / Seed) específico e definindo a temperature como 0. Se você observar que o system_fingerprint no resultado retornado mudou, isso indica que a configuração do modelo de backend passou por ajustes finos; neste caso, mesmo que o Seed seja o mesmo, o resultado pode apresentar pequenas variações.