Migrando para o DeepSeek V4.1 Flash 1017: o erro 400 do reasoning_content, a troca silenciosa de alias e a cobrança no horário de pico

AIHubMix9 min de leitura
Migrando para o DeepSeek V4.1 Flash 1017: o erro 400 do reasoning_content, a troca silenciosa de alias e a cobrança no horário de pico

A maioria das migrações começa com a troca do nome de um modelo. O DeepSeek V4.1 Flash 1017 fez o contrário: em 17 de outubro de 2026, a DeepSeek manteve o nome deepseek-flash e trocou o modelo por trás dele. Quem chamava deepseek-flash, deepseek-v4-flash ou deepseek-v4-flash-vision-exp na API da DeepSeek foi migrado sem alterar uma linha de código.

Na AIHubMix, o novo checkpoint tem ID próprio, deepseek-v4.1-flash-1017, então você escolhe quando migrar. De qualquer forma, estes são os problemas a verificar:

Problema Falha Onde você percebe
reasoning_content não enviado de volta Com erro explícito Erro 400 após a primeira chamada de ferramenta
Modelo trocado sob o mesmo nome Silenciosamente Tamanho da saída, formatos, pontuações de avaliação
Preço no horário de pico Silenciosamente Conta dobra nos horários de pico em dias úteis
Esforço definido como max por padrão Silenciosamente Execuções de agentes 1,6–1,8x mais longas
Raciocínio conta para max_tokens Ambos Respostas truncadas
Cobrança de Search e Fetch Silenciosamente A partir de 31 de out., 16:00 UTC

A AIHubMix executou um pequeno conjunto de requisições de teste contra deepseek-v4.1-flash-1017 em 19 de outubro de 2026 (03:02 UTC). Os resultados dessa execução estão marcados como tal abaixo.

1. O erro 400 que quebra os loops de ferramentas

O que você verá. A segunda requisição após uma chamada de ferramenta falha com HTTP 400 e com esta mensagem, conforme relatado em uma issue no GitHub contra opencodex para o V4.1 Flash em 15 de outubro:

[invalid_request_error] The `reasoning_content` in the thinking mode must be passed back to the API.

A mesma mensagem aparece em relatos anteriores contra opencode, LangChain e claude-code-router para o V4 Pro e o V4 Flash.

Por quê. O guia do modo de raciocínio da DeepSeek diz que, quando uma requisição inclui tools, o reasoning_content de todos os turnos anteriores do assistente deve ser devolvido, "mesmo para turnos em que o modelo não executou uma chamada de ferramenta". Se não for, "a API retornará um erro 400". Sem tools, devolver o campo é opcional e ignorado. Os clientes costumam tropeçar nisso porque seu serializador de mensagens mantém content e tool_calls, mas descarta o campo extra.

A requisição que dispara o erro. Turno dois de um loop de ferramentas, com a mensagem do assistente sem reasoning_content:

