Este artigo cobre as notas de uso e armadilhas do deepseek-v4-pro-0813. No AIHubMix, o modelo está disponível através das APIs de Chat Completions, Responses e Messages compatíveis com Claude. Veja também: Documentação oficial da API DeepSeek.
As conclusões e respostas de exemplo "Verificadas" em cada seção vêm de chamadas reais feitas em 2026-08-13 através das APIs AIHubMix (Chat Completions / Responses / Messages); itens de especificação não marcados como "Verificados" vêm da documentação oficial do DeepSeek.
1. Posicionamento do Modelo e Especificações em Resumo
O V4 Pro é a camada de alto desempenho da geração V4 do DeepSeek (o leve deepseek-v4-flash é seu irmão). A linha de lançamento remonta ao DeepSeek-V4 Preview em 2026-04-24, e 0813 é o rótulo da VERSÃO DO MODELO que o DeepSeek atribuiu à versão atual. Além das especificações brutas, quatro coisas o diferenciam:
- Um modelo de fronteira esparsa: 1,6T de parâmetros totais / 49B ativados (uma arquitetura MoE, ou mistura de especialistas — cada passagem de inferência ativa apenas um subconjunto de redes de especialistas: parâmetros totais determinam a capacidade de conhecimento, parâmetros ativados determinam o custo computacional por chamada). O cartão do modelo lista atenção híbrida CSA+HCA, mHC e o otimizador Muon.
- Pesos abertos sob MIT:
deepseek-ai/DeepSeek-V4-Proé publicado no HuggingFace sob a licença MIT (uma das licenças de código aberto mais permissivas — uso comercial e redistribuição de código fechado são ambos permitidos) e pode ser auto-hospedado. MIT é incomum para um modelo desse tamanho. As notas de auto-hospedagem do cartão do modelo também sugerem uma janela de contexto de ≥384K tokens ao rodar em Think Max (o nível mais alto de pensamento) — isso é uma orientação de implantação para auto-hospedagem, não uma especificação da API hospedada. - Suporte a múltiplos protocolos é de primeira parte, não tradução de terceiros: O DeepSeek oferece uma API de Chat da OpenAI, um endpoint compatível com Anthropic (
/anthropic, que mapeiaclaude-opus*para este modelo) e a API de Responses (o DeepSeek descreve suporte nativo para o formato, com adaptações para Codex). Também oferece conclusão FIM (preencher no meio) como um recurso Beta em um endpoint separado, que não faz parte das três APIs AIHubMix. - Uma diferença de ~120× entre preços de acerto de cache e erro de cache: O mecanismo de preços publicado do DeepSeek é acerto de cache $0.003625/M vs erro de cache $0.435/M (saída $0.87/M), e o cache é automático, sem parâmetro a ser definido. Para cargas de trabalho que reutilizam longos prefixos (prompts do sistema, documentos longos), essa diferença domina a fatura. O preço de varejo real é o que a página do modelo mostra.
| Item | Valor |
|---|---|
| Nome do modelo no AIHubMix | deepseek-v4-pro-0813 |
| Janela de contexto | 1M tokens (1.000.000) |
| Saída máxima | A redação oficial é MAX OUTPUT MAXIMUM: 384K (a contagem exata de tokens e o padrão não são publicados) |
| Modalidades de entrada | Apenas texto. A página de compatibilidade de Responses afirma explicitamente que entradas de imagem e arquivo não são suportadas; a página de Messages marca explicitamente os blocos type="image" como Não Suportados; em Chat Completions, a mensagem do usuário content aceita apenas uma string, sem partes de conteúdo multimodal |
| Modo de pensamento | Híbrido (pensamento / não-pensamento), pensamento ativado por padrão |
| Níveis de pensamento | reasoning_effort aceita low / high / max, padrão high; medium e xhigh são mapeados para high para compatibilidade |
| APIs disponíveis | Chat Completions, Responses, Messages (compatível com Claude) |
Verificado: excedermax_tokensé rejeitado pela validação em vez de ser truncado silenciosamente — enviarmax_tokens=9999999retorna HTTP 400, e o corpo do erro nomeia o campo e dá o teto393216.
# max_tokens=9999999 -> HTTP 400
"...max_tokens... 393216"
❗ Imagens não geram um erro, mas são descartadas: a redação oficial para a API de Responses é "Entradas de imagem e arquivo não são suportadas (partes de input_image não causam um erro, mas são substituídas por um texto de espaço reservado)" — uma parteinput_imagenão falha na solicitação, ela é trocada por texto de espaço reservado. Em Chat Completions, a mensagem do usuáriocontentaceita apenas uma string, e em Messages os blocostype="image"são marcados como Não Suportados. Ao construir roteamento multimodal, nunca trate "sem erro" como evidência de que o modelo realmente viu a imagem.
2. Como Desativar o Pensamento? Três APIs, Três Formatos de Campo
O V4 Pro pensa por padrão: não envie parâmetros e a resposta retornará com conteúdo de pensamento. Desativá-lo usa um formato de campo diferente em cada uma das três APIs.
Chat Completions
Use o objeto thinking de nível superior.
from openai import OpenAI
client = OpenAI(
base_url="https://aihubmix.com/v1",
api_key="<AIHUBMIX_API_KEY>",
)
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "Qual é 2 + 2?"}],
extra_body={"thinking": {"type": "disabled"}},
)
# Pensamento ativado (padrão): message.reasoning_content presente, reasoning_tokens = 43
# Pensamento desativado (desativado): reasoning_content ausente, reasoning_tokens ausente
Verificado: comthinking.type="disabled", tantomessage.reasoning_contentquantousage.completion_tokens_details.reasoning_tokensdesaparecem juntos, o que confirma que a mudança teve efeito.
Responses
Não há um interruptor separado em Responses; desativar o pensamento significa definir o nível como none.
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Qual é 2 + 2?",
reasoning={"effort": "none"},
)
# effort="none": usage.output_tokens_details.reasoning_tokens = 0
# output[0] é o item de mensagem diretamente (sem item de raciocínio)
# effort não definido : output sempre começa com um item de raciocínio
Verificado:reasoning.effort="none"difere observavelmente do nível padrão (tokens de pensamento caem para zero, o item de saídareasoningdesaparece), o que confirma que teve efeito.
Messages
Mesmo nome e mesmo formato que Chat Completions: o objeto thinking de nível superior.
from anthropic import Anthropic
client = Anthropic(
api_key="<AIHUBMIX_API_KEY>",
base_url="https://aihubmix.com",
)
response = client.messages.create(
model="deepseek-v4-pro-0813",
max_tokens=1024,
messages=[{"role": "user", "content": "Qual é 2 + 2?"}],
extra_body={"thinking": {"type": "disabled"}},
)
# Pensamento ativado (padrão): content = [bloco de pensamento, bloco de texto]
# Pensamento desativado (desativado): content = [bloco de texto]
Verificado: uma vez desativado, o blocothinkingdesaparece completamente e apenas o blocotextpermanece.
Sobre os níveis de pensamento:lowemaxambos retornaram 200 em Chat Completions nos testes (highé o padrão e se aplica quando o campo é omitido), mas as contagens de tokens de pensamento não mostram diferença monotônica entre os níveis para a mesma pergunta (pergunta fácil: low=43 / max=27; pergunta difícil: low=114 / max=92), e nada é ecoado de volta na resposta — os níveis são aceitos, mas nenhum sinal distintivo é observável na resposta. Em Responses, apenas o nívelnone(pensamento desativado) pode ser confirmado do lado da resposta.
3. Por Que Uma Conversa de Múltiplas Rodadas Retorna Subitamente 400? O Histórico de Pensamento Deve Ser Retornado Verbatim
Este é o único gatilho mais comum com este modelo: no modo de pensamento, uma conversa de múltiplas rodadas deve passar o conteúdo de pensamento da rodada anterior de volta verbatim, ou a solicitação é rejeitada. Não degradada, não de qualidade inferior — um HTTP 400 rigoroso.
As três APIs carregam o mesmo conteúdo de pensamento sob diferentes nomes de campo:
| API | Formato de Passback | Corpo de erro quando ausente |
|---|---|---|
| Chat Completions | O campo reasoning_content na mensagem do assistente |
O `reasoning_content` no modo de pensamento deve ser passado de volta para a API. |
| Responses | O item de saída com type="reasoning" no array input |
O `reasoning_text` no modo de pensamento deve ser passado de volta para a API. |
| Messages | O bloco thinking dentro dos blocos de conteúdo do assistente |
O `content[].thinking` no modo de pensamento deve ser passado de volta para a API. |
Verificado (condições de gatilho): esta validação dispara consistentemente em solicitações de múltiplas rodadas que carregam tools (o modelo emite uma chamada de ferramenta, então o resultado da ferramenta é enviado de volta). Em solicitações de múltiplas rodadas simples sem ferramentas, onde o modelo responde diretamente, a validação não disparou nesta rodada de testes e a solicitação retornou 200. Em outras palavras, a orquestração de ferramentas (cargas de trabalho de agente / chamada de função) é onde você é mais provável de encontrar isso, então trate o conteúdo de pensamento como parte do estado da conversa que você persiste e reproduz.Chat Completions
# Múltiplas rodadas: passe a mensagem anterior do assistente de volta verbatim, incluindo reasoning_content
messages = [
{"role": "user", "content": "Qual é 1 + 1? Lembre-se do resultado."},
{
"role": "assistant",
"content": "2",
"reasoning_content": "<reasoning_content da resposta anterior>",
},
{"role": "user", "content": "Adicione 1 ao resultado."},
]
# Descartando reasoning_content -> HTTP 400 invalid_request_error
Verificado: uma mensagem histórica do assistente ausente de reasoning_content retorna 400; adicioná-la de volta faz a solicitação idêntica retornar 200 e continuar corretamente.Responses
# Múltiplas rodadas: input = entrada anterior + response.output (item de raciocínio incluído) + nova mensagem
input = previous_input + response.output + [
{"role": "user", "content": "Adicione 1 ao resultado."}
]
# Filtrando o item type="reasoning" -> HTTP 400
Verificado: inserirresponse.outputde volta como está é tudo o que é necessário. Filtrar itens de saída portype == "message"enquanto monta o histórico descarta o itemreasoninge aciona o 400 — esta é a maneira mais comum de se machucar.
Messages
# Múltiplas rodadas: passe response.content de volta verbatim como a mensagem do assistente
messages = [
{"role": "user", "content": "Qual é o clima em Paris?"},
{"role": "assistant", "content": response.content}, # blocos de pensamento + uso de ferramenta
{"role": "user", "content": [tool_result_block]},
]
# Removendo o bloco de pensamento -> HTTP 400
Verificado: remover o blocothinkingdo array de conteúdo retorna 400 (comerror.typedefinido comoinvalid_request_error).
4. Chamada de Ferramenta
Cada API declara ferramentas em seu próprio formato de protocolo; os formatos não são intercambiáveis.
Chat Completions
Formato aninhado (um objeto function envolvendo name / parameters). Uma tool_choice de função nomeada força a chamada.
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "Qual é o clima em Paris?"}],
tools=[{
"type": "function",
"function": {
"name": "get_weather",
"description": "Obter clima para uma cidade",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
},
}],
tool_choice={"type": "function", "function": {"name": "get_weather"}},
)
# Observado: finish_reason "tool_calls", tool_calls[0].function.arguments = {"city": "Paris"}
❗ Verificado:tool_choice: "required"não pode ser usado enquanto o pensamento está ativado — retorna 400O modo de pensamento não suporta este tool_choice; desativar o pensamento (thinking.type="disabled") faz a solicitação idêntica retornar 200. Quando você precisa de semântica de "deve chamar uma ferramenta", use uma função nomeadatool_choiceem vez disso (como acima, que funciona com o pensamento ativado), ou desative o pensamento primeiro e depois userequired.
Responses
Formato plano (type / name / parameters no mesmo nível).
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Qual é o clima em Paris?",
tools=[{
"type": "function",
"name": "get_weather",
"description": "Obter clima para uma cidade",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
)
# Itens de saída observados: ["reasoning", "function_call"]; argumentos = {"city": "Paris"}
Verificado: copiar o formato aninhado de Chat Completions (function: {...}) para Responses retorna 400 — use o formato plano.tool_choice: "required"está sujeito à mesma restrição de modo de pensamento que em Chat.
Messages
Formato nativo do Anthropic (input_schema), com tool_choice: {"type": "any"} para forçar uma chamada.
response = client.messages.create(
model="deepseek-v4-pro-0813",
max_tokens=1024,
tools=[{
"name": "get_weather",
"description": "Obter clima para uma cidade",
"input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
tool_choice={"type": "any"},
messages=[{"role": "user", "content": "Qual é o clima em Paris?"}],
)
# Observado: o conteúdo contém um bloco de uso de ferramenta, nome = get_weather, entrada = {"city": "Paris"}
❗ A chamada de ferramentas em paralelo não pode ser desativada, pelo próprio design do DeepSeek — a página de compatibilidade oficial do Anthropic afirma, na linhatool_choice, quedisable_parallel_tool_use é ignorado, e a página de Responses também afirmaparallel_tool_calls | Ignorado (chamada de ferramenta em paralelo está sempre habilitada). Os testes confirmam: perguntar sobre duas cidades ao mesmo tempo comdisable_parallel_tool_use: trueainda retorna dois blocostool_use. Se você precisar de execução serial, faça a primeira chamada ou coloque-as em fila você mesmo no lado do cliente.
Contagem de ferramentas e custo de contexto: enviar 200 definições de função em uma única solicitação ainda retornou 200 com uma resposta normal e não acionou nenhuma validação de contagem (observado neste caminho; contagens mais altas não foram testadas). Mas prompt_tokens para essa solicitação alcançou 6.105 — definições de ferramentas entram no contexto na íntegra e são cobradas. Quando você tem muitas ferramentas, reduza o conjunto de ferramentas por cenário em vez de declarar tudo incondicionalmente.5. Saída Estruturada
Chat Completions
response_format suporta modo JSON.
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "Retorne {\"a\": 1} como JSON."}],
response_format={"type": "json_object"},
)
# Conteúdo de resposta observado: {"a":1}
Verificado: a saída é JSON válido.
Responses
Declare um Esquema JSON através de text.format, com modo strict suportado.
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Retorne o número 1 sob a chave a.",
text={
"format": {
"type": "json_schema",
"name": "extract",
"strict": True,
"schema": {"type": "object", "properties": {"a": {"type": "integer"}}, "required": ["a"]},
}
},
)
# Texto de saída observado: {"a":1}
Verificado: a saída está em conformidade estrita com o esquema fornecido.
Messages
O protocolo Messages (Anthropic) não tem equivalente para response_format / text.format. A solução usual é carregar o esquema em uma ferramenta — declare uma ferramenta cujo input_schema seja seu esquema alvo, defina tool_choice: {"type": "any"}, e leia o resultado estruturado do input do bloco tool_use. Esta rodada de testes não verificou especificamente esse padrão; quando você precisa de garantias rígidas de esquema, prefira Chat Completions ou Responses.
6. Como Você Habilita o Cache de Contexto? Você Não Habilita, É Automático
O cache de contexto (prefixos idênticos são reutilizados, e a parte em cache é cobrada a uma taxa mais baixa) está ativado por padrão e não precisa de parâmetros. Uma segunda solicitação com o mesmo longo prefixo relata o acerto em usage, sob um nome de campo que varia por API. Para detalhes de cache e preços atuais, veja a página do modelo; para estratégia de cache entre modelos e técnicas de taxa de acerto, veja práticas de cache de prompt.
Chat Completions
# uso da segunda chamada com um prefixo longo idêntico
"prompt_tokens_details": {"cached_tokens": 640} # primeira chamada: 0
Verificado: duas chamadas consecutivas com o mesmo longo prefixo no mesmo canal moveram cached_tokens de 0 para 640.Responses
# uso da segunda chamada com instruções longas idênticas
"input_tokens_details": {"cached_tokens": 896} # primeira chamada: 0
Messages
# uso de uma chamada cujo longo prefixo do sistema já estava aquecido
"cache_read_input_tokens": 896
Verificado: o prefixo acima foi aquecido por uma solicitação de Responses com conteúdo idêntico, e a primeira chamada de Messages atingiu 896 imediatamente — consistente com o cache sendo baseado no prefixo de conteúdo e compartilhado entre superfícies de protocolo.
7. logprobs: Chat Retorna Dois Canais
logprobs (logaritmos de probabilidades — o detalhe de confiança do modelo por token candidato) retorna em formatos diferentes nas duas APIs, e o código de análise deve lidar com eles separadamente.
Chat Completions
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "Diga oi."}],
logprobs=True,
top_logprobs=2,
)
# Observado: choices[0].logprobs contém DUAS matrizes
# logprobs.content[] -> tokens da resposta final
# logprobs.reasoning_content[] -> tokens do texto de pensamento
❗ Verificado: Chat retorna probabilidades logarítmicas tanto paracontentquanto parareasoning_content. O código que lê apenaslogprobs.content, de acordo com a forma de resposta padrão da OpenAI, não gerará erro, mas perderá silenciosamente o canal de pensamento; se seu código assumir um único array soblogprobs, adicione uma verificação de formato primeiro.
Responses
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Diga oi.",
top_logprobs=3,
)
# Observado: logprobs apenas no item de mensagem final
# output[-1].content[0].logprobs[] com detalhes de logprob + top_logprobs
Verificado: Responses anexa logprobs apenas ao item de texto final — nenhum dos formatos de canal duplo vistos em Chat.
Messages
O protocolo Messages (Anthropic) não tem campo equivalente. Para detalhe de probabilidade em nível de token, use Chat Completions ou Responses.
8. Quais APIs Podem Pesquisar na Web?
A pesquisa na web aqui é uma ferramenta do lado do servidor (a recuperação é executada no servidor; o cliente nunca emite a solicitação em si), e realmente é executada em ambas as APIs Responses e Messages nos testes.
Responses
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Qual é a versão estável mais recente do Python?",
tools=[{"type": "web_search"}],
)
# Sequência de itens de saída observada:
# ["reasoning", "web_search_call", "reasoning", "message"]
Verificado: um item web_search_call aparece na sequência de saída, o que significa que o servidor realmente executou uma recuperação.Messages
response = client.messages.create(
model="deepseek-v4-pro-0813",
max_tokens=1024,
tools=[{"type": "web_search_20250305", "name": "web_search"}],
messages=[{"role": "user", "content": "Qual é a versão estável mais recente do Python?"}],
)
# Sequência de blocos de conteúdo observada:
# ["thinking", "server_tool_use", "web_search_tool_result", "thinking", "text"]
# usage.server_tool_use.web_search_requests = 1
Verificado: usage.server_tool_use.web_search_requests conta 1 — a solicitação de recuperação realmente aconteceu e foi medida.Chat Completions
A pesquisa na web não pode ser acionada no Chat. A referência oficial da API de Chat do DeepSeek não contém nenhum campo de ferramenta de pesquisa em nenhum lugar no esquema de solicitação (essa é uma ausência estabelecida ao percorrer a lista de campos um por um; o DeepSeek não fez nenhuma declaração explícita negando suporte). A API com uma declaração oficial explícita de suporte à pesquisa do lado do servidor é Responses (web_search), e a página de compatibilidade oficial de Messages também lista os blocos de conteúdo relacionados à pesquisa.
# Três grupos de controle, mesma pergunta exigindo informações ao vivo, todos HTTP 200:
# A sem campo de pesquisa -> "não pode recuperar", anotações = null
# B web_search_options -> "não pode recuperar", anotações = null, uso idêntico ao A
# C enable_search -> "não pode recuperar", anotações = null, uso idêntico ao A
Verificado: enviarweb_search_optionsouenable_searchnão gera erro, mas também não recupera nada — a resposta não carregaannotations(a lista de citações anexada a uma resposta quando a pesquisa na web é executada), e o uso corresponde ao grupo de controle campo por campo. Para acesso à web, use a API Responses ou Messages em vez disso.
9. Notas de Uso: Design do DeepSeek vs Desvios em Nosso Caminho
Tudo abaixo retorna HTTP 200 enquanto se comporta de maneira contra-intuitiva. As causas diferem, e o que você deve fazer a respeito também, então estão listadas separadamente: o primeiro grupo é como o DeepSeek projetou o modelo, e mudar de provedores não mudará isso; o segundo grupo é o comportamento atual no caminho AIHubMix, que estamos trabalhando.
9.1 Pelo Design do DeepSeek
| Comportamento | Redação oficial | O que fazer |
|---|---|---|
| Responses não retém estado de sessão ou metadados | A página de compatibilidade oficial de Responses afirma, linha por linha, store | Não suportado. A resposta sempre carrega store: false, metadata | Não suportado, e safety_identifier | Não suportado (desses quatro campos, apenas user é Suportado). Os testes confirmam: a solicitação retorna 200, mas metadata é nulo, safety_identifier está ausente, e store é sempre false |
Mantenha dados de correlação de solicitações no cliente; não confie na retenção do lado do servidor |
| Parâmetros de amostragem não têm efeito no modo de pensamento | O DeepSeek afirma explicitamente que temperature e top_p são silenciosamente inertes no modo de pensamento. Nos testes, ambos retornam 200 sem nada ecoado de volta e sem mudança na forma de resposta |
Não confie em parâmetros de amostragem para estabilidade de saída no modo de pensamento; use saída estruturada quando precisar de determinismo |
| Continuação de prefixo / FIM está apenas no endpoint beta oficial | A descrição oficial de prefix é "(Beta) … Você deve definir base_url="https://api.deepseek.com/beta" para usar este recurso", e a conclusão FIM é igualmente um recurso Beta. Verificado na produção do AIHubMix: enviar prefix: true contra o endpoint padrão retorna 200, mas o prefixo é descartado silenciosamente, consistente na direção com a redação oficial |
Para formato de saída controlado, use saída estruturada (seção 5) ou truncamento stop |
| Chamada de ferramenta em paralelo não pode ser desativada | Veja a seção 4: O DeepSeek afirma nas páginas de Responses e Anthropic que o interruptor é ignorado e a chamada em paralelo está sempre ativada | Coloque chamadas em fila no cliente quando precisar de execução serial |
9.2 Comportamento Atual no Caminho AIHubMix
| Comportamento | O que os testes mostram | O que fazer |
|---|---|---|
Tipo não padrão type em objetos de erro de Responses |
O error.type em respostas 4xx é Aihubmix_api_error, enquanto a mesma classe de erro em Messages retorna o invalid_request_error canônico |
Divida com base no código de status HTTP, não na string error.type |
| Tokens de pensamento contados como 0 em Messages | A resposta carrega um bloco thinking, no entanto usage.output_tokens_details.thinking_tokens é sempre 0, o que contradiz o conteúdo de pensamento realmente produzido; sob o contrato Anthropic contra o qual integramos, esse campo é obrigatório e deve ser ≤ output_tokens |
Para contabilidade de custo de pensamento, use completion_tokens_details.reasoning_tokens em Chat ou output_tokens_details.reasoning_tokens em Responses |
Messages ecoa model como deepseek-v4-pro |
A solicitação envia deepseek-v4-pro-0813 e a resposta ecoa deepseek-v4-pro. A causa é nomeação: o único nome de modelo da API oficial do DeepSeek é deepseek-v4-pro, e 0813 é seu rótulo de versão |
Não faça do campo model da resposta a única base para verificações de roteamento de modelo ou atribuição de uso |
9.3 Indefinido pelo DeepSeek, Portanto Sem Veredicto de Qualquer Maneira
Enviar um valor fora do enum para reasoning_effort (por exemplo, bogus_xyz) retorna 200 com uma resposta normal, sem erro e sem efeito observável. O fato é claro o suficiente — este caminho atualmente não valida o enum reasoning_effort. O que não está claro é se deveria: o DeepSeek publica o enum legal, mas nunca afirma se um nível ilegal deve ser rejeitado, então não há uma linha de base para julgar, o que significa que isso não conta nem como comportamento oficial nem como um defeito em nosso caminho. A abordagem segura do lado do cliente: valide o nível você mesmo e não conte com a API para capturá-lo.
10. Matriz de Capacidade × Suporte à API
As células abaixo fornecem a grafia de parâmetro / campo para cada API. Exceto onde marcado como redação explícita do DeepSeek, cada conclusão vem de chamadas reais feitas em 2026-08-13 contra as APIs de produção AIHubMix.
| Capacidade | Chat Completions | Responses | Messages |
|---|---|---|---|
| Instruções básicas de chat / sistema | ✅ messages |
✅ input + instructions |
✅ messages + system de nível superior |
| Streaming | ✅ stream + stream_options |
✅ stream (response.created … response.completed) |
✅ stream (message_start … message_stop) |
| Teto de saída | ✅ max_tokens (400 quando excedido, teto 393216) |
✅ max_output_tokens |
✅ max_tokens |
| Desativando o pensamento | ✅ thinking: {"type": "disabled"} |
✅ reasoning: {"effort": "none"} |
✅ thinking: {"type": "disabled"} |
| Nível de pensamento | 🟡 reasoning_effort aceito, sem sinal distintivo |
✅ reasoning.effort (apenas none confirmável) |
🟡 output_config.effort aceito, nada ecoado de volta |
| Conteúdo de pensamento retornado | ✅ campo reasoning_content |
✅ item de saída reasoning |
✅ bloco de conteúdo thinking |
| Passback obrigatório do histórico de pensamento | ✅ reasoning_content ausente → 400 |
✅ item reasoning ausente → 400 |
✅ bloco thinking ausente → 400 |
| Chamada de ferramenta | ✅ tools aninhadas + tool_choice nomeado |
✅ tools plano |
✅ input_schema + tool_choice: {"type":"any"} |
Forçando uma chamada com required |
❗ 400 enquanto o pensamento está ativado; desative o pensamento primeiro | ❗ o mesmo que à esquerda | ✅ {"type": "any"} |
| Chamada de ferramenta em paralelo (não desativável) | ➖ nenhum campo desse tipo na API oficial de Chat | ❗ O DeepSeek afirma que parallel_tool_calls é ignorado e a chamada em paralelo está sempre ativada |
❗ O DeepSeek afirma que disable_parallel_tool_use é ignorado; os testes ainda retornam dois blocos tool_use |
| Saída estruturada | ✅ response_format (json_object) |
✅ text.format (json_schema + strict) |
➖ nenhum campo de protocolo; carregue o esquema em uma ferramenta |
| Medição automática de acertos de cache | ✅ usage.prompt_tokens_details.cached_tokens |
✅ usage.input_tokens_details.cached_tokens |
✅ usage.cache_read_input_tokens |
| logprobs | ❗ canal duplo: content + reasoning_content |
✅ top_logprobs apenas no item de texto final |
➖ |
| Pesquisa na web | ➖ nenhum campo de pesquisa na API oficial de Chat; enviar um também não recupera nada | ✅ tools: [{"type": "web_search"}] |
✅ web_search_20250305 |
| Sequências de parada | ✅ stop |
➖ nenhum campo de sequência de parada no protocolo (apenas max_output_tokens limita o comprimento) |
✅ stop_sequences (stop_reason: "stop_sequence") |
Lenda: ✅ verificado como funcionando · 🟡 aceito, mas não pode ser confirmado como eficaz · ❗ precisa de atenção (veja as notas acima) · ➖ nenhum conceito desse tipo nesta API
FAQ
Quais APIs o deepseek-v4-pro-0813 suporta no AIHubMix?
Chat Completions (/v1/chat/completions), Responses (/v1/responses) e a API Messages compatível com Claude (/v1/messages).
Por que uma conversa de múltiplas rodadas retorna subitamente 400?
A causa mais comum é o histórico de pensamento que não foi passado de volta. No modo de pensamento, o conteúdo de pensamento da rodada anterior deve ser reproduzido verbatim: reasoning_content na mensagem do assistente para Chat, o item de saída type="reasoning" para Responses, e o bloco de conteúdo thinking para Messages. Múltiplas rodadas com ferramentas é onde isso mais impacta — muitas estruturas filtram itens de saída por type == "message" enquanto montam o histórico, o que descarta o item de raciocínio.
O pensamento pode ser desativado?
Sim. Envie thinking: {"type": "disabled"} em Chat ou Messages, e reasoning: {"effort": "none"} em Responses. Uma vez desativado, tanto o conteúdo de pensamento quanto os tokens de pensamento desaparecem.
Os três níveis de reasoning_effort diferem?low / high / max são todos aceitos (padrão high; medium e xhigh são mapeados para high para compatibilidade). Nos testes, as contagens de tokens de pensamento para a mesma pergunta não mostram diferença monotônica entre os níveis e nada é ecoado de volta, então a diferença não pode ser confirmada do lado do chamador. Apenas o nível none em Responses (pensamento desativado) produz uma diferença observável clara.
Por que tool_choice: "required" retorna 400?
Esse valor não é aceito enquanto o pensamento está ativado (o corpo do erro lê O modo de pensamento não suporta este tool_choice). Use um tool_choice de função nomeada ({"type": "function", "function": {"name": "..."}}) para forçar uma chamada específica com o pensamento ativado, ou desative o pensamento primeiro e depois use required.
Como você habilita o cache de contexto?
Você não habilita — é automático. Coloque o conteúdo estável e imutável (prompts do sistema, trechos de conhecimento, definições de ferramentas) na frente da solicitação, e a contagem de acertos é relatada no uso: prompt_tokens_details.cached_tokens em Chat, input_tokens_details.cached_tokens em Responses, e cache_read_input_tokens em Messages.
Para preços e status em tempo real, veja a página do modelo deepseek-v4-pro-0813; para mais modelos, visite a galeria de modelos.
Guias práticos relacionados: Guia prático do Kimi K3 (novos parâmetros e uma matriz de suporte a três APIs) e Mudanças de cache de prompt e cobrança do GPT-5.6.




