Migrazione a DeepSeek V4.1 Flash 1017: l'errore 400 su reasoning_content, lo scambio silenzioso dell'alias e la fatturazione nelle ore di punta

AIHubMix9 min di lettura
Migrazione a DeepSeek V4.1 Flash 1017: l'errore 400 su reasoning_content, lo scambio silenzioso dell'alias e la fatturazione nelle ore di punta

La maggior parte delle migrazioni inizia cambiando il nome del modello. DeepSeek V4.1 Flash 1017 ha fatto il contrario: il 17 ottobre 2026 DeepSeek ha mantenuto il nome deepseek-flash e ha cambiato il modello che vi sta dietro. Chiunque chiamasse deepseek-flash, deepseek-v4-flash o deepseek-v4-flash-vision-exp sull'API di DeepSeek è stato spostato sul nuovo modello senza modificare una sola riga di codice.

Su AIHubMix il nuovo checkpoint ha un ID proprio, deepseek-v4.1-flash-1017, quindi sei tu a scegliere quando passare. In ogni caso, questi sono i problemi da verificare:

Problema Effetto Dove te ne accorgi
reasoning_content non rispedito In modo evidente Errore 400 dopo la prima chiamata a uno strumento
Modello sostituito con lo stesso nome In modo silenzioso Lunghezza dell'output, formati, punteggi delle valutazioni
Prezzi nelle ore di punta In modo silenzioso La fattura raddoppia nelle ore di punta dei giorni feriali
Effort impostato su max per impostazione predefinita In modo silenzioso Le esecuzioni degli agenti durano 1,6–1,8 volte di più
Il ragionamento conta nel limite max_tokens Entrambi Risposte troncate
Fatturazione di Search e Fetch In modo silenzioso Dal 31 ottobre, ore 16:00 UTC

Il 19 ottobre 2026 (03:02 UTC) AIHubMix ha eseguito una breve serie di richieste di prova su deepseek-v4.1-flash-1017. I risultati di quella esecuzione sono contrassegnati come tali qui sotto.

1. L'errore 400 che interrompe i cicli con gli strumenti

Cosa vedrai. La seconda richiesta dopo una chiamata a uno strumento fallisce con HTTP 400 e con questo messaggio, come riportato in una segnalazione su GitHub relativa a opencodex per V4.1 Flash del 15 ottobre:

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

Lo stesso testo compare in segnalazioni precedenti relative a opencode, LangChain e claude-code-router per V4 Pro e V4 Flash.

Perché. La guida alla modalità di ragionamento di DeepSeek afferma che, quando una richiesta include tools, il reasoning_content di ogni turno precedente dell'assistente deve essere rispedito, "anche per i turni in cui il modello non ha effettuato una chiamata a uno strumento". Se non viene rispedito, "l'API restituirà un errore 400". Senza strumenti, rispedirlo è facoltativo e viene ignorato. I client di solito inciampano su questo perché il loro serializzatore dei messaggi conserva content e tool_calls ma elimina il campo extra.

La richiesta che lo scatena. Il secondo turno di un ciclo con strumenti, con il messaggio dell'assistente privato di 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}"}
    ]
  }'

Sull'API di DeepSeek, questa è la forma che restituisce l'errore 400 nelle segnalazioni pubbliche. Tramite AIHubMix, la stessa forma ha restituito HTTP 200 e una risposta normale nell'esecuzione di prova del 19 ottobre. Si trattava di una sola esecuzione, quindi non contarci come garanzia.

Come risolvere. Mantieni il campo, qualunque percorso tu usi:

msg = resp.choices[0].message
messages.append(msg)  # carries content, reasoning_content, and tool_calls over
  • Nel tuo codice, aggiungi l'intero messaggio dell'assistente, non una copia ricostruita a mano.
  • Nei framework, aggiorna: opencode ha corretto il ciclo di andata e ritorno nelle versioni successive, e opencodex ha integrato la correzione il 16 ottobre.
  • Come ultima risorsa, imposta {"thinking": {"type": "disabled"}} per i cicli con strumenti. Questo evita l'errore, ma rinuncia al ragionamento che rende il modello bravo nel lavoro con gli agenti.

