Dit artikel behandelt de gebruiksnotities en valkuilen voor deepseek-v4-pro-0813. Op AIHubMix is het model beschikbaar via de Chat Completions, Responses, en Claude-compatibele Messages API's. Zie ook: DeepSeek officiële API-documentatie.
De "Geverifieerde" conclusies en voorbeeldantwoorden in elke sectie komen van daadwerkelijke oproepen gedaan op 2026-08-13 via de AIHubMix API's (Chat Completions / Responses / Messages); specificaties die niet als "Geverifieerd" zijn gemarkeerd komen uit de officiële documentatie van DeepSeek.
1. Model Positionering en Specificaties in een Oogopslag
V4 Pro is de high-end laag van DeepSeek's V4 generatie (de lichte deepseek-v4-flash is zijn broertje). De release lijn gaat terug naar DeepSeek-V4 Preview op 2026-04-24, en 0813 is het MODEL VERSIE label dat DeepSeek aan de huidige build heeft toegewezen. Naast de ruwe specificaties, zijn er vier dingen die het onderscheiden:
- Een spaarzaam grensmodel: 1.6T totale parameters / 49B geactiveerd (een MoE, of mixture-of-experts, architectuur — elke inferentiepass activeert slechts een subset van expert-netwerken: totale parameters bepalen de kenniscapaciteit, geactiveerde parameters bepalen de rekenkosten per oproep). De modelkaart vermeldt CSA+HCA hybride aandacht, mHC, en de Muon optimizer.
- Open gewichten onder MIT:
deepseek-ai/DeepSeek-V4-Prois gepubliceerd op HuggingFace onder de MIT-licentie (een van de meest permissieve open-source licenties — commercieel gebruik en gesloten-source herdistributie zijn beide toegestaan) en kan zelf gehost worden. MIT is ongebruikelijk voor een model van deze grootte. De zelf-hosting notities op de modelkaart suggereren ook een contextvenster van ≥384K tokens wanneer het draait in Think Max (het hoogste denkniveau) — dat is implementatieadvies voor zelf-hosting, geen specificatie van de gehoste API. - Multi-protocol ondersteuning is first-party, geen third-party vertaling: DeepSeek zelf biedt een OpenAI Chat API, een Anthropic-compatibele eindpunt (
/anthropic, datclaude-opus*op dit model in kaart brengt), en de Responses API (DeepSeek beschrijft native ondersteuning voor het formaat, met aanpassingen voor Codex). Het biedt ook FIM (fill-in-the-middle) voltooiing als een Beta-functie op een aparte eindpunt, die geen deel uitmaakt van de drie AIHubMix API's. - Een ~120× kloof tussen cache-hit en cache-miss prijzen: DeepSeek's gepubliceerde prijsmechanisme is cache-hit $0.003625/M vs cache-miss $0.435/M (output $0.87/M), en caching is automatisch zonder parameter om in te stellen. Voor workloads die lange prefixes hergebruiken (systeem prompts, lange documenten), domineert die kloof de rekening. De werkelijke detailhandelprijzen zijn wat de modelpagina toont.
| Item | Waarde |
|---|---|
| Modelnaam op AIHubMix | deepseek-v4-pro-0813 |
| Contextvenster | 1M tokens (1.000.000) |
| Max output | Officiële formulering is MAX OUTPUT MAXIMUM: 384K (het exacte token aantal en de standaard zijn niet gepubliceerd) |
| Invoermodaliteiten | Alleen tekst. De compatibiliteitspagina voor Responses stelt expliciet dat afbeeldings- en bestandinvoeren niet worden ondersteund; de pagina voor Messages markeert expliciet type="image" blokken als Niet Ondersteund; op Chat Completions accepteert het gebruikersbericht content alleen een string, zonder multimodale inhoudscomponenten |
| Denken modus | Hybride (denken / niet-denken), denken standaard aan |
| Denkniveaus | reasoning_effort accepteert low / high / max, standaard high; medium en xhigh worden gemapt naar high voor compatibiliteit |
| Beschikbare API's | Chat Completions, Responses, Messages (Claude-compatibel) |
Geverifieerd: het overschrijden vanmax_tokenswordt afgewezen door validatie in plaats van stilzwijgend afgekapt — het verzenden vanmax_tokens=9999999retourneert HTTP 400, en de foutbody noemt het veld en geeft de limiet393216.
# max_tokens=9999999 -> HTTP 400
"...max_tokens... 393216"
❗ Afbeeldingen veroorzaken geen fout, maar worden verwijderd: de officiële formulering voor de Responses API is "Afbeelding en bestandinvoeren worden niet ondersteund (input_image delen veroorzaken geen fout, maar worden vervangen door een placeholder tekst)" — eeninput_imagedeel faalt de aanvraag niet, het wordt vervangen door placeholder tekst. Op Chat Completions accepteert het gebruikersberichtcontentalleen een string, en op Messages wordentype="image"blokken gemarkeerd als Niet Ondersteund. Bij het bouwen van multimodale routering, behandel "geen fout" nooit als bewijs dat het model de afbeelding daadwerkelijk heeft gezien.
2. Hoe Zet Je Denken Uit? Drie API's, Drie Veldvormen
V4 Pro denkt standaard: stuur helemaal geen parameters en het antwoord komt terug met denkinhoud. Het uitschakelen ervan gebruikt een andere veldvorm op elk van de drie API's.
Chat Completions
Gebruik het top-level thinking object.
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": "Wat is 2 + 2?"}],
extra_body={"thinking": {"type": "disabled"}},
)
# Denken aan (standaard): message.reasoning_content aanwezig, reasoning_tokens = 43
# Denken uit (uitgeschakeld): reasoning_content afwezig, reasoning_tokens afwezig
Geverifieerd: metthinking.type="disabled", verdwijnen zowelmessage.reasoning_contentalsusage.completion_tokens_details.reasoning_tokenssamen, wat bevestigt dat de schakelaar effect heeft gehad.
Responses
Er is geen aparte schakelaar op Responses; het uitschakelen van denken betekent het niveau instellen op none.
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Wat is 2 + 2?",
reasoning={"effort": "none"},
)
# effort="none": usage.output_tokens_details.reasoning_tokens = 0
# output[0] is het berichtitem direct (geen reden item)
# effort niet ingesteld : output begint altijd met een reden item
Geverifieerd:reasoning.effort="none"verschilt merkbaar van het standaardniveau (denktokens dalen naar nul, hetreasoningoutput item verdwijnt), wat bevestigt dat het effect heeft gehad.
Messages
Zelfde naam en zelfde vorm als Chat Completions: het top-level thinking object.
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": "Wat is 2 + 2?"}],
extra_body={"thinking": {"type": "disabled"}},
)
# Denken aan (standaard): content = [denkblok, tekstblok]
# Denken uit (uitgeschakeld): content = [tekstblok]
Geverifieerd: eenmaal uitgeschakeld, verdwijnt hetthinkingblok volledig en blijft alleen hettextblok over.
Over denkniveaus:lowenmaxgaven beide 200 terug op Chat Completions in testen (highis de standaard en geldt wanneer het veld wordt weggelaten), maar denktoken tellingen tonen geen monotone verschillen tussen niveaus voor dezelfde vraag (gemakkelijke vraag: low=43 / max=27; moeilijke vraag: low=114 / max=92), en er wordt niets teruggeëcho'd in het antwoord — de niveaus worden geaccepteerd, maar er is geen onderscheidend signaal waarneembaar vanuit het antwoord. Op Responses kan alleen hetnoneniveau (denken uit) worden bevestigd vanuit de antwoordzijde.
3. Waarom Geeft een Multi-Turn Gesprek Plotseling 400 Terug? Denkgeschiedenis Moet Woordelijk Teruggegeven Worden
Dit is de meest voorkomende valkuil met dit model: in denkmode moet een multi-turn gesprek de denkinhoud van de vorige beurt woordelijk teruggeven, anders wordt de aanvraag afgewezen. Niet verlaagd, niet van lagere kwaliteit — een harde HTTP 400.
De drie API's dragen dezelfde denkinhoud onder verschillende veldnamen:
| API | Passback vorm | Foutbody bij ontbreken |
|---|---|---|
| Chat Completions | Het reasoning_content veld op het assistentbericht |
De `reasoning_content` in de denkmode moet teruggegeven worden aan de API. |
| Responses | Het output item met type="reasoning" in de input array |
De `reasoning_text` in de denkmode moet teruggegeven worden aan de API. |
| Messages | Het thinking blok binnen de assistentinhoudsblokken |
De `content[].thinking` in de denkmode moet teruggegeven worden aan de API. |
Geverifieerd (trigger voorwaarden): deze validatie wordt consistent geactiveerd op multi-turn aanvragen die tools bevatten (het model doet een tooloproep, daarna wordt het toolresultaat teruggestuurd). Op gewone multi-turn aanvragen zonder tools, waar het model direct antwoordt, werd de validatie in deze ronde van testen niet geactiveerd en de aanvraag retourneerde 200. Met andere woorden, toolorkestratie (agent / functie-aanroep workloads) is waar je het meest waarschijnlijk tegenaan loopt, dus beschouw denkinhoud als onderdeel van de gespreksstatus die je behoudt en opnieuw afspeelt.Chat Completions
# Multi-turn: geef het vorige assistentbericht woordelijk terug, inclusief reasoning_content
messages = [
{"role": "user", "content": "Wat is 1 + 1? Onthoud het resultaat."},
{
"role": "assistant",
"content": "2",
"reasoning_content": "<reasoning_content van het vorige antwoord>",
},
{"role": "user", "content": "Voeg 1 toe aan het resultaat."},
]
# Verwijderen van reasoning_content -> HTTP 400 invalid_request_error
Geverifieerd: een historisch assistentbericht zonder reasoning_content retourneert 400; het opnieuw toevoegen maakt dezelfde aanvraag 200 retourneren en correct doorgaan.Responses
# Multi-turn: input = vorige input + response.output (reden item inbegrepen) + nieuw bericht
input = previous_input + response.output + [
{"role": "user", "content": "Voeg 1 toe aan het resultaat."}
]
# Filtering van het type="reasoning" item -> HTTP 400
Geverifieerd: het terugplaatsen vanresponse.outputzoals het is, is alles wat nodig is. Het filteren van outputitems optype == "message"terwijl je de geschiedenis samenstelt, verwijdert hetreasoningitem en activeert de 400 — dit is de meest voorkomende manier om gebeten te worden.
Messages
# Multi-turn: geef response.content woordelijk terug als het assistentbericht
messages = [
{"role": "user", "content": "Wat is het weer in Parijs?"},
{"role": "assistant", "content": response.content}, # denk + tool_use blokken
{"role": "user", "content": [tool_result_block]},
]
# Verwijderen van het denkblok -> HTTP 400
Geverifieerd: het verwijderen van hetthinkingblok uit de inhoudarray retourneert 400 (meterror.typeingesteld opinvalid_request_error).
4. Tool Aanroepen
Elke API verklaart tools in zijn eigen protocolvorm; de vormen zijn niet uitwisselbaar.
Chat Completions
Geneste vorm (een function object dat name / parameters wikkelt). Een genummerde functie tool_choice dwingt de oproep af.
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "Wat is het weer in Parijs?"}],
tools=[{
"type": "function",
"function": {
"name": "get_weather",
"description": "Krijg het weer voor een stad",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
},
}],
tool_choice={"type": "function", "function": {"name": "get_weather"}},
)
# Geobserveerd: finish_reason "tool_calls", tool_calls[0].function.arguments = {"city": "Parijs"}
❗ Geverifieerd:tool_choice: "required"kan niet worden gebruikt terwijl denken aan is — het retourneert 400Denken modus ondersteunt deze tool_choice niet; het uitschakelen van denken (thinking.type="disabled") maakt dezelfde aanvraag 200 retourneren. Wanneer je "moet een tool aanroepen" semantiek nodig hebt, gebruik dan een genummerde functietool_choicein plaats daarvan (zoals hierboven, wat werkt met denken aan), of schakel eerst het denken uit en gebruik danrequired.
Responses
Vlakke vorm (type / name / parameters op hetzelfde niveau).
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Wat is het weer in Parijs?",
tools=[{
"type": "function",
"name": "get_weather",
"description": "Krijg het weer voor een stad",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
)
# Geobserveerde outputitems: ["reasoning", "function_call"]; arguments = {"city": "Parijs"}
Geverifieerd: het kopiëren van de geneste vorm van Chat Completions (function: {...}) naar Responses retourneert 400 — gebruik de vlakke vorm.tool_choice: "required"is onderhevig aan dezelfde denkmodebeperking als op Chat.
Messages
Anthropic-native vorm (input_schema), met tool_choice: {"type": "any"} om een oproep af te dwingen.
response = client.messages.create(
model="deepseek-v4-pro-0813",
max_tokens=1024,
tools=[{
"name": "get_weather",
"description": "Krijg het weer voor een stad",
"input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
tool_choice={"type": "any"},
messages=[{"role": "user", "content": "Wat is het weer in Parijs?"}],
)
# Geobserveerd: inhoud bevat een tool_use blok, naam = get_weather, input = {"city": "Parijs"}
❗ Parallel tool-aanroepen kunnen niet worden uitgeschakeld, volgens het ontwerp van DeepSeek zelf — de officiële compatibiliteitspagina van Anthropic stelt, op detool_choicerij, datdisable_parallel_tool_use is genegeerd, en de Responses pagina stelt ookparallel_tool_calls | Genegeerd (parallel tool-aanroepen zijn altijd ingeschakeld). Testen komt overeen: het vragen naar twee steden tegelijk metdisable_parallel_tool_use: trueretourneert nog steeds tweetool_useblokken. Als je seriële uitvoering nodig hebt, neem dan de eerste oproep of queue ze zelf aan de clientzijde.
Toolaantal en contextkosten: het verzenden van 200 functiedefinities in een enkele aanvraag retourneerde nog steeds 200 met een normaal antwoord en activeerde geen tellingvalidatie (geobserveerd op dit pad; hogere tellingen zijn niet getest). Maar prompt_tokens voor die aanvraag bereikte 6.105 — tooldefinities gaan volledig in de context en worden in rekening gebracht. Wanneer je veel tools hebt, trim dan de toolset per scenario in plaats van alles onvoorwaardelijk te declareren.5. Gestructureerde Output
Chat Completions
response_format ondersteunt JSON-modus.
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "Geef {\"a\": 1} terug als JSON."}],
response_format={"type": "json_object"},
)
# Geobserveerde responsinhoud: {"a":1}
Geverifieerd: de output is geldige JSON.
Responses
Declareer een JSON-schema via text.format, met strict modus ondersteund.
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Geef het nummer 1 onder sleutel a.",
text={
"format": {
"type": "json_schema",
"name": "extract",
"strict": True,
"schema": {"type": "object", "properties": {"a": {"type": "integer"}}, "required": ["a"]},
}
},
)
# Geobserveerde outputtekst: {"a":1}
Geverifieerd: de output voldoet strikt aan het gegeven schema.
Messages
Het Messages (Anthropic) protocol heeft geen response_format / text.format equivalent. De gebruikelijke oplossing is om het schema in een tool te dragen — declareer een tool waarvan input_schema je doel-schema is, stel tool_choice: {"type": "any"} in, en lees het gestructureerde resultaat uit de input van het tool_use blok. Deze ronde van testen heeft dat patroon niet specifiek geverifieerd; wanneer je harde schema garanties nodig hebt, geef dan de voorkeur aan Chat Completions of Responses.
6. Hoe Schakel Je Context Caching In? Dat Doe Je Niet, Het Is Automatisch
Context caching (identieke prefixes worden hergebruikt, en het gecachte gedeelte wordt tegen een lagere prijs in rekening gebracht) is standaard ingeschakeld en vereist geen parameters. Een tweede aanvraag met dezelfde lange prefix rapporteert de hit in usage, onder een veldnaam die varieert per API. Voor details over caching en actuele prijzen, zie de modelpagina; voor cross-model caching strategie en hit-rate technieken, zie prompt caching praktijken.
Chat Completions
# gebruik van de tweede oproep met een identieke lange prefix
"prompt_tokens_details": {"cached_tokens": 640} # eerste oproep: 0
Geverifieerd: twee opeenvolgende oproepen met dezelfde lange prefix op hetzelfde kanaal verplaatsten cached_tokens van 0 naar 640.Responses
# gebruik van de tweede oproep met identieke lange instructies
"input_tokens_details": {"cached_tokens": 896} # eerste oproep: 0
Messages
# gebruik van een oproep waarvan de lange systeemprefix al was verwarmd
"cache_read_input_tokens": 896
Geverifieerd: de bovenstaande prefix was verwarmd door een Responses-aanroep met identieke inhoud, en de eerste Messages-aanroep raakte onmiddellijk 896 — consistent met caching die is gebaseerd op inhoudsprefix en gedeeld over protocoloppervlakken.
7. logprobs: Chat Retourneert Twee Kanalen
logprobs (log kansen — het detail van het model's vertrouwen per kandidaat-token) komt terug in verschillende vormen op de twee API's, en parsercode moet ze afzonderlijk behandelen.
Chat Completions
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "Zeg hallo."}],
logprobs=True,
top_logprobs=2,
)
# Geobserveerd: choices[0].logprobs bevat TWEE arrays
# logprobs.content[] -> tokens van het uiteindelijke antwoord
# logprobs.reasoning_content[] -> tokens van de denktekst
❗ Geverifieerd: Chat retourneert log kansen voor zowelcontentalsreasoning_content. Code die alleenlogprobs.contentleest, volgens de standaard OpenAI responsvorm, zal geen fout geven, maar zal stilzwijgend het denk kanaal missen; als je code een enkele array onderlogprobsaanneemt, voeg dan eerst een vormcontrole toe.
Responses
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Zeg hallo.",
top_logprobs=3,
)
# Geobserveerd: logprobs alleen op het laatste berichtitem
# output[-1].content[0].logprobs[] met logprob + top_logprobs details
Geverifieerd: Responses voegt logprobs alleen toe aan het laatste tekstitem — geen van de dual-channel vorm gezien op Chat.
Messages
Het Messages (Anthropic) protocol heeft geen equivalent veld. Voor token-niveau kansdetails, gebruik Chat Completions of Responses.
8. Welke API's Kunnen Het Web Doorzoeken?
Websearch hier is een server-side tool (de retrieval draait op de server; de client doet nooit zelf de aanvraag), en het wordt daadwerkelijk uitgevoerd op zowel de Responses als Messages API's in testen.
Responses
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Wat is de laatste stabiele versie van Python?",
tools=[{"type": "web_search"}],
)
# Geobserveerde outputitemvolgorde:
# ["reasoning", "web_search_call", "reasoning", "message"]
Geverifieerd: een web_search_call item verschijnt in de outputvolgorde, wat betekent dat de server echt een retrieval heeft uitgevoerd.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": "Wat is de laatste stabiele versie van Python?"}],
)
# Geobserveerde inhoudsblokvolgorde:
# ["thinking", "server_tool_use", "web_search_tool_result", "thinking", "text"]
# usage.server_tool_use.web_search_requests = 1
Geverifieerd: usage.server_tool_use.web_search_requests telt 1 — de retrieval aanvraag heeft echt plaatsgevonden en werd gemeten.Chat Completions
Websearch kan niet worden geactiveerd op Chat. DeepSeek's officiële Chat API referentie bevat nergens een zoek-tool veld in het aanvraag schema (dat is een afwezigheid vastgesteld door het veldlijst één voor één door te nemen; DeepSeek heeft geen expliciete verklaring afgelegd die ondersteuning ontkent). De API met een expliciete officiële ondersteuningsverklaring voor server-side zoekopdrachten is Responses (web_search), en de officiële Messages compatibiliteitspagina vermeldt ook de zoekgerelateerde inhoudsblokken.
# Drie controlegroepen, dezelfde vraag die live informatie vereist, allemaal HTTP 200:
# A geen zoekveld -> "kan niet ophalen", annotaties = null
# B web_search_options -> "kan niet ophalen", annotaties = null, gebruik identiek aan A
# C enable_search -> "kan niet ophalen", annotaties = null, gebruik identiek aan A
Geverifieerd: het verzenden vanweb_search_optionsofenable_searchgeeft geen fout, maar het haalt ook niets op — de respons bevat geenannotaties(de citatielijst die aan een respons is gehecht wanneer websearch draait), en het gebruik komt overeen met de controlegroep veld voor veld. Voor webtoegang, gebruik in plaats daarvan de Responses of Messages API.
9. Gebruik Notities: DeepSeek's Ontwerp vs Afwijkingen op Onze Weg
Alles hieronder retourneert HTTP 200 terwijl het tegenintuïtief gedraagt. De oorzaken verschillen, en ook wat je eraan moet doen, dus ze worden afzonderlijk vermeld: de eerste groep is hoe DeepSeek het model heeft ontworpen, en het veranderen van aanbieders zal dat niet veranderen; de tweede groep is het huidige gedrag op het AIHubMix pad, waar we aan werken.
9.1 Volgens DeepSeek's Ontwerp
| Gedrag | Officiële formulering | Wat te doen |
|---|---|---|
| Responses behoudt geen sessiestatus of metadata | De officiële Responses compatibiliteitspagina stelt, rij voor rij, store | Niet ondersteund. De respons draagt altijd store: false, metadata | Niet ondersteund, en safety_identifier | Niet ondersteund (van die vier velden is alleen user Ondersteund). Testen komt overeen: de aanvraag retourneert 200, maar metadata is null, safety_identifier is afwezig, en store is altijd false |
Houd aanvraag-correlatiegegevens aan de client; vertrouw niet op server-side behoud |
| Samplingparameters hebben geen effect in denkmode | DeepSeek stelt expliciet dat temperature en top_p stilzwijgend inert zijn in denkmode. In testen geven beide 200 terug zonder iets terug te echoën en zonder verandering in responsvorm |
Vertrouw niet op samplingparameters voor outputstabiliteit in denkmode; gebruik gestructureerde output wanneer je determinisme nodig hebt |
| Prefixcontinuatie / FIM is alleen op de officiële beta-eindpunt | De officiële beschrijving van prefix is "(Beta) … Je moet base_url="https://api.deepseek.com/beta" instellen om deze functie te gebruiken", en FIM voltooiing is eveneens een Beta-functie. Geverifieerd op AIHubMix productie: het verzenden van prefix: true tegen de standaard eindpunt retourneert 200 maar de prefix wordt stilzwijgend weggegooid, consistent in richting met de officiële formulering |
Voor gecontroleerd outputformaat, gebruik gestructureerde output (sectie 5) of stop afkapping |
| Parallel tool-aanroepen kunnen niet worden uitgeschakeld | Zie sectie 4: DeepSeek stelt op zowel de Responses als Anthropic pagina's dat de schakelaar wordt genegeerd en parallel aanroepen altijd aan zijn | Queue oproepen aan de client wanneer je seriële uitvoering nodig hebt |
9.2 Huidig Gedrag op het AIHubMix Pad
| Gedrag | Wat testen toont | Wat te doen |
|---|---|---|
Niet-standaard type op Responses foutobjecten |
De error.type op 4xx-responsen is Aihubmix_api_error, terwijl dezelfde klasse van fout op Messages de canonieke invalid_request_error retourneert |
Branch op de HTTP-statuscode, niet op de error.type string |
| Denktokens worden geteld als 0 op Messages | De respons draagt wel een thinking blok, maar usage.output_tokens_details.thinking_tokens is altijd 0, wat in tegenspraak is met de denkinhoud die daadwerkelijk is geproduceerd; onder het Anthropic-contract waartegen we integreren, is dat veld vereist en zou ≤ output_tokens moeten zijn |
Voor denken-kostenrekening, gebruik completion_tokens_details.reasoning_tokens op Chat of output_tokens_details.reasoning_tokens op Responses |
Messages echo model als deepseek-v4-pro |
De aanvraag verzendt deepseek-v4-pro-0813 en de respons echoot deepseek-v4-pro. De oorzaak is naamgeving: DeepSeek's enige officiële API-modelnaam is deepseek-v4-pro, en 0813 is zijn versielabel |
Maak het model veld van de respons niet de enige basis voor modelroutingcontroles of gebruiksattribuering |
9.3 Onbepaald door DeepSeek, Dus Geen Vonnis Aan Beide Zijden
Het verzenden van een waarde buiten de enum voor reasoning_effort (bijv. bogus_xyz) retourneert 200 met een normaal antwoord, geen fout, en geen waarneembaar effect. Het feit is duidelijk genoeg — dit pad valideert momenteel de reasoning_effort enum niet. Wat onduidelijk is, is of het zou moeten: DeepSeek publiceert de wettelijke enum maar stelt nooit vast of een onwettig niveau zou moeten worden afgewezen, dus er is geen basis om tegen te beoordelen, wat betekent dat dit noch als officieel gedrag noch als een defect op ons pad telt. De veilige client-side benadering: valideer het niveau zelf en reken niet op de API om het te vangen.
10. Capaciteit × API Ondersteuningsmatrix
De cellen hieronder geven de parameter / veld spelling voor elke API. Behalve waar gemarkeerd als DeepSeek's expliciete formulering, komen alle conclusies van daadwerkelijke oproepen gedaan op 2026-08-13 tegen de AIHubMix productie API's.
| Capaciteit | Chat Completions | Responses | Messages |
|---|---|---|---|
| Basis chat / systeem instructies | ✅ messages |
✅ input + instructions |
✅ messages + top-level system |
| Streaming | ✅ stream + stream_options |
✅ stream (response.created … response.completed) |
✅ stream (message_start … message_stop) |
| Output plafond | ✅ max_tokens (400 wanneer overschreden, plafond 393216) |
✅ max_output_tokens |
✅ max_tokens |
| Denken uitschakelen | ✅ thinking: {"type": "disabled"} |
✅ reasoning: {"effort": "none"} |
✅ thinking: {"type": "disabled"} |
| Denkniveau | 🟡 reasoning_effort geaccepteerd, geen onderscheidend signaal |
✅ reasoning.effort (alleen none bevestigbaar) |
🟡 output_config.effort geaccepteerd, niets teruggeëcho'd |
| Denkinhoud teruggegeven | ✅ reasoning_content veld |
✅ reasoning output item |
✅ thinking inhoudsblok |
| Verplichte denkgeschiedenis passback | ✅ ontbrekende reasoning_content → 400 |
✅ ontbrekende reasoning item → 400 |
✅ ontbrekende thinking blok → 400 |
| Tool aanroepen | ✅ geneste tools + genummerde tool_choice |
✅ vlakke tools |
✅ input_schema + tool_choice: {"type":"any"} |
Dwingen tot een oproep met required |
❗ 400 terwijl denken aan is; schakel eerst denken uit | ❗ hetzelfde als links | ✅ {"type": "any"} |
| Parallel tool-aanroepen (niet uitschakelbaar) | ➖ geen dergelijk veld op de officiële Chat API | ❗ DeepSeek stelt parallel_tool_calls is genegeerd en parallel aanroepen zijn altijd aan |
❗ DeepSeek stelt disable_parallel_tool_use is genegeerd; testen retourneert nog steeds twee tool_use blokken |
| Gestructureerde output | ✅ response_format (json_object) |
✅ text.format (json_schema + strict) |
➖ geen protocolveld; draag het schema in een tool |
| Automatische cache-hit metering | ✅ usage.prompt_tokens_details.cached_tokens |
✅ usage.input_tokens_details.cached_tokens |
✅ usage.cache_read_input_tokens |
| logprobs | ❗ duale kanaal: content + reasoning_content |
✅ top_logprobs alleen op het laatste tekstitem |
➖ |
| Websearch | ➖ geen zoekveld op de officiële Chat API; het verzenden ervan haalt ook niets op | ✅ tools: [{"type": "web_search"}] |
✅ web_search_20250305 |
| Stopsequenties | ✅ stop |
➖ geen stop-sequentie veld in het protocol (alleen max_output_tokens beperkt de lengte) |
✅ stop_sequences (stop_reason: "stop_sequence") |
Legenda: ✅ geverifieerd werkend · 🟡 geaccepteerd maar kan niet bevestigd worden effectief · ❗ heeft aandacht nodig (zie de notities hierboven) · ➖ geen dergelijk concept op deze API
FAQ
Welke API's ondersteunt deepseek-v4-pro-0813 op AIHubMix?
Chat Completions (/v1/chat/completions), Responses (/v1/responses), en de Claude-compatibele Messages API (/v1/messages).
Waarom geeft een multi-turn gesprek plotseling 400 terug?
De meest voorkomende oorzaak is denkgeschiedenis die niet is teruggegeven. In denkmode moet de denkinhoud van de vorige beurt woordelijk worden herhaald: reasoning_content op het assistentbericht voor Chat, het type="reasoning" output item voor Responses, en het thinking inhoudsblok voor Messages. Multi-turn met tools is waar dit het hardst bijt — veel frameworks filteren outputitems op type == "message" terwijl ze de geschiedenis samenstellen, wat het redenitem verwijdert.
Kan denken worden uitgeschakeld?
Ja. Stuur thinking: {"type": "disabled"} op Chat of Messages, en reasoning: {"effort": "none"} op Responses. Eenmaal uitgeschakeld, verdwijnen zowel de denkinhoud als de denktokens.
Verschillen de drie reasoning_effort niveaus?low / high / max worden allemaal geaccepteerd (standaard high; medium en xhigh worden gemapt naar high voor compatibiliteit). In testen tonen denktoken tellingen voor dezelfde vraag geen monotone verschillen tussen niveaus en wordt er niets teruggeëcho'd, dus het verschil kan niet worden bevestigd vanuit de aanroepzijde. Alleen het none niveau op Responses (denken uit) produceert een duidelijk waarneembaar verschil.
Waarom retourneert tool_choice: "required" 400?
Die waarde wordt niet geaccepteerd terwijl denken aan is (de foutbody leest Denken modus ondersteunt deze tool_choice niet). Gebruik een genummerde functie tool_choice ({"type": "function", "function": {"name": "..."}}) om een specifieke oproep af te dwingen met denken aan, of schakel eerst het denken uit en gebruik dan required.
Hoe schakel je context caching in?
Dat doe je niet — het is automatisch. Plaats de stabiele, onveranderlijke inhoud (systeem prompts, kennisfragmenten, tooldefinities) aan het begin van de aanvraag, en het hit aantal wordt gerapporteerd in gebruik: prompt_tokens_details.cached_tokens op Chat, input_tokens_details.cached_tokens op Responses, en cache_read_input_tokens op Messages.
Voor prijzen en realtime status, zie de deepseek-v4-pro-0813 modelpagina; voor meer modellen, bezoek de modelgalerij.
Gerelateerde praktische gidsen: Kimi K3 praktische gids (nieuwe parameters en een drie-API ondersteuningsmatrix) en GPT-5.6 prompt caching en factureringswijzigingen.




