Questo articolo copre le note di utilizzo e le problematiche per deepseek-v4-pro-0813. Su AIHubMix, il modello è disponibile attraverso le API di Chat Completions, Responses e Messaggi compatibili con Claude. Vedi anche: Documentazione ufficiale delle API di DeepSeek.
Le conclusioni "Verificate" e i campioni di risposte in ciascuna sezione provengono da chiamate effettive effettuate il 2026-08-13 tramite le API di AIHubMix (Chat Completions / Responses / Messages); gli elementi di specifica non contrassegnati come "Verificati" provengono dalla documentazione ufficiale di DeepSeek.
1. Posizionamento del Modello e Specifiche a Colpo d'Occhio
V4 Pro è il livello di alta gamma della generazione V4 di DeepSeek (il leggero deepseek-v4-flash è il suo gemello). La linea di rilascio risale a DeepSeek-V4 Preview del 2026-04-24, e 0813 è l'etichetta della VERSIONE DEL MODELLO che DeepSeek ha assegnato all'attuale build. Oltre alle specifiche grezze, quattro cose lo distinguono:
- Un modello di frontiera sparsa: 1.6T parametri totali / 49B attivati (un'architettura MoE, o mixture-of-experts — ogni passaggio di inferenza attiva solo un sottoinsieme di reti esperte: i parametri totali determinano la capacità di conoscenza, i parametri attivati determinano il costo computazionale per chiamata). La scheda del modello elenca attenzione ibrida CSA+HCA, mHC e l'ottimizzatore Muon.
- Pesi aperti sotto MIT:
deepseek-ai/DeepSeek-V4-Proè pubblicato su HuggingFace sotto la licenza MIT (una delle licenze open-source più permissive — l'uso commerciale e la ridistribuzione closed-source sono entrambi consentiti) e può essere auto-ospitato. MIT è raro per un modello di queste dimensioni. Le note di auto-ospitaggio della scheda del modello suggeriscono anche una finestra di contesto di ≥384K token quando si esegue in Think Max (il livello di pensiero più alto) — quella è una guida per il deployment per l'auto-ospitaggio, non una specifica dell'API ospitata. - Il supporto multi-protocollo è di prima parte, non traduzione di terze parti: DeepSeek stesso offre un'API di Chat di OpenAI, un endpoint compatibile con Anthropic (
/anthropic, che mappaclaude-opus*su questo modello), e l'API Responses (DeepSeek descrive il supporto nativo per il formato, con adattamenti per Codex). Offre anche il completamento FIM (fill-in-the-middle) come funzionalità Beta su un endpoint separato, che non fa parte delle tre API di AIHubMix. - Un gap di ~120× tra i prezzi di cache-hit e cache-miss: il meccanismo di pricing pubblicato da DeepSeek è cache-hit $0.003625/M contro cache-miss $0.435/M (output $0.87/M), e il caching è automatico senza parametri da impostare. Per i carichi di lavoro che riutilizzano lunghi prefissi (prompt di sistema, documenti lunghi), quel gap domina il conto. Il prezzo al dettaglio effettivo è quello che mostra la pagina del modello.
| Elemento | Valore |
|---|---|
| Nome del modello su AIHubMix | deepseek-v4-pro-0813 |
| Finestra di contesto | 1M token (1.000.000) |
| Output massimo | La formulazione ufficiale è MAX OUTPUT MAXIMUM: 384K (il conteggio esatto dei token e il valore predefinito non sono pubblicati) |
| Modalità di input | Solo testo. La pagina di compatibilità delle Responses afferma esplicitamente che gli input di immagini e file non sono supportati; la pagina dei Messaggi contrassegna esplicitamente i blocchi type="image" come Non Supportati; su Chat Completions il messaggio dell'utente content accetta solo una stringa, senza parti di contenuto multimodale |
| Modalità di pensiero | Ibrida (pensiero / non pensiero), pensiero attivato per impostazione predefinita |
| Livelli di pensiero | reasoning_effort accetta low / high / max, predefinito high; medium e xhigh sono mappati a high per compatibilità |
| API disponibili | Chat Completions, Responses, Messages (compatibili con Claude) |
Verificato: superaremax_tokensviene rifiutato dalla validazione piuttosto che troncato silenziosamente — inviaremax_tokens=9999999restituisce HTTP 400, e il corpo dell'errore nomina il campo e fornisce il limite393216.
# max_tokens=9999999 -> HTTP 400
"...max_tokens... 393216"
❗ Le immagini non generano un errore, ma vengono scartate: la formulazione ufficiale per l'API Responses è "Gli input di immagini e file non sono supportati (le parti input_image non causano un errore, ma vengono sostituite con un testo segnaposto)" — una parteinput_imagenon fallisce la richiesta, viene sostituita da testo segnaposto. Su Chat Completions il messaggio dell'utentecontentaccetta solo una stringa, e su Messages i blocchitype="image"sono contrassegnati come Non Supportati. Quando si costruisce un instradamento multimodale, non trattare mai "nessun errore" come prova che il modello abbia effettivamente visto l'immagine.
2. Come Si Disattiva il Pensiero? Tre API, Tre Forme di Campo
V4 Pro pensa per impostazione predefinita: non inviare alcun parametro e la risposta tornerà con contenuto di pensiero. Disattivarlo utilizza una forma di campo diversa su ciascuna delle tre API.
Chat Completions
Utilizza l'oggetto thinking di alto livello.
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"}},
)
# Pensiero attivato (predefinito): message.reasoning_content presente, reasoning_tokens = 43
# Pensiero disattivato (disabilitato): reasoning_content assente, reasoning_tokens assenti
Verificato: conthinking.type="disabled", siamessage.reasoning_contentcheusage.completion_tokens_details.reasoning_tokensscompaiono insieme, il che conferma che l'interruttore ha avuto effetto.
Responses
Non c'è un interruttore separato su Responses; disattivare il pensiero significa impostare il livello su 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] è l'elemento del messaggio direttamente (nessun elemento di ragionamento)
# effort non impostato : output inizia sempre con un elemento di ragionamento
Verificato:reasoning.effort="none"differisce osservabilmente dal livello predefinito (i token di pensiero scendono a zero, l'elemento direasoningscompare), il che conferma che ha avuto effetto.
Messages
Stesso nome e stessa forma di Chat Completions: l'oggetto thinking di alto livello.
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"}},
)
# Pensiero attivato (predefinito): content = [blocco di pensiero, blocco di testo]
# Pensiero disattivato (disabilitato): content = [blocco di testo]
Verificato: una volta disabilitato, il bloccothinkingscompare completamente e rimane solo il bloccotext.
Sui livelli di pensiero:lowemaxhanno entrambi restituito 200 su Chat Completions nei test (highè il predefinito e si applica quando il campo è omesso), ma i conteggi dei token di pensiero non mostrano alcuna differenza monotonica tra i livelli per la stessa domanda (domanda facile: low=43 / max=27; domanda difficile: low=114 / max=92), e nulla viene restituito nella risposta — i livelli sono accettati, ma non è osservabile alcun segnale distintivo dalla risposta. Su Responses, solo il livellonone(pensiero disattivato) può essere confermato dal lato della risposta.
3. Perché Una Conversazione a Più Turni Restituisce Improvvisamente 400? La Cronologia di Pensiero Deve Essere Restituita Verbatim
Questo è il singolo tripwire più comune con questo modello: in modalità di pensiero, una conversazione a più turni deve restituire il contenuto di pensiero del turno precedente verbatim, altrimenti la richiesta viene rifiutata. Non degradato, non di qualità inferiore — un duro HTTP 400.
Le tre API portano lo stesso contenuto di pensiero sotto nomi di campo diversi:
| API | Forma di passback | Corpo dell'errore quando mancante |
|---|---|---|
| Chat Completions | Il campo reasoning_content nel messaggio dell'assistente |
Il `reasoning_content` in modalità di pensiero deve essere restituito all'API. |
| Responses | L'elemento di output con type="reasoning" nell'array input |
Il `reasoning_text` in modalità di pensiero deve essere restituito all'API. |
| Messages | Il blocco thinking all'interno dei blocchi di contenuto dell'assistente |
Il `content[].thinking` in modalità di pensiero deve essere restituito all'API. |
Verificato (condizioni di attivazione): questa validazione si attiva costantemente su richieste a più turni che portano tools (il modello emette una chiamata a uno strumento, poi il risultato dello strumento viene restituito). Su richieste a più turni semplici senza strumenti, dove il modello risponde direttamente, la validazione non si è attivata in questo round di test e la richiesta ha restituito 200. In altre parole, l'orchestrazione degli strumenti (carichi di lavoro di agenti / chiamate a funzioni) è dove è più probabile che tu colpisca, quindi tratta il contenuto di pensiero come parte dello stato della conversazione che persisti e riproduci.Chat Completions
# Multi-turno: restituire il messaggio precedente dell'assistente verbatim, incluso reasoning_content
messages = [
{"role": "user", "content": "Qual è 1 + 1? Ricorda il risultato."},
{
"role": "assistant",
"content": "2",
"reasoning_content": "<reasoning_content dalla risposta precedente>",
},
{"role": "user", "content": "Aggiungi 1 al risultato."},
]
# Scartare reasoning_content -> HTTP 400 invalid_request_error
Verificato: un messaggio storico dell'assistente mancante di reasoning_content restituisce 400; aggiungerlo di nuovo fa sì che la richiesta identica restituisca 200 e continui correttamente.Responses
# Multi-turno: input = input precedente + response.output (elemento di ragionamento incluso) + nuovo messaggio
input = previous_input + response.output + [
{"role": "user", "content": "Aggiungi 1 al risultato."}
]
# Filtrare l'elemento type="reasoning" -> HTTP 400
Verificato: inserireresponse.outputdi nuovo così com'è è tutto ciò che serve. Filtrare gli elementi di output pertype == "message"mentre si assembla la cronologia elimina l'elementoreasoninge attiva il 400 — questo è il modo più comune per essere colpiti.
Messages
# Multi-turno: restituire response.content verbatim come messaggio dell'assistente
messages = [
{"role": "user", "content": "Qual è il tempo a Parigi?"},
{"role": "assistant", "content": response.content}, # blocchi di pensiero + utilizzo dello strumento
{"role": "user", "content": [tool_result_block]},
]
# Rimuovere il blocco di pensiero -> HTTP 400
Verificato: rimuovere il bloccothinkingdall'array di contenuto restituisce 400 (conerror.typeimpostato suinvalid_request_error).
4. Chiamata agli Strumenti
Ogni API dichiara gli strumenti nella propria forma di protocollo; le forme non sono intercambiabili.
Chat Completions
Forma annidata (un oggetto function che avvolge name / parameters). Una tool_choice di funzione nominata forza la chiamata.
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "Qual è il tempo a Parigi?"}],
tools=[{
"type": "function",
"function": {
"name": "get_weather",
"description": "Ottieni il tempo per una città",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
},
}],
tool_choice={"type": "function", "function": {"name": "get_weather"}},
)
# Osservato: finish_reason "tool_calls", tool_calls[0].function.arguments = {"city": "Parigi"}
❗ Verificato:tool_choice: "required"non può essere utilizzato mentre il pensiero è attivato — restituisce 400La modalità di pensiero non supporta questo tool_choice; disabilitare il pensiero (thinking.type="disabled") fa sì che la richiesta identica restituisca 200. Quando hai bisogno di semantica "deve chiamare uno strumento", usa una tool_choice di funzione nominata invece (come sopra, che funziona con il pensiero attivato), oppure disattiva prima il pensiero e poi usarequired.
Responses
Forma piatta (type / name / parameters allo stesso livello).
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Qual è il tempo a Parigi?",
tools=[{
"type": "function",
"name": "get_weather",
"description": "Ottieni il tempo per una città",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
)
# Elementi di output osservati: ["reasoning", "function_call"]; arguments = {"city": "Parigi"}
Verificato: copiare la forma annidata di Chat Completions (function: {...}) in Responses restituisce 400 — usa la forma piatta.tool_choice: "required"è soggetto alla stessa restrizione della modalità di pensiero come su Chat.
Messages
Forma nativa di Anthropic (input_schema), con tool_choice: {"type": "any"} per forzare una chiamata.
response = client.messages.create(
model="deepseek-v4-pro-0813",
max_tokens=1024,
tools=[{
"name": "get_weather",
"description": "Ottieni il tempo per una città",
"input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
tool_choice={"type": "any"},
messages=[{"role": "user", "content": "Qual è il tempo a Parigi?"}],
)
# Osservato: il contenuto contiene un blocco di utilizzo dello strumento, nome = get_weather, input = {"city": "Parigi"}
❗ La chiamata parallela agli strumenti non può essere disattivata, per design di DeepSeek — la pagina di compatibilità ufficiale di Anthropic afferma, nella rigatool_choice, chedisable_parallel_tool_use è ignorato, e la pagina delle Responses afferma ancheparallel_tool_calls | Ignored (la chiamata parallela agli strumenti è sempre abilitata). I test confermano: chiedere informazioni su due città contemporaneamente condisable_parallel_tool_use: truerestituisce comunque due blocchitool_use. Se hai bisogno di esecuzione seriale, prendi la prima chiamata o mettile in coda tu stesso sul lato client.
Conteggio degli strumenti e costo del contesto: inviare 200 definizioni di funzione in una singola richiesta ha comunque restituito 200 con una risposta normale e non ha attivato alcuna validazione del conteggio (osservato su questo percorso; conteggi più elevati non sono stati testati). Ma prompt_tokens per quella richiesta ha raggiunto 6.105 — le definizioni degli strumenti vanno nel contesto per intero e vengono addebitate. Quando hai molti strumenti, riduci il set di strumenti per scenario piuttosto che dichiarare tutto incondizionatamente.5. Output Strutturato
Chat Completions
response_format supporta la modalità JSON.
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "Restituisci {\"a\": 1} come JSON."}],
response_format={"type": "json_object"},
)
# Contenuto della risposta osservato: {"a":1}
Verificato: l'output è un JSON valido.
Responses
Dichiara uno Schema JSON tramite text.format, con modalità strict supportata.
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Restituisci il numero 1 sotto la chiave a.",
text={
"format": {
"type": "json_schema",
"name": "extract",
"strict": True,
"schema": {"type": "object", "properties": {"a": {"type": "integer"}}, "required": ["a"]},
}
},
)
# Testo di output osservato: {"a":1}
Verificato: l'output è conforme rigorosamente allo schema fornito.
Messages
Il protocollo Messages (Anthropic) non ha equivalente per response_format / text.format. La soluzione abituale è portare lo schema in uno strumento — dichiarare uno strumento il cui input_schema è il tuo schema target, impostare tool_choice: {"type": "any"}, e leggere il risultato strutturato dall'input del blocco tool_use. Questo round di test non ha verificato specificamente quel modello; quando hai bisogno di garanzie di schema rigorose, preferisci Chat Completions o Responses.
6. Come Si Abilita il Caching del Contesto? Non Si Abilita, È Automatico
Il caching del contesto (i prefissi identici vengono riutilizzati e la porzione memorizzata viene addebitata a una tariffa inferiore) è attivato per impostazione predefinita e non richiede parametri. Una seconda richiesta con lo stesso lungo prefisso riporta il colpo in usage, sotto un nome di campo che varia a seconda dell'API. Per dettagli sul caching e prezzi attuali, vedere la pagina del modello; per la strategia di caching tra modelli e tecniche di tasso di colpi, vedere pratiche di caching dei prompt.
Chat Completions
# utilizzo della seconda chiamata con un lungo prefisso identico
"prompt_tokens_details": {"cached_tokens": 640} # prima chiamata: 0
Verificato: due chiamate consecutive con lo stesso lungo prefisso sullo stesso canale hanno spostato cached_tokens da 0 a 640.Responses
# utilizzo della seconda chiamata con istruzioni lunghe identiche
"input_tokens_details": {"cached_tokens": 896} # prima chiamata: 0
Messages
# utilizzo di una chiamata il cui lungo prefisso di sistema era già stato riscaldato
"cache_read_input_tokens": 896
Verificato: il prefisso sopra è stato riscaldato da una richiesta di Responses con contenuto identico, e la prima chiamata a Messages ha colpito 896 immediatamente — coerente con il caching che si basa sul prefisso di contenuto e condiviso tra superfici di protocollo.
7. logprobs: Chat Restituisce Due Canali
logprobs (probabilità logaritmiche — il dettaglio di fiducia del modello per ogni token candidato) torna in forme diverse sulle due API, e il codice di parsing deve gestirle separatamente.
Chat Completions
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "Dì ciao."}],
logprobs=True,
top_logprobs=2,
)
# Osservato: choices[0].logprobs contiene DUE array
# logprobs.content[] -> token della risposta finale
# logprobs.reasoning_content[] -> token del testo di pensiero
❗ Verificato: Chat restituisce probabilità logaritmiche sia percontentche perreasoning_content. Il codice che legge solologprobs.content, secondo la forma di risposta standard di OpenAI, non genererà errori ma perderà silenziosamente il canale di pensiero; se il tuo codice presume un singolo array sottologprobs, aggiungi prima un controllo della forma.
Responses
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Dì ciao.",
top_logprobs=3,
)
# Osservato: logprobs solo sull'elemento finale del messaggio
# output[-1].content[0].logprobs[] con dettagli di logprob + top_logprobs
Verificato: Responses allega logprobs solo all'elemento di testo finale — nessuna delle forme a doppio canale viste su Chat.
Messages
Il protocollo Messages (Anthropic) non ha campo equivalente. Per dettagli sulla probabilità a livello di token, usa Chat Completions o Responses.
8. Quali API Possono Cercare nel Web?
La ricerca web qui è uno strumento lato server (il recupero avviene sul server; il client non emette mai la richiesta stessa), e viene realmente eseguita sia sulle API Responses che Messages nei test.
Responses
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Qual è l'ultima versione stabile di Python?",
tools=[{"type": "web_search"}],
)
# Sequenza di elementi di output osservata:
# ["reasoning", "web_search_call", "reasoning", "message"]
Verificato: un elemento web_search_call appare nella sequenza di output, il che significa che il server ha effettivamente eseguito un recupero.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 è l'ultima versione stabile di Python?"}],
)
# Sequenza di blocchi di contenuto osservata:
# ["thinking", "server_tool_use", "web_search_tool_result", "thinking", "text"]
# usage.server_tool_use.web_search_requests = 1
Verificato: usage.server_tool_use.web_search_requests conta 1 — la richiesta di recupero è realmente avvenuta ed è stata misurata.Chat Completions
La ricerca web non può essere attivata su Chat. La documentazione ufficiale dell'API Chat di DeepSeek non contiene alcun campo di ricerca da nessuna parte nello schema della richiesta (quella è un'assenza stabilita esaminando l'elenco dei campi uno per uno; DeepSeek non ha fatto alcuna dichiarazione esplicita che nega il supporto). L'API con una dichiarazione ufficiale di supporto esplicito per la ricerca lato server è Responses (web_search), e la pagina di compatibilità ufficiale di Messages elenca anche i blocchi di contenuto correlati alla ricerca.
# Tre gruppi di controllo, stessa domanda che richiede informazioni in tempo reale, tutti HTTP 200:
# A nessun campo di ricerca -> "impossibile recuperare", annotazioni = null
# B opzioni_web_search -> "impossibile recuperare", annotazioni = null, utilizzo identico a A
# C enable_search -> "impossibile recuperare", annotazioni = null, utilizzo identico a A
Verificato: inviareweb_search_optionsoenable_searchnon genera errori, ma non recupera nulla nemmeno — la risposta non portaannotations(l'elenco delle citazioni allegato a una risposta quando viene eseguita la ricerca web), e l'utilizzo corrisponde al gruppo di controllo campo per campo. Per l'accesso al web, usa invece le API Responses o Messages.
9. Note di Utilizzo: Design di DeepSeek vs Deviations sul Nostro Percorso
Tutto ciò che segue restituisce HTTP 200 mentre si comporta in modo controintuitivo. Le cause differiscono, e così fa ciò che dovresti fare al riguardo, quindi sono elencate separatamente: il primo gruppo è come DeepSeek ha progettato il modello, e cambiare fornitore non cambierà questo; il secondo gruppo è il comportamento attuale sul percorso AIHubMix, su cui stiamo lavorando.
9.1 Per Design di DeepSeek
| Comportamento | Formulazione ufficiale | Cosa fare |
|---|---|---|
| Responses non mantiene lo stato della sessione o i metadati | La pagina di compatibilità ufficiale delle Responses afferma, riga per riga, store | Non supportato. La risposta porta sempre store: false, metadata | Non supportato, e safety_identifier | Non supportato (di quei quattro campi, solo user è Supportato). I test confermano: la richiesta restituisce 200, ma metadata è null, safety_identifier è assente, e store è sempre false |
Mantieni i dati di correlazione della richiesta sul client; non fare affidamento sulla retention lato server |
| I parametri di campionamento non hanno effetto in modalità di pensiero | DeepSeek afferma esplicitamente che temperature e top_p sono silenziosamente inattivi in modalità di pensiero. Nei test entrambi restituiscono 200 senza nulla di restituito e senza cambiamenti nella forma della risposta |
Non fare affidamento sui parametri di campionamento per la stabilità dell'output in modalità di pensiero; usa output strutturati quando hai bisogno di determinismo |
| La continuazione del prefisso / FIM è disponibile solo sull'endpoint beta ufficiale | La descrizione ufficiale di prefix è "(Beta) … Devi impostare base_url="https://api.deepseek.com/beta" per utilizzare questa funzionalità", e il completamento FIM è anch'esso una funzionalità Beta. Verificato su produzione AIHubMix: inviare prefix: true contro l'endpoint standard restituisce 200 ma il prefisso viene silenziosamente scartato, coerente con la formulazione ufficiale |
Per un formato di output controllato, usa output strutturati (sezione 5) o stop truncation |
| La chiamata parallela agli strumenti non può essere disabilitata | Vedi sezione 4: DeepSeek afferma sia sulle pagine delle Responses che di Anthropic che l'interruttore è ignorato e la chiamata parallela è sempre attivata | Metti in coda le chiamate sul client quando hai bisogno di esecuzione seriale |
9.2 Comportamento Attuale sul Percorso AIHubMix
| Comportamento | Cosa mostrano i test | Cosa fare |
|---|---|---|
| Tipo non standard sugli oggetti di errore delle Responses | Il error.type sulle risposte 4xx è Aihubmix_api_error, mentre la stessa classe di errore su Messages restituisce il canonico invalid_request_error |
Dirigi in base al codice di stato HTTP, non sulla stringa error.type |
| I token di pensiero conteggiati come 0 su Messages | La risposta porta effettivamente un blocco thinking, eppure usage.output_tokens_details.thinking_tokens è sempre 0, il che contraddice il contenuto di pensiero effettivamente prodotto; secondo il contratto di Anthropic contro cui ci integriamo, quel campo è richiesto e dovrebbe essere ≤ output_tokens |
Per la contabilizzazione del costo del pensiero, usa completion_tokens_details.reasoning_tokens su Chat o output_tokens_details.reasoning_tokens su Responses |
Messages ripete model come deepseek-v4-pro |
La richiesta invia deepseek-v4-pro-0813 e la risposta ripete deepseek-v4-pro. La causa è il nome: l'unico nome ufficiale del modello API di DeepSeek è deepseek-v4-pro, e 0813 è la sua etichetta di versione |
Non fare dell'elemento model della risposta l'unica base per controlli di instradamento del modello o attribuzione dell'uso |
9.3 Non Definito da DeepSeek, Quindi Nessun Giudizio Né da Una Parte Né dall'Altra
Inviare un valore al di fuori dell'enum per reasoning_effort (ad es. bogus_xyz) restituisce 200 con una risposta normale, nessun errore e nessun effetto osservabile. Il fatto è abbastanza chiaro — questo percorso attualmente non valida l'enum reasoning_effort. Ciò che non è chiaro è se dovrebbe: DeepSeek pubblica l'enum legale ma non afferma mai se un livello illegale dovrebbe essere rifiutato, quindi non c'è una base per giudicare, il che significa che questo non conta né come comportamento ufficiale né come difetto sul nostro percorso. L'approccio sicuro lato client: valida il livello tu stesso e non contare sull'API per catturarlo.
10. Matrice di Capacità × Supporto API
Le celle qui sotto forniscono la scrittura dei parametri / campi per ciascuna API. Tranne dove contrassegnato come formulazione esplicita di DeepSeek, ogni conclusione proviene da chiamate effettive effettuate il 2026-08-13 contro le API di produzione AIHubMix.
| Capacità | Chat Completions | Responses | Messages |
|---|---|---|---|
| Istruzioni di chat / sistema di base | ✅ messages |
✅ input + instructions |
✅ messages + system di alto livello |
| Streaming | ✅ stream + stream_options |
✅ stream (response.created … response.completed) |
✅ stream (message_start … message_stop) |
| Soglia di output | ✅ max_tokens (400 quando superato, soglia 393216) |
✅ max_output_tokens |
✅ max_tokens |
| Disabilitare il pensiero | ✅ thinking: {"type": "disabled"} |
✅ reasoning: {"effort": "none"} |
✅ thinking: {"type": "disabled"} |
| Livello di pensiero | 🟡 reasoning_effort accettato, nessun segnale distintivo |
✅ reasoning.effort (solo none confermabile) |
🟡 output_config.effort accettato, nulla restituito |
| Contenuto di pensiero restituito | ✅ reasoning_content field |
✅ reasoning output item |
✅ thinking content block |
| Passback obbligatorio della cronologia di pensiero | ✅ mancante reasoning_content → 400 |
✅ mancante reasoning item → 400 |
✅ mancante thinking block → 400 |
| Chiamata agli strumenti | ✅ annidato tools + nominato tool_choice |
✅ piatta tools |
✅ input_schema + tool_choice: {"type":"any"} |
Forzare una chiamata con required |
❗ 400 mentre il pensiero è attivato; disabilitare prima il pensiero | ❗ stesso di sinistra | ✅ {"type": "any"} |
| Chiamata parallela agli strumenti (non disabilitabile) | ➖ nessun campo del genere nell'API Chat ufficiale | ❗ DeepSeek afferma che parallel_tool_calls è ignorato e la chiamata parallela è sempre attivata |
❗ DeepSeek afferma che disable_parallel_tool_use è ignorato; i test restituiscono comunque due blocchi tool_use |
| Output strutturato | ✅ response_format (json_object) |
✅ text.format (json_schema + strict) |
➖ nessun campo di protocollo; porta lo schema in uno strumento |
| Misurazione automatica dei colpi di cache | ✅ usage.prompt_tokens_details.cached_tokens |
✅ usage.input_tokens_details.cached_tokens |
✅ usage.cache_read_input_tokens |
| logprobs | ❗ canale doppio: content + reasoning_content |
✅ top_logprobs solo sull'elemento di testo finale |
➖ |
| Ricerca web | ➖ nessun campo di ricerca nell'API Chat ufficiale; inviare uno non recupera nemmeno | ✅ tools: [{"type": "web_search"}] |
✅ web_search_20250305 |
| Sequenze di arresto | ✅ stop |
➖ nessun campo di sequenza di arresto nel protocollo (solo max_output_tokens limita la lunghezza) |
✅ stop_sequences (stop_reason: "stop_sequence") |
Legenda: ✅ verificato funzionante · 🟡 accettato ma non può essere confermato efficace · ❗ necessita attenzione (vedi le note sopra) · ➖ nessun concetto del genere su questa API
FAQ
Quali API supporta deepseek-v4-pro-0813 su AIHubMix?
Chat Completions (/v1/chat/completions), Responses (/v1/responses), e l'API Messages compatibile con Claude (/v1/messages).
Perché una conversazione a più turni restituisce improvvisamente 400?
La causa più comune è la cronologia di pensiero che non è stata restituita. In modalità di pensiero, il contenuto di pensiero del turno precedente deve essere riprodotto verbatim: reasoning_content nel messaggio dell'assistente per Chat, l'elemento di output type="reasoning" per Responses, e il blocco di contenuto thinking per Messages. Multi-turno con strumenti è dove questo colpisce di più — molti framework filtrano gli elementi di output per type == "message" mentre assemblano la cronologia, il che elimina l'elemento di ragionamento.
È possibile disattivare il pensiero?
Sì. Invia thinking: {"type": "disabled"} su Chat o Messages, e reasoning: {"effort": "none"} su Responses. Una volta disattivato, sia il contenuto di pensiero che i token di pensiero scompaiono.
I tre livelli di reasoning_effort differiscono?low / high / max sono tutti accettati (predefinito high; medium e xhigh sono mappati a high per compatibilità). Nei test, i conteggi dei token di pensiero per la stessa domanda non mostrano alcuna differenza monotonica tra i livelli e nulla viene restituito, quindi la differenza non può essere confermata dal lato del chiamante. Solo il livello none su Responses (pensiero disattivato) produce una chiara differenza osservabile.
Perché tool_choice: "required" restituisce 400?
Quel valore non è accettato mentre il pensiero è attivato (il corpo dell'errore legge La modalità di pensiero non supporta questo tool_choice). Usa una tool_choice di funzione nominata ({"type": "function", "function": {"name": "..."}}) per forzare una chiamata specifica con il pensiero attivato, oppure disabilita prima il pensiero e poi usa required.
Come si abilita il caching del contesto?
Non si abilita — è automatico. Metti il contenuto stabile e immutabile (prompt di sistema, frammenti di conoscenza, definizioni di strumenti) all'inizio della richiesta, e il conteggio dei colpi viene riportato in usage: prompt_tokens_details.cached_tokens su Chat, input_tokens_details.cached_tokens su Responses, e cache_read_input_tokens su Messages.
Per prezzi e stato in tempo reale, vedere la pagina del modello deepseek-v4-pro-0813; per altri modelli, visita la galleria dei modelli.
Guide pratiche correlate: Guida pratica a Kimi K3 (nuovi parametri e una matrice di supporto a tre API) e caching dei prompt di GPT-5.6 e modifiche alla fatturazione.




