Convidar amigos e ganhar tokens grátis!Saiba mais

Criar Conclusão de Chat (Stream / Fluxo)

Referência da Documentação Oficial: OpenAI Chat Create

Descrição da Interface

Dado um prompt, o modelo retornará uma ou mais opções de conclusão de diálogo previstas. Esta interface suporta tanto o retorno padrão quanto o retorno em fluxo contínuo (Streaming / SSE), e pode retornar a probabilidade de tokens alternativos em cada posição.

Especificações da Requisição

  • Método da Requisição: POST
  • URL da Requisição: https://api.codingplanx.ai/v1/chat/completions

Cabeçalhos (Headers)

Nome do ParâmetroObrigatórioTipoExemploDescrição
Content-TypeSimstringapplication/jsonFormato dos dados
AcceptSimstringapplication/jsonFormato dos dados aceitos
AuthorizationNão*stringBearer {{YOUR_API_KEY}}Token de autenticação (geralmente obrigatório na chamada real)
X-Forwarded-HostNãostringlocalhost:5173Nome do host do proxy (geralmente não é necessário passar manualmente)

Corpo da Requisição (Request Body)

Nome do ParâmetroTipoObrigatórioDescrição
modelstringSimID do modelo a ser utilizado. Para ver a lista de modelos compatíveis, consulte a tabela de compatibilidade de endpoints de modelos.
messagesarraySimLista de mensagens que compõem a conversa até o momento. Contém os campos role e content.
toolsarraySimUma lista de ferramentas que o modelo pode chamar. Atualmente, suporta apenas funções como ferramentas.
tool_choiceobjectSimControla qual função o modelo irá chamar (se houver). none significa nenhuma chamada, auto significa escolha automática, ou pode forçar a chamada de uma função específica.
extra_bodyobjectSimParâmetros adicionais. Contém enable_thinking (boolean), que define se o modo de raciocínio (thinking mode) deve ser ativado (requer suporte do modelo).
temperatureinteger/floatNãoTemperatura de amostragem, entre 0 e 2. Valores mais altos (ex: 0.8) tornam a saída mais aleatória, valores menores (ex: 0.2) a tornam mais focada e determinística. Recomenda-se alterar isto ou o top_p, mas não ambos.
top_pinteger/floatNãoParâ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 isto ou a temperature, mas não ambos.
nintegerNãoQuantas opções de conclusão de chat gerar para cada mensagem de entrada. O padrão é 1.
streambooleanNãoDefine se a saída em fluxo (streaming) está ativada. Se definido como true, enviará incrementos de mensagens parciais na forma de Server-Sent Events (SSE) e encerrará o fluxo com a mensagem data: [DONE].
stopstring/arrayNãoSequência (máximo de 4) onde a API parará de gerar novos tokens. O padrão é null.
max_tokensintegerNãoNúmero máximo de tokens a serem gerados na conclusão do chat. O comprimento total de tokens (entrada + geração) é limitado pelo comprimento de contexto do modelo.
presence_penaltynumberNãoNúmero entre -2.0 e 2.0. Valores positivos penalizam novos tokens com base em sua presença prévia no texto, aumentando a probabilidade do modelo falar sobre novos tópicos.
frequency_penaltynumberNãoNúmero entre -2.0 e 2.0. Valores positivos penalizam novos tokens com base em sua frequência atual no texto, diminuindo a probabilidade do modelo repetir o mesmo conteúdo.
logit_biasobjectNãoModifica a probabilidade de tokens específicos aparecerem na conclusão. Aceita um objeto JSON que mapeia o ID do token para um valor de viés (de -100 a 100).
userstringNãoIdentificador único que representa o usuário final, ajudando a monitorar e detectar abusos.
response_formatobjectNãoEspecifica o formato de saída do modelo. Definir como { "type": "json_object" } ativa o modo JSON. Aviso: Ao usar isso, você deve instruir o modelo a gerar JSON nas mensagens, caso contrário, pode resultar em um fluxo contínuo de espaços em branco.
seenintegerNãoDefine a semente (Seed) para amostragem determinística (Recurso Beta).