2. Lo stesso nome, un modello diverso

Il changelog di DeepSeek del 17 ottobre lo dice chiaramente: "Il metodo di chiamata dell'API e i prezzi restano invariati — basta usare deepseek-flash per accedere all'ultimo modello". Non esiste un nome fissato per il checkpoint di settembre, e anche i due vecchi nomi Flash ora usano la versione 1017.

Non si verificano errori, ma tre cose possono cambiare:

  • Lunghezza dell'output. 1017 è stato addestrato a produrre output più brevi. Parser, layout dell'interfaccia e prompt che si aspettavano le lunghe spiegazioni del modello di settembre potrebbero ricevere meno testo di prima.
  • Valori di riferimento delle valutazioni. I punteggi e i costi registrati sul checkpoint di settembre non descrivono più ciò che deepseek-flash restituisce.
  • Comportamento. DeepSeek ha riaddestrato 1017 per il lavoro end-to-end sui progetti. Gli agenti possono seguire percorsi diversi per arrivare allo stesso risultato.

Cosa fare. Registra modello e data con ogni esecuzione di valutazione e riesegui subito il tuo insieme di test di regressione. La risposta indica quale checkpoint ha risposto: nel test del 19 ottobre, ogni risposta tramite AIHubMix riportava "model": "deepseek-v4-1-flash-261017". Registra questo campo, e uno scambio non annunciato diventa visibile nel giorno in cui avviene.

3. Regole di fatturazione facili da trascurare

Ore di punta e fuori punta. DeepSeek applica il prezzo pieno dalle 01:00 alle 04:00 e dalle 06:00 alle 10:00 UTC nei giorni feriali, e il prezzo dimezzato in tutte le altre ore, per tutto il fine settimana e nei giorni festivi cinesi. AIHubMix segue le stesse fasce e applica il prezzo a ogni richiesta nel momento in cui viene inviata, quindi una lunga richiesta in streaming che inizia fuori punta resta fuori punta.

Voce Ore di punta Fuori punta
Input, cache miss $0.3098 $0.155
Input, cache hit $0.0062 $0.0031
Output $1.2392 $0.62

Prezzi di listino AIHubMix per 1M di token per deepseek-v4.1-flash-1017. È in corso uno sconto del 30% a tempo limitato.

I cache hit costano 50 volte meno dei miss. Gli agenti reinviano lo stesso prompt di sistema, le stesse definizioni degli strumenti e la stessa cronologia a ogni chiamata. Mantieni stabile questo prefisso, metti alla fine ciò che cambia a ogni chiamata, e gran parte di ogni richiesta sarà fatturata alla tariffa di cache hit.

Il ragionamento è fatturato come output. Il ragionamento è attivo per impostazione predefinita, e i token di ragionamento contano sia nella fattura sia in max_tokens.

Search e Fetch. Il 17 ottobre DeepSeek ha aperto le nuove API Search e Fetch a 0,75 dollari ogni 1.000 chiamate riuscite per ciascuna. Le chiamate lato server effettuate tramite DeepSeek Harness, Claude Code o Codex sull'API di DeepSeek sono gratuite fino al 31 ottobre 2026, ore 16:00 UTC. Dopo quella data, un agente che cerca a ogni turno aggiunge un costo per chiamata oltre ai token.

Il conto finale. Con le ipotesi dichiarate (40 chiamate, 1,2M di token di input con il 90% di cache hit, 60K di token di output), una sessione con agente costa 0,118 dollari nelle ore di punta e 0,059 dollari fuori punta ai prezzi di listino AIHubMix. Spostare le esecuzioni batch fuori punta è il risparmio singolo più consistente.

4. Impostazioni che costano più di quanto rendono

