Convidar amigos e ganhar tokens grátis!Saiba mais

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âmetroObrigatórioTipoValor de ExemploDescrição
Content-TypeSimstringapplication/jsonEspecifica o tipo de dados do corpo da requisição
AcceptSimstringapplication/jsonEspecifica o tipo de dados aceito pelo cliente
AuthorizationNãostringBearer {{YOUR_API_KEY}}Credencial de autenticação

Corpo da Requisição (Request Body)

Nome do ParâmetroObrigatórioTipoDescrição
modelSimstringID do modelo a ser utilizado (ex: gpt-4.1-2025-04-14).
messagesSimarrayLista de mensagens que compõem a conversa até o momento.
? messages[].roleSimstringPapel do remetente da mensagem, como system, user, assistant.
? messages[].contentSimstringO conteúdo específico da mensagem.
toolsSimarrayLista 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_choiceSimobjectControla 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"}}.
temperatureNãointegerTemperatura 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_pNãointegerParâ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.
nNãointegerQuantas opções de completion gerar para cada mensagem de entrada. O padrão é 1.
streamNãobooleanSe 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.
stopNãostringSequência onde a API parará de gerar novos tokens (até 4 sequências). O padrão é null.
max_tokensNãointegerNúmero máximo de tokens gerados no chat completion. O padrão é inf (infinito).
presence_penaltyNãonumberPenalidade 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_penaltyNãonumberPenalidade 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_biasNãonull/objectAceita 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.
userNãostringUm identificador único que representa o usuário final, ajudando a monitorar e detectar abusos.
response_formatNãoobjectEspecifica 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.
seenNãointeger(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âmetroTipoDescrição
idstringIdentificador único para a requisição de completion.
objectstringTipo de objeto, fixo como chat.completion.
createdintegerCarimbo de data/hora de criação (Unix timestamp em segundos).
choicesarrayLista de opções de completion geradas.
? choices[].indexintegerÍndice da opção na lista.
? choices[].messageobjectObjeto da mensagem gerada pelo modelo.
? choices[].message.rolestringNome do papel (geralmente assistant).
? choices[].message.contentstringConteúdo específico da mensagem.
? choices[].finish_reasonstringMotivo pelo qual o modelo parou de gerar tokens (ex: stop, length).
usageobjectEstatísticas de uso de tokens.
? usage.prompt_tokensintegerQuantidade de tokens consumidos pelo prompt.
? usage.completion_tokensintegerQuantidade de tokens consumidos pelo completion gerado.
? usage.total_tokensintegerQuantidade 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:

  • temperature redimensiona 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 atinge p. Recomendação Oficial: Ajuste apenas um desses parâmetros, não modifique temperature e top_p ao 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.