Exemplo de Requisição

{
  "model": "gpt-5-mini",
  "max_tokens": 1000,
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful assistant."
    },
    {
      "role": "user",
      "content": "你好"
    }
  ],
  "temperature": 1.0,
  "stream": true,
  "stream_options": {
    "include_usage": true
  }
}

Especificações da Resposta

  • Content-Type: application/json (Não-streaming) ou text/event-stream (Em streaming quando stream: true)

Parâmetros da Resposta (Estrutura Não-Streaming)

Nome do ParâmetroTipoDescrição
idstringIdentificador único da conclusão do chat.
objectstringTipo de objeto, geralmente chat.completion ou chat.completion.chunk.
createdintegerTimestamp do momento da criação (Era Unix).
choicesarrayLista de opções de conclusão.
choices[].indexintegerÍndice na lista de opções.
choices[].messageobjectObjeto de mensagem gerado pelo modelo, contendo role e content. Em fluxo (streaming), será delta.
choices[].finish_reasonstringMotivo pelo qual a geração parou (ex: stop, length, etc.).
usageobjectEstatísticas de uso de tokens da API.
usage.prompt_tokensintegerQuantidade de tokens consumidos pelo Prompt.
usage.completion_tokensintegerQuantidade de tokens gerados pelo modelo.
usage.total_tokensintegerQuantidade total de tokens consumidos nesta requisição.

Exemplo de Resposta (Não-Streaming / Resultado Agregado de Streaming)

{
    "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
    }
}

(Nota: Se stream: true for especificado na requisição, o corpo da resposta será um fluxo de eventos SSE separados por quebras de linha, cada linha começando com data: {...} e terminando com data: [DONE].)


FAQs (Perguntas Frequentes)

Q1: Como fazer o parse da resposta em fluxo quando stream: true está ativado? R: Quando stream: true está ativado, a API retorna dados através do protocolo Server-Sent Events (SSE). O cliente precisa ler o fluxo de resposta linha por linha, procurar por strings com o prefixo data: e fazer o parse para JSON. Note que a última mensagem do fluxo de dados é sempre data: [DONE], marcando o fim do fluxo. Este marcador de fim deve ser filtrado durante o parse.

Q2: Por que minha requisição trava ou retorna um fluxo de espaços em branco infinito após definir response_format como JSON? R: Quando você usa { "type": "json_object" } para ativar o modo JSON, é obrigatório instruir claramente o modelo ("por favor, gere no formato JSON") nas messages enviadas (geralmente no system prompt). Sem instruções de texto relevantes, o modelo pode ficar travado e gerar caracteres em branco infinitamente até atingir o limite de max_tokens.

Q3: Posso ajustar os parâmetros temperature e top_p simultaneamente? R: A documentação oficial recomenda fortemente não ajustar ambos simultaneamente. Ambos são mecanismos para controlar a aleatoriedade da saída do modelo. Se você deseja uma saída mais estável e previsível, diminua a temperature ou reduza o top_p; se deseja respostas mais criativas, aumente um deles. Alterar ambos ao mesmo tempo tornará os resultados difíceis de prever.

Q4: Para que serve o parâmetro extra_body.enable_thinking? R: Este é um parâmetro de extensão especial desta interface. Ao passar {"enable_thinking": true}, se o modelo sendo utilizado no backend suportar "Modo de Raciocínio (Thinking Mode / CoT)" (como alguns modelos grandes otimizados para raciocínio), o modelo ativará um processo de raciocínio profundo. Se o modelo não suportar, este parâmetro será geralmente ignorado.

Q5: Por que o finish_reason na resposta é length em vez de stop? R: Quando o finish_reason retorna length, isso indica que o modelo foi forçado a parar antes de gerar uma resposta completa. Isso geralmente ocorre porque o seu parâmetro max_tokens está configurado com um valor muito baixo, ou porque a soma de tokens do input e os tokens gerados excedeu o limite máximo da janela de contexto permitida pelo modelo atual. Tente aumentar o valor de max_tokens.