Effort. L'API offre low, high (predefinito) e max. Il paper su V4.1 Flash di DeepSeek li associa a valori di effort interni di 50, 75 e 100, e riporta che il passaggio a max "allunga le traiettorie degli agenti di 1,6–1,8× per miglioramenti solo marginali". La guida di configurazione di Claude Code di DeepSeek imposta ancora CLAUDE_CODE_EFFORT_LEVEL=max. Per il lavoro quotidiano con gli agenti, high è il default migliore.

DeepSeek associa anche altri nomi di effort ai suoi tre livelli: minimal diventa low, mentre medium e xhigh diventano entrambi high. Uno strumento che offre cinque livelli, in pratica, ne offre due o tre. Nel test del 19 ottobre, AIHubMix ha accettato low, high e max su Chat Completions.

max_tokens. La scheda del modello consiglia almeno 256K per le lunghe esecuzioni con agenti, perché il ragionamento condivide il budget dell'output. Con un limite basso, un passo difficile può consumare l'intero budget per ragionare. Controlla la presenza di finish_reason: "length".

Parametri di campionamento. In modalità di ragionamento, temperature, presence_penalty e frequency_penalty sono accettati senza errori e non hanno effetto. top_p viene limitato all'intervallo 0,95–1,0. Se una pipeline si basava su una temperatura bassa per avere un output deterministico, ora non la ottiene più.

5. Agenti con permessi reali

1017 è stato addestrato con apprendimento per rinforzo su interi progetti, quindi tende a continuare a lavorare finché il compito non sembra completato. Le sue risposte sono anche più brevi, il che significa meno descrizione di ciò che ha modificato. Due abitudini aiutano:

  • Controlla i diff e i log dei comandi, non il riepilogo che il modello ne fa.
  • Eseguilo in una sandbox con una lista consentita di comandi, e richiedi un'approvazione per tutto ciò che è distruttivo (eliminazioni, force push, migrazioni, chiamate di rete in uscita).

DeepSeek stesso segnala la forza della linea Flash nelle attività di sicurezza: il checkpoint di settembre ha ottenuto 88,1 su CyberGym nella tabella di DeepSeek. È utile per il lavoro difensivo, e un ulteriore motivo per limitare con attenzione i suoi permessi.

6. Strumenti di coding

AIHubMix serve deepseek-v4.1-flash-1017 su tutti e tre i protocolli di cui hanno bisogno gli strumenti di coding. Nel test del 19 ottobre, Chat Completions, Anthropic Messages (incluso un tool call a due turni) e la Responses API hanno tutti restituito 200.

Claude Code (Anthropic Messages). Puntalo su AIHubMix come nella guida a Claude Code e imposta il modello:

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"
  • Ragionamento: nel test, una richiesta Messages senza impostazione di effort è tornata senza un blocco di ragionamento, mentre una con output_config.effort ha restituito il ragionamento. Mantieni impostato un livello di effort così 1017 ragiona, e controlla i log delle richieste.
  • Contesto: la guida di DeepSeek aggiunge il suffisso [1m] al nome del modello per il proprio endpoint; quel suffisso non è stato testato tramite AIHubMix.
  • Problema noto: attraverso alcuni router, Claude Code ha perso il contenuto del ragionamento e ha incontrato l'errore 400 descritto sopra (issue 1378 di claude-code-router). Il test con ciclo a due turni tramite l'endpoint Messages di AIHubMix non lo ha incontrato.

Codex (Responses API). Segui la guida alla Codex CLI: un provider aihubmix con base_url = "https://aihubmix.com/v1" e wire_api = "responses", e model = "deepseek-v4.1-flash-1017". Per sceglierlo da /model, aggiungilo a un file model_catalog_json con context_window impostato a 1.000.000.

  • Effort: lo script per il catalogo della guida offre low, medium e high. Secondo la mappatura di DeepSeek, medium e high finiscono entrambi su high di DeepSeek, quindi ottieni due livelli reali.
  • Problema noto: le versioni più recenti di Codex scartano l'intero catalogo se manca un singolo campo obbligatorio. Lo script della guida evita questo problema.

