Criar Chat Completion - DeepSeek v3.1 Controle de Raciocínio (Streaming)
Esta API é usada para criar conversas de chat com o modelo DeepSeek v3.1. Suporta saída em streaming (SSE) e controle detalhado sobre a capacidade de raciocínio profundo (Thinking) do modelo.
Detalhes da API
- Status da API: Lançada (Released)
- Método HTTP:
POST - Endpoint:
https://api.codingplanx.ai/v1/chat/completions
Cabeçalhos da Requisição (Headers)
| Parâmetro | Obrigatório | Tipo | Exemplo | Descrição |
|---|---|---|---|---|
Content-Type | Sim | String | application/json | Formato dos dados |
Accept | Sim | String | application/json | Formato de resposta aceito |
Authorization | Não | String | Bearer {{YOUR_API_KEY}} | Credencial de autenticação (geralmente obrigatório na chamada real) |
(Nota: O cabeçalho X-Forwarded-Host está desativado no momento)
Corpo da Requisição (Request Body)
Content-Type: application/json
| Parâmetro | Obrigatório | Tipo | Descrição |
|---|---|---|---|
model | Sim | String | ID do modelo a ser utilizado. Exemplo: deepseek-v3-1-250821 |
messages | Sim | Array of Objects | Lista de mensagens da conversa. |
? role | Sim | String | Papel do remetente da mensagem (ex: system, user, assistant). |
? content | Sim | String | Conteúdo específico da mensagem. |
max_tokens | Não | Integer | Número máximo de tokens que o modelo pode gerar na resposta (completion) em uma única requisição. O comprimento total de tokens (entrada + saída) é limitado pelo contexto do modelo. |
temperature | Não | Number | Temperatura de amostragem, entre 0 e 2. Valores mais altos (ex: 0.8) tornam a saída mais aleatória; valores mais baixos (ex: 0.2) tornam a saída mais focada e determinística. |
stream | Não | Boolean | Se definido como true, enviará incrementos de mensagens via streaming no formato SSE (Server-Sent Events). O fluxo de mensagens termina com data: [DONE]. |
stream_options | Não | Object | Opções relacionadas à saída em streaming. Só pode ser definido quando o parâmetro stream for true. |
? include_usage | Não | Boolean | Se definido como true, um chunk adicional será transmitido logo antes do data: [DONE] final. O campo usage neste chunk exibe as estatísticas de uso de tokens de toda a requisição. |
thinking | Não | Object | Modelos com capacidade de raciocínio profundo suportam o controle de ativação dessa funcionalidade através deste campo. |
? type | Não | String | enabled: Força a ativação do raciocínio profundo.<br>disabled: Força a desativação.<br>auto: O modelo decide automaticamente. |
Exemplo de Requisição
{
"model": "deepseek-v3-1-250821",
"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
},
"thinking": {
"type": "enabled"
}
}
Corpo da Resposta (Response)
Código de Status HTTP: 200 OK
Content-Type: application/json
(Nota: Quando stream: true, o formato de retorno é um fluxo de dados SSE, onde cada data chunk é uma string JSON com a estrutura abaixo. O modelo abaixo representa a estrutura JSON padrão para requisições não-streaming ou após a montagem completa do fluxo)
| Campo | Tipo | Descrição |
|---|---|---|
id | String | Identificador único da requisição. |
object | String | Tipo do objeto, geralmente chat.completion ou chat.completion.chunk. |
created | Integer | Timestamp de criação (em segundos). |
choices | Array of Objects | Lista de respostas geradas pelo modelo. |
? index | Integer | O índice desta resposta na lista choices. |
? message | Object | Objeto da mensagem de resposta gerada (em requisições streaming, geralmente é delta). |
? role | String | Papel (geralmente assistant). |
? content | String | Conteúdo específico da resposta. |
? finish_reason | String | Motivo pelo qual a geração parou (ex: stop, length). |
usage | Object | Estatísticas de uso de Tokens. |
? prompt_tokens | Integer | Quantidade de Tokens consumidos no prompt. |
? completion_tokens | Integer | Quantidade de Tokens consumidos na geração do conteúdo. |
? total_tokens | Integer | Quantidade total de Tokens consumidos. |
Exemplo de Resposta (JSON)
{
"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)
Q1: Como obter as estatísticas de consumo de Tokens (Usage) em requisições de streaming (SSE)?
A1: Você precisa definir stream como true no corpo da requisição e, simultaneamente, configurar stream_options: {"include_usage": true}. Dessa forma, antes do identificador de fim de fluxo SSE data: [DONE] ser enviado, o servidor enviará um bloco de dados adicional. O array choices deste bloco estará vazio, mas o campo usage conterá as estatísticas completas de Tokens.
Q2: Qual é a diferença entre enabled e auto no parâmetro thinking?
A2:
enabled: Força o modelo a realizar um "raciocínio profundo (Chain of Thought)" antes de retornar a resposta final. Isso geralmente resulta em deduções de maior qualidade, mas pode aumentar o tempo de resposta (latência do primeiro caractere) e o consumo de Tokens de saída.auto: Delega a decisão ao modelo. O modelo julgará automaticamente se há necessidade de raciocínio profundo com base na complexidade da pergunta nas suasmessages.
Q3: Por que a requisição retornou o erro 401 Unauthorized?
A3: Isso geralmente ocorre devido a uma falha na sua autenticação. Por favor, verifique se o campo Authorization no cabeçalho da sua requisição (Request Header) está preenchido corretamente no formato Bearer {{YOUR_API_KEY}}, e garanta que sua API Key seja válida e não esteja expirada.
Q4: Ao ativar o raciocínio profundo (thinking), o conteúdo do processo de raciocínio será retornado?
A4: Com base na implementação padrão do formato compatível com a OpenAI, no caso de saída em streaming, o conteúdo do raciocínio profundo pode ser retornado dentro de identificadores específicos (como a tag <think>...</think>) ou através de um campo específico no chunk. Ao fazer o parse dos dados de streaming no front-end, preste atenção em processar o conteúdo do processo de raciocínio no content, para exibir o efeito visual (UI) de "pensando" aos usuários.
Q5: O que significa receber finish_reason: "length"?
A5: Isso indica que a saída do modelo atingiu o limite max_tokens que você definiu, ou atingiu o limite máximo da janela de contexto do próprio modelo, fazendo com que a resposta fosse truncada. Se a resposta estiver incompleta, você pode tentar aumentar o valor de max_tokens.