curl -s https://aihubmix.com/v1/chat/completions \
  -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4.1-flash-1017",
    "tools": [{"type": "function", "function": {"name": "get_weather",
      "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]}}}],
    "messages": [
      {"role": "user", "content": "What is the temperature in Hangzhou? Use the tool."},
      {"role": "assistant", "content": null, "tool_calls": [{"id": "call_00_example", "type": "function",
        "function": {"name": "get_weather", "arguments": "{\"city\": \"Hangzhou\"}"}}]},
      {"role": "tool", "tool_call_id": "call_00_example", "content": "{\"celsius\": 18}"}
    ]
  }'

Na API própria da DeepSeek, esta é a forma que retorna o 400 nos relatos públicos. Pela AIHubMix, a mesma forma retornou HTTP 200 e uma resposta normal na execução de teste de 19 de outubro. Foi uma única execução, então não a trate como garantia.

Como corrigir. Mantenha o campo, qualquer que seja a rota que você usar:

msg = resp.choices[0].message
messages.append(msg)  # carries content, reasoning_content, and tool_calls over
  • No seu próprio código, anexe a mensagem completa do assistente, não uma cópia montada manualmente.
  • Nos frameworks, atualize: o opencode corrigiu o ciclo de ida e volta em versões posteriores, e o opencodex incorporou a correção em 16 de outubro.
  • Como último recurso, defina {"thinking": {"type": "disabled"}} para loops de ferramentas. Isso evita o erro, mas abre mão do raciocínio que torna o modelo bom em trabalho de agentes.

2. O mesmo nome, um modelo diferente

O changelog da DeepSeek de 17 de outubro diz claramente: "O método de chamada da API e o preço permanecem inalterados — basta usar deepseek-flash para acessar o modelo mais recente." Não há nome fixo para o checkpoint de setembro, e os dois nomes Flash mais antigos agora também rodam o 1017.

Nada gera erro, mas três coisas podem mudar:

  • Tamanho da saída. O 1017 foi treinado para produzir saídas mais curtas. Parsers, layouts de interface e prompts que esperavam as explicações longas do modelo de setembro podem receber menos texto do que antes.
  • Linhas de base de avaliação. Pontuações e custos registrados no checkpoint de setembro não descrevem mais o que o deepseek-flash retorna.
  • Comportamento. A DeepSeek retreinou o 1017 para trabalho de projeto de ponta a ponta. Agentes podem seguir caminhos diferentes até o mesmo resultado.

O que fazer. Registre o modelo e a data em cada execução de avaliação, e reexecute agora seu conjunto de regressão. A resposta informa qual checkpoint respondeu: no teste de 19 de outubro, todas as respostas pela AIHubMix trouxeram "model": "deepseek-v4-1-flash-261017". Registre esse campo, e uma troca não anunciada se torna visível no dia em que acontece.

3. Regras de cobrança fáceis de passar despercebidas

Pico e fora de pico. A DeepSeek cobra preço integral das 01:00 às 04:00 e das 06:00 às 10:00 UTC em dias úteis, e meio preço em todos os outros horários, nos fins de semana e em feriados públicos chineses. A AIHubMix segue as mesmas janelas e precifica cada requisição no momento em que foi enviada, então uma requisição longa com streaming que começa fora de pico continua fora de pico.

Item Pico Fora de pico
Entrada, sem acerto de cache $0.3098 $0.155
Entrada, com acerto de cache $0.0062 $0.0031
Saída $1.2392 $0.62

Preços de lista da AIHubMix por 1M de tokens para deepseek-v4.1-flash-1017. Há um desconto de 30% por tempo limitado em vigor sobre eles.

Acertos de cache custam 50 vezes menos que falhas. Agentes reenviam o mesmo prompt de sistema, definições de ferramentas e histórico a cada chamada. Mantenha esse prefixo estável, coloque o que muda a cada chamada no final, e a maior parte de cada requisição será cobrada pela taxa de acerto de cache.

O raciocínio é cobrado como saída. O raciocínio vem ativado por padrão, e os tokens de raciocínio contam tanto na conta quanto em max_tokens.

Search e Fetch. A DeepSeek abriu suas novas APIs de Search e Fetch em 17 de outubro, a US$ 0,75 por 1.000 chamadas bem-sucedidas cada. Chamadas do lado do servidor feitas pelo DeepSeek Harness, Claude Code ou Codex na API da DeepSeek são gratuitas até 31 de outubro de 2026, 16:00 UTC. Depois disso, um agente que pesquisa a cada turno adiciona um custo por chamada além dos tokens.

O total. Com as premissas indicadas (40 chamadas, 1,2M tokens de entrada com 90% de acerto de cache, 60K tokens de saída), uma sessão de agente custa US$ 0,118 no pico e US$ 0,059 fora de pico, pelos preços de lista da AIHubMix. Mover as execuções em lote para fora de pico é a economia individual mais expressiva.

4. Configurações que custam mais do que entregam

Esforço. A API oferece low, high (padrão) e max. O paper do V4.1 Flash da DeepSeek mapeia esses valores para esforços internos de 50, 75 e 100, e relata que o passo para max "alonga as trajetórias dos agentes em 1,6–1,8× por melhorias apenas marginais". O guia de configuração do Claude Code da própria DeepSeek ainda define CLAUDE_CODE_EFFORT_LEVEL=max. Para o trabalho cotidiano com agentes, high é o padrão mais adequado.

A DeepSeek também mapeia outros nomes de esforço para seus três níveis: minimal vira low, enquanto medium e xhigh viram ambos high. Uma ferramenta que oferece cinco níveis, na prática, entrega dois ou três. No teste de 19 de outubro, a AIHubMix aceitou low, high e max no Chat Completions.

max_tokens. O model card recomenda pelo menos 256K para execuções longas de agentes, porque o raciocínio compartilha o orçamento de saída. Com um limite pequeno, um passo difícil pode gastar todo o orçamento pensando. Verifique finish_reason: "length".

Parâmetros de amostragem. No modo de raciocínio, temperature, presence_penalty e frequency_penalty são aceitos sem erro e não têm efeito. top_p é limitado ao intervalo 0,95–1,0. Se um pipeline dependia de temperatura baixa para saída determinística, ele deixa de tê-la.

5. Agentes com permissões reais

O 1017 foi treinado com aprendizado por reforço em projetos inteiros, então tende a continuar construindo até que o trabalho pareça concluído. Suas respostas também são mais curtas, o que significa menos narração do que foi alterado. Dois hábitos ajudam:

  • Revise os diffs e os logs de comandos, não o resumo que o modelo faz deles.
  • Execute em um sandbox com uma lista de comandos permitidos e exija aprovação para qualquer ação destrutiva (exclusões, force pushes, migrações, chamadas de rede externas).

A própria DeepSeek destaca a força da linha Flash em tarefas de segurança; o checkpoint de setembro marcou 88,1 no CyberGym na tabela da própria DeepSeek. Isso é útil para trabalho defensivo e mais um motivo para restringir bem as permissões.

6. Ferramentas de programação

A AIHubMix serve deepseek-v4.1-flash-1017 nos três protocolos que as ferramentas de programação precisam. No teste de 19 de outubro, Chat Completions, Anthropic Messages (incluindo uma chamada de ferramenta em dois turnos) e a Responses API retornaram todos 200.

Claude Code (Anthropic Messages). Aponte-o para a AIHubMix como no guia do Claude Code e defina o modelo:

export ANTHROPIC_BASE_URL="https://aihubmix.com"
export ANTHROPIC_AUTH_TOKEN="$AIHUBMIX_API_KEY"
export ANTHROPIC_MODEL="deepseek-v4.1-flash-1017"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="deepseek-v4.1-flash-1017"
export CLAUDE_CODE_SUBAGENT_MODEL="deepseek-v4.1-flash-1017"
export CLAUDE_CODE_EFFORT_LEVEL="high"
  • Raciocínio: no teste, uma requisição Messages sem configuração de esforço voltou sem bloco de raciocínio, enquanto uma com output_config.effort retornou raciocínio. Mantenha um nível de esforço definido para que o 1017 raciocine, e verifique os logs de requisição.
  • Contexto: o guia da DeepSeek adiciona o sufixo [1m] ao nome do modelo para o endpoint próprio dela; esse sufixo não foi testado pela AIHubMix.
  • Problema conhecido: por alguns roteadores, o Claude Code descartou o conteúdo de raciocínio e atingiu o 400 acima (issue 1378 do claude-code-router). O teste de chamada de ferramenta em dois turnos pelo endpoint Messages da AIHubMix não o atingiu.

Codex (Responses API). Siga o guia do Codex CLI: um provider aihubmix com base_url = "https://aihubmix.com/v1" e wire_api = "responses", e model = "deepseek-v4.1-flash-1017". Para escolhê-lo em /model, adicione-o a um arquivo model_catalog_json com context_window definido como 1,000,000.

  • Esforço: o script de catálogo do guia oferece low, medium e high. Pelo mapeamento da DeepSeek, medium e high caem ambos em high da DeepSeek, então você obtém dois níveis reais.
  • Problema conhecido: versões mais recentes do Codex descartam o catálogo inteiro se um único campo obrigatório estiver ausente. O script do guia evita isso.

DeepSeek Harness (Chat Completions). A DeepSeek diz que o 1017 funciona melhor com o Harness 0.2.1-rc.1 ou posterior. Adicione a AIHubMix como provider compatível com OpenAI seguindo o guia do DeepSeek Harness e adicione deepseek-v4.1-flash-1017 como modelo. Esse guia foi escrito para uma versão anterior do Harness, então verifique os nomes dos campos se a interface tiver mudado.

Um teste rápido de 15 minutos. Crie um repositório pequeno com um teste que falha:

mkdir flash-smoke && cd flash-smoke && git init -q
printf 'def mean(xs):\n    return sum(xs) / len(xs)\n' > stats.py
printf 'from stats import mean\n\ndef test_mean():\n    assert mean([1, 2, 3]) == 2\n\ndef test_empty():\n    assert mean([]) == 0\n' > test_stats.py

Inicie sua ferramenta nessa pasta e peça: "Execute o pytest, corrija o teste que falha alterando apenas stats.py e depois execute o pytest novamente." Ele passa se:

  • o agente fizer pelo menos duas chamadas de ferramenta (executar os testes, editar o arquivo) sem nenhum erro 400;
  • ambos os testes passarem ao final;
  • o log de requisições do AIHubMix mostra deepseek-v4.1-flash-1017, e o custo da sessão é de no máximo alguns centavos.

Checklist de migração

  • Defina o ID do modelo: deepseek-v4.1-flash-1017 no AIHubMix.
  • Anexe mensagens completas do assistente em loops de ferramentas para que reasoning_content seja enviado de volta a cada turno.
  • Execute novamente seu conjunto de regressão e avaliação; registre o modelo, a data e o campo de modelo da resposta.
  • Verifique parsers e interfaces para saídas mais curtas.
  • Defina o effort como high por padrão; reserve max para as tarefas mais difíceis.
  • Aumente max_tokens para turnos de agentes e configure um alerta para finish_reason length.
  • Remova suposições de determinismo baseadas em temperature no modo de raciocínio (thinking).
  • Agende lotes e execuções noturnas de agentes fora do horário de pico.
  • Mantenha os prefixos dos prompts estáveis para aproveitar os acertos de cache.
  • Planeje o orçamento das chamadas Search e Fetch a partir de 31 de outubro, caso você use as ferramentas do lado do servidor da DeepSeek.
  • Execute agentes em sandbox com permissões reais e revise os diffs, não os resumos.
  • Execute o teste de fumaça de 15 minutos em cada ferramenta de programação que você usa.

FAQ

Preciso mudar o código para usar o DeepSeek V4.1 Flash 1017?
Na API da DeepSeek, não: deepseek-flash já aponta para 1017. No AIHubMix, altere o nome do modelo para deepseek-v4.1-flash-1017.

Por que recebo um erro 400 sobre reasoning_content?
A DeepSeek exige que o reasoning_content de todos os turnos anteriores do assistente seja enviado de volta quando a requisição inclui ferramentas. Clientes que descartam esse campo falham na chamada seguinte à primeira chamada de ferramenta.

O erro 400 de reasoning_content acontece pelo AIHubMix?
Não aconteceu no teste do AIHubMix realizado em 19 de outubro de 2026, em que um turno sem reasoning_content retornou 200. Mesmo assim, continue enviando o campo, pois é uma regra documentada pela DeepSeek.

Ainda posso usar o V4.1 Flash de setembro na API da DeepSeek?
Não. A DeepSeek migrou deepseek-flash e os nomes antigos do Flash para 1017 e não oferece um nome fixo para o checkpoint de setembro.

Quando o DeepSeek V4.1 Flash fica mais barato?
Fora do intervalo de 01:00 a 04:00 e de 06:00 a 10:00 UTC em dias úteis. Em todas as outras horas, nos fins de semana e nos feriados públicos chineses, o custo é a metade.

Qual nível de effort os agentes de programação devem usar?
High, que é o padrão. O próprio artigo da DeepSeek afirma que o max prolonga as execuções dos agentes em 1,6 a 1,8 vez para ganhos pequenos.

O 1017 funciona no Claude Code e no Codex pelo AIHubMix?
Sim. O AIHubMix o disponibiliza nos protocolos Anthropic Messages e Responses que essas ferramentas usam, e ambos passaram em um teste básico em 19 de outubro de 2026.

Continue lendo: a série DeepSeek V4.1 Flash 1017

Fontes