DeepSeek Harness (Chat Completions). DeepSeek afferma che 1017 funziona meglio con Harness 0.2.1-rc.1 o successive. Aggiungi AIHubMix come provider compatibile con OpenAI seguendo la guida a DeepSeek Harness e aggiungi deepseek-v4.1-flash-1017 come modello. Quella guida è stata scritta per una versione precedente di Harness, quindi controlla i nomi dei campi se l'interfaccia è cambiata.

Un test rapido di 15 minuti. Crea un piccolo repository con un solo test che fallisce:

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

Avvia il tuo strumento in quella cartella e chiedi: "Esegui pytest, correggi il test che fallisce modificando solo stats.py, poi esegui di nuovo pytest." Il test è superato se:

  • l'agente effettua almeno due chiamate a strumenti (eseguire i test, modificare il file) senza alcun 400;
  • entrambi i test passano alla fine;
  • il log delle richieste di AIHubMix mostra deepseek-v4.1-flash-1017, e il costo della sessione è al massimo di pochi centesimi.

Checklist per la migrazione

  • Scegli l'ID del modello: deepseek-v4.1-flash-1017 su AIHubMix.
  • Aggiungi interi messaggi dell'assistente nei cicli di tool, così reasoning_content torna a ogni turno.
  • Riesegui il tuo set di regressione e di valutazione; registra modello, data e il campo del modello di risposta.
  • Controlla parser e interfacce per output più brevi.
  • Imposta effort su high come predefinito; riserva max alle attività più difficili.
  • Aumenta max_tokens per i turni degli agenti e segnala finish_reason length.
  • Rimuovi le ipotesi di determinismo basate su temperature in modalità thinking.
  • Pianifica le esecuzioni batch e notturne degli agenti fuori dalle ore di punta.
  • Mantieni stabili i prefissi dei prompt per ottenere cache hit.
  • Pianifica il budget delle chiamate Search e Fetch dal 31 ottobre se usi gli strumenti server-side di DeepSeek.
  • Esegui gli agenti in sandbox con permessi reali e controlla i diff, non i riassunti.
  • Esegui il test rapido di 15 minuti in ogni strumento di coding che usi.

FAQ

Serve modificare il codice per usare DeepSeek V4.1 Flash 1017?
Sulla API di DeepSeek no: deepseek-flash punta già a 1017. Su AIHubMix, cambia il nome del modello in deepseek-v4.1-flash-1017.

Perché ricevo un errore 400 su reasoning_content?
DeepSeek richiede che il reasoning_content di ogni turno precedente dell'assistente venga rispedito quando una richiesta include tool. I client che eliminano quel campo falliscono alla chiamata successiva alla prima chiamata di tool.

L'errore 400 su reasoning_content si verifica tramite AIHubMix?
Non è accaduto nel test di AIHubMix del 19 ottobre 2026, dove un turno senza reasoning_content ha restituito 200. Invia comunque il campo, perché è una regola documentata da DeepSeek.

Posso ancora usare il V4.1 Flash di settembre sulla API di DeepSeek?
No. DeepSeek ha spostato deepseek-flash e i vecchi nomi Flash su 1017 e non offre un nome fisso per il checkpoint di settembre.

Quando DeepSeek V4.1 Flash costa meno?
Fuori dalle fasce 01:00-04:00 e 06:00-10:00 UTC nei giorni feriali. In tutte le altre ore, nei fine settimana e nei giorni festivi cinesi il costo è dimezzato.

Quale livello di effort dovrebbero usare gli agenti di coding?
High, il predefinito. Il paper di DeepSeek stesso afferma che max allunga le esecuzioni degli agenti da 1,6 a 1,8 volte per piccoli miglioramenti.

1017 funziona in Claude Code e Codex tramite AIHubMix?
Sì. AIHubMix lo offre sui protocolli Anthropic Messages e Responses usati da questi strumenti, e entrambi hanno superato un test di base il 19 ottobre 2026.

Continua a leggere: la serie DeepSeek V4.1 Flash 1017

Fonti