DeepSeek V4 Pro (0813): Passback de Pensamento & Matriz de 3 APIs

AIHubMix15 min de leitura
DeepSeek V4 Pro (0813): Passback de Pensamento & Matriz de 3 APIs

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 mapeia claude-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: exceder max_tokens é rejeitado pela validação em vez de ser truncado silenciosamente — enviar max_tokens=9999999 retorna HTTP 400, e o corpo do erro nomeia o campo e dá o teto 393216.
# 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 parte input_image não falha na solicitação, ela é trocada por texto de espaço reservado. Em Chat Completions, a mensagem do usuário content aceita apenas uma string, e em Messages os blocos type="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: com thinking.type="disabled", tanto message.reasoning_content quanto usage.completion_tokens_details.reasoning_tokens desaparecem 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ída reasoning desaparece), 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 bloco thinking desaparece completamente e apenas o bloco text permanece.
Sobre os níveis de pensamento: low e max ambos 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ível none (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: inserir response.output de volta como está é tudo o que é necessário. Filtrar itens de saída por type == "message" enquanto monta o histórico descarta o item reasoning e 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 bloco thinking do array de conteúdo retorna 400 (com error.type definido como invalid_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 400 O 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 nomeada tool_choice em vez disso (como acima, que funciona com o pensamento ativado), ou desative o pensamento primeiro e depois use required.

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 linha tool_choice, que disable_parallel_tool_use é ignorado, e a página de Responses também afirma parallel_tool_calls | Ignorado (chamada de ferramenta em paralelo está sempre habilitada). Os testes confirmam: perguntar sobre duas cidades ao mesmo tempo com disable_parallel_tool_use: true ainda retorna dois blocos tool_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 para content quanto para reasoning_content. O código que lê apenas logprobs.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 sob logprobs, 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: enviar web_search_options ou enable_search não gera erro, mas também não recupera nada — a resposta não carrega annotations (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.createdresponse.completed) stream (message_startmessage_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.