Introdução
Chat compatível com OpenAI para o Grok 4.5, o modelo de código da linha Grok da xAI. Um turno carrega partes de texto e image_url, o esforço de raciocínio sobe até xhigh e uma única resposta pode chegar a 450.000 tokens.
A xAI publica o Grok 4.5 para software agêntico, engenharia e tarefas de fluxo de trabalho, treinou-o com dados adicionais de ciência, engenharia e matemática e também o serve sob os apelidos grok-4.5-latest e grok-build-latest. Aqui ele é um endpoint em /v1/chat/completions que lê até 500.000 tokens espalhados por no máximo 256 mensagens ordenadas e devolve até 450.000 numa resposta só. Entrada, entrada em cache e saída são contabilizadas em separado — e é exatamente isso que um loop de agente que repete um prefixo longo está pagando.
Recursos e destaques
O prefixo que você reenvia tem o medidor dele
Um loop de agente manda a cada passo o mesmo prompt de sistema, as mesmas definições de ferramentas e o mesmo mapa de arquivos; só o fim da conversa é novo. A entrada servida do cache é contada à parte no bloco usage e contabilizada na tarifa própria dela, mais baixa. Não há nada para ligar. Deixar as primeiras mensagens paradas entre os passos é a técnica inteira, e a resposta informa quanto do prefixo caiu de fato no cache em vez de deixar você supor.
Texto e imagens na entrada, texto na saída
O conteúdo pode ser uma string simples ou um array de partes, e este modelo declara duas: {"type": "text", "text": "..."} e {"type": "image_url", "image_url": {"url": "...", "detail": "auto|low|high"}}. Um print e a pergunta sobre ele chegam no mesmo turno, e o conteúdo das imagens é contado dentro da janela de 500.000 tokens, não em cima dela. Neste endpoint não há parte de arquivo nem de PDF, então uma especificação, um log ou um diff precisa chegar como texto colado. O esforço de raciocínio aceita low, medium, high ou xhigh e começa em high; ele é pago em tokens de saída, então conta contra o limite de resposta tanto quanto contra a conta.
Parâmetros da requisição
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
messages | Sim | No máximo 256 turnos. O conteúdo pode misturar partes de texto e |
reasoning_effort | Não | low, medium, high ou xhigh. High é o padrão; o esforço é gasto em tokens de saída, então xhigh sobe a conta mesmo com resposta curta. |
max_tokens | Não | Limita a resposta visível a 450.000; o padrão de 4.096 corta uma resposta longa sem avisar. |
temperature | Não | De 0 a 2, padrão 0,7. Use 0 quando comparar dois patches ou duas execuções da mesma tarefa. |
top_p | Não | De 0,01 a 1. Mexa neste valor ou em temperature, não nos dois juntos. |
tools | Não | Até 128 definições de função por requisição. Manter a ordem delas estável entre os passos ajuda o prefixo a continuar cacheável. no máximo 128 itens |
parallel_tool_calls | Não | true ou false, padrão true: o modelo pode pedir várias chamadas de ferramenta no mesmo turno. Valor padrão: |
tool_choice | Não | auto, none, required, ou um objeto nomeando a função a chamar. |
response_format | Não | Peça um objeto JSON quando a resposta for interpretada pelo passo seguinte de um agente e não lida por uma pessoa. |
Preços
Entrada $2 / Saída $6 por 1 milhão de tokens; Prompts com 200K tokens ou mais: Entrada $4 / Saída $12
O total de entrada inclui tokens em cache. A partir de 200.000 tokens de entrada, as tarifas de contexto longo se aplicam a toda a entrada, entrada em cache e saída da requisição; abaixo desse limite, valem as tarifas padrão. A entrada em cache é contabilizada à parte da entrada nova e cobrada abaixo dela. A saída inclui tokens de raciocínio, então subir o esforço custa mais mesmo quando a resposta visível tem o mesmo tamanho. Confira o orçamento antes do envio. A reserva inicial não considera economia de cache; na liquidação, a diferença é devolvida conforme o uso medido.
Casos de uso
Manter o loop inteiro dentro do contexto
Um agente de código reenvia a cada passo suas instruções, suas definições de ferramentas e seu mapa de arquivos, e acrescenta algumas centenas de tokens novos por vez. Tudo isso cabe na janela de 500.000 tokens, a parte repetida é contabilizada como entrada em cache, e a requisição só cruza para a tarifa de contexto longo aos 200.000 tokens somados de entrada e entrada em cache — o que a estimativa antes do envio informa antes de você pagar.
Refatorar com o módulo, os testes e a falha num turno
Cole juntos o módulo, o arquivo de testes e a saída que falhou, e peça o patch com o raciocínio por trás. Suba o reasoning_effort para xhigh quando a mudança precisar ser pensada antes de ser escrita: ele gasta mais tokens de saída antes da primeira linha de código aparecer, o que compensa numa alteração que você vai revisar linha a linha.
Ler junto um print e um stack trace
Anexe um painel que falhou como parte image_url com detail high, cole o stack trace como texto na mesma mensagem e peça as causas em ordem de probabilidade. A imagem e o log chegam num turno só, então o modelo lê o painel em si e não a sua descrição dele.
Receber um dossiê de migração numa resposta
450.000 tokens de saída dão conta de um plano de migração completo, um módulo reescrito ou um manual traduzido numa resposta só, em vez de um loop por capítulos. Suba o max_tokens de forma explícita: o padrão de 4.096 corta uma geração longa sem levantar erro, e o corte é a falha que mais se parece com uma resposta pronta.
Guia de prompt e dicas práticas
Escolha o nível de esforço por tarefa, não por projeto
O reasoning_effort começa em high, então omitir o campo já paga por um trabalho caprichado e os tokens de saída que vêm junto. Decida chamada a chamada: xhigh para uma migração ou uma prova, high para uma revisão comum, low para um turno mecânico como classificar uma linha de log. Como o esforço é pago em tokens de saída, uma resposta curta em xhigh pode sair mais cara que uma longa em low.
Peça o artefato, com um corpo pronto para colar
Fixe o formato da saída na mensagem de sistema e deixe o turno de usuário carregar as evidências — o arquivo, o log, o print — para o modelo não ter que adivinhar o formato enquanto resolve o problema.
curl https://api.spicyapi.ai/v1/chat/completions \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "xai/grok-4.5",
"messages": [
{"role": "system", "content": "Return the patched file in full. No diffs, no commentary, no omitted regions."},
{"role": "user", "content": [
{"type": "text", "text": "Both panels are the same service before and after the deploy. Which one regressed, and what in the diff explains it?"},
{"type": "image_url", "image_url": {"url": "https://cdn.spicyapi.ai/models/examples/inputs/c681580c3c6a0b63.jpeg", "detail": "high"}}
]}
],
"reasoning_effort": "high",
"max_tokens": 32000
}'
Leia o bloco usage antes de mexer em qualquer coisa
A resposta informa em separado os tokens de entrada, de entrada em cache e de saída, e essa é a única resposta honesta para “meu prefixo foi cacheado?”. Ajuste a partir daí e não do formato da conversa: se a fatia em cache continuar em zero passo após passo, alguma coisa muda nas primeiras mensagens — um carimbo de tempo no prompt de sistema, uma lista de ferramentas reordenada — e mover esse conteúdo para o fim da requisição costuma ser a correção inteira. Para respostas longas, ative o streaming com stream: true, que devolve eventos chat.completion.chunk até data: [DONE].
Início rápido da API
curl --fail-with-body -sN https://api.spicyapi.ai/v1/chat/completions \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"model": "xai/grok-4.5/chat",
"messages": [
{
"role": "user",
"content": "Summarise the following release notes into three bullet points."
}
],
"stream": true
}' \
| jq --unbuffered -Rrj 'select(startswith("data: ")) | .[6:] | select(. != "[DONE]") | fromjson | if .error then "\n[error] \(.error.message)\n" else (.choices[0].delta.content? // empty) end'
Consulte a referência da API para autenticação, esquema completo, polling e tratamento de erros.










