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âmetro | Obrigatório | Tipo | Exemplo | Descrição |
|---|---|---|---|---|
Content-Type | Sim | string | application/json | Formato dos dados |
Accept | Sim | string | application/json | Formato dos dados aceitos |
Authorization | Não* | string | Bearer {{YOUR_API_KEY}} | Token de autenticação (geralmente obrigatório na chamada real) |
X-Forwarded-Host | Não | string | localhost:5173 | Nome do host do proxy (geralmente não é necessário passar manualmente) |
Corpo da Requisição (Request Body)
| Nome do Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
model | string | Sim | ID do modelo a ser utilizado. Para ver a lista de modelos compatíveis, consulte a tabela de compatibilidade de endpoints de modelos. |
messages | array | Sim | Lista de mensagens que compõem a conversa até o momento. Contém os campos role e content. |
tools | array | Sim | Uma lista de ferramentas que o modelo pode chamar. Atualmente, suporta apenas funções como ferramentas. |
tool_choice | object | Sim | Controla 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_body | object | Sim | Parâmetros adicionais. Contém enable_thinking (boolean), que define se o modo de raciocínio (thinking mode) deve ser ativado (requer suporte do modelo). |
temperature | integer/float | Não | Temperatura 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_p | integer/float | Não | 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 isto ou a temperature, mas não ambos. |
n | integer | Não | Quantas opções de conclusão de chat gerar para cada mensagem de entrada. O padrão é 1. |
stream | boolean | Não | Define 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]. |
stop | string/array | Não | Sequência (máximo de 4) onde a API parará de gerar novos tokens. O padrão é null. |
max_tokens | integer | Não | Nú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_penalty | number | Não | Nú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_penalty | number | Não | Nú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_bias | object | Não | Modifica 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). |
user | string | Não | Identificador único que representa o usuário final, ajudando a monitorar e detectar abusos. |
response_format | object | Não | Especifica 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. |
seen | integer | Não | Define 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) outext/event-stream(Em streaming quandostream: true)
Parâmetros da Resposta (Estrutura Não-Streaming)
| Nome do Parâmetro | Tipo | Descrição |
|---|---|---|
id | string | Identificador único da conclusão do chat. |
object | string | Tipo de objeto, geralmente chat.completion ou chat.completion.chunk. |
created | integer | Timestamp do momento da criação (Era Unix). |
choices | array | Lista de opções de conclusão. |
choices[].index | integer | Índice na lista de opções. |
choices[].message | object | Objeto de mensagem gerado pelo modelo, contendo role e content. Em fluxo (streaming), será delta. |
choices[].finish_reason | string | Motivo pelo qual a geração parou (ex: stop, length, etc.). |
usage | object | Estatísticas de uso de tokens da API. |
usage.prompt_tokens | integer | Quantidade de tokens consumidos pelo Prompt. |
usage.completion_tokens | integer | Quantidade de tokens gerados pelo modelo. |
usage.total_tokens | integer | Quantidade 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.