Conclusões de chat

Estrutura de requisição/resposta, streaming e os endpoints equivalentes nos protocolos Anthropic e Gemini.

A conclusão de chat é o endpoint mais usado: envie uma lista de mensagens ao modelo e receba de volta a resposta gerada. A entrada principal da plataforma é o protocolo compatível com OpenAI; os protocolos Anthropic e Gemini são equivalentes isomórficos.

Formato da requisição (compatível com OpenAI)

POST {base}/chat/completions — autenticação em Autenticação:

{
  "model": "your-model",
  "messages": [
    {"role": "system", "content": "You are a support assistant."},
    {"role": "user", "content": "Where is my order?"},
    {"role": "assistant", "content": "Sure, may I have the order number?"},
    {"role": "user", "content": "A1024"}
  ],
  "temperature": 0.7,
  "max_tokens": 1024,
  "stream": false
}
  • messages é o histórico ordenado da conversa; role é system / user / assistant. Em conversas com vários turnos, o cliente monta o histórico completo e o reenvia a cada chamada;
  • Um temperature mais alto significa saída mais variada (comumente 0–1); max_tokens limita o tamanho da resposta;
  • Streaming: com "stream": true a resposta é enviada incrementalmente via SSE (choices[0].delta) — ideal para exibir o texto conforme é gerado. Nos SDKs oficiais: passe stream=True e itere.

Formato da resposta

Campos principais de uma resposta sem streaming:

{
  "choices": [
    {
      "message": {"role": "assistant", "content": "..."},
      "finish_reason": "stop"
    }
  ],
  "usage": {"prompt_tokens": 58, "completion_tokens": 132, "total_tokens": 190}
}
  • choices[0].message.content contém a resposta; finish_reason igual a stop significa que terminou naturalmente, e length que foi cortada por max_tokens;
  • usage é o consumo de tokens desta chamada — tanto a cobrança quanto a página "Uso" se baseiam nele.

Endpoints equivalentes em outros protocolos

  • Anthropic: POST {base}/v1/messages — os nomes dos campos mudam (max_tokens é obrigatório, a resposta fica no array content), mas a semântica é a mesma;
  • Gemini: POST {base}/v1beta/models/{model}:generateContent — as mensagens vão no array contents.

Os três protocolos são isomórficos; a migração é basicamente renomear campos. Na prática, use o SDK oficial correspondente (openai / @anthropic-ai/sdk / @google/genai) com base_url apontando para a plataforma.