Dieser Artikel behandelt Nutzungshinweise und typische Stolpersteine für deepseek-v4-pro-0813. Auf AIHubMix ist das Modell über die Chat-Completions-, Responses- und die Claude-kompatible Messages-API verfügbar. Siehe auch: offizielle DeepSeek-API-Dokumentation.
Die Abschnitte mit dem Vermerk „Verifiziert“ sowie die Beispielantworten stammen aus tatsächlichen Aufrufen vom 13.08.2026 über die AIHubMix-APIs (Chat Completions / Responses / Messages). Spezifikationspunkte, die nicht als „Verifiziert“ gekennzeichnet sind, stammen aus der offiziellen Dokumentation von DeepSeek.
1. Einordnung des Modells und Spezifikationen im Überblick
V4 Pro ist die Spitzenklasse der V4-Generation von DeepSeek (das leichtgewichtige deepseek-v4-flash ist sein Pendant). Die Veröffentlichungslinie geht auf DeepSeek-V4 Preview vom 24.04.2026 zurück, und 0813 ist die MODELLVERSIONSBEZEICHNUNG, die DeepSeek dem aktuellen Build zugewiesen hat. Abgesehen von den reinen Spezifikationen zeichnen sich vier Punkte aus:
- Ein dünn besetztes Spitzenmodell: 1,6 Bio. Gesamtparameter / 49 Mrd. aktivierte Parameter (eine MoE-Architektur, also Mixture-of-Experts – bei jedem Inferenzdurchlauf wird nur ein Teil der Expertennetzwerke aktiviert: Die Gesamtparameter bestimmen die Wissenskapazität, die aktivierten Parameter den Rechenaufwand pro Aufruf). Die Modellkarte nennt die hybride Aufmerksamkeit CSA+HCA, mHC und den Muon-Optimierer.
- Offene Gewichte unter MIT:
deepseek-ai/DeepSeek-V4-Prowird auf HuggingFace unter der MIT-Lizenz veröffentlicht (eine der freizügigsten Open-Source-Lizenzen – kommerzielle Nutzung und die Weiterverbreitung als Closed-Source sind beide erlaubt) und kann selbst gehostet werden. MIT ist für ein Modell dieser Größe ungewöhnlich. Die Hinweise zum Selbst-Hosting in der Modellkarte empfehlen zudem ein Kontextfenster von ≥384K Token, wenn im Think-Max-Modus (der höchsten Denkstufe) gearbeitet wird. Dabei handelt es sich um Bereitstellungsempfehlungen für das Selbst-Hosting, nicht um eine Spezifikation der gehosteten API. - Mehrprotokoll-Unterstützung ist direkt vom Anbieter, keine Drittanbieter-Übersetzung: DeepSeek selbst bietet eine OpenAI-Chat-API, einen Anthropic-kompatiblen Endpunkt (
/anthropic, derclaude-opus*auf dieses Modell abbildet) und die Responses-API (DeepSeek beschreibt eine native Unterstützung des Formats mit Anpassungen für Codex). Außerdem gibt es FIM-Completion (Fill-in-the-Middle) als Beta-Funktion auf einem separaten Endpunkt, der nicht zu den drei AIHubMix-APIs gehört. - Eine Preisdifferenz von etwa 120× zwischen Cache-Treffer und Cache-Fehlschlag: Laut DeepSeeks veröffentlichtem Preismodell kostet ein Cache-Treffer 0,003625 $/M, ein Cache-Fehlschlag 0,435 $/M (Output 0,87 $/M), und das Caching läuft automatisch ohne einzustellenden Parameter. Bei Workloads, die lange Präfixe wiederverwenden (Systemprompts, lange Dokumente), bestimmt diese Differenz die Kosten maßgeblich. Der tatsächliche Endkundenpreis ist der, den die Modellseite anzeigt.
| Merkmal | Wert |
|---|---|
| Modellname auf AIHubMix | deepseek-v4-pro-0813 |
| Kontextfenster | 1M Token (1.000.000) |
| Maximale Ausgabe | Der offizielle Wortlaut lautet MAX OUTPUT MAXIMUM: 384K (die genaue Token-Anzahl und der Standardwert werden nicht veröffentlicht) |
| Eingabemodalitäten | Nur Text. Die Kompatibilitätsseite zu Responses stellt ausdrücklich klar, dass Bild- und Datei-Eingaben nicht unterstützt werden; die Messages-Seite markiert type="image"-Blöcke ausdrücklich als nicht unterstützt; bei Chat Completions akzeptiert der content der Benutzernachricht nur einen String, ohne multimodale Inhaltsteile |
| Thinking-Modus | Hybrid (Thinking / Nicht-Thinking), Thinking standardmäßig aktiv |
| Thinking-Stufen | reasoning_effort akzeptiert low / high / max, Standard ist high; medium und xhigh werden aus Kompatibilitätsgründen auf high abgebildet |
| Verfügbare APIs | Chat Completions, Responses, Messages (Claude-kompatibel) |
Verifiziert: Eine Überschreitung vonmax_tokenswird durch die Validierung abgelehnt und nicht stillschweigend gekürzt – das Senden vonmax_tokens=9999999liefert HTTP 400, und der Fehlertext nennt das Feld und die Obergrenze393216.
# max_tokens=9999999 -> HTTP 400
"...max_tokens... 393216"
❗ Bilder lösen keinen Fehler aus, werden aber verworfen: Der offizielle Wortlaut für die Responses-API lautet: „Bild- und Datei-Eingaben werden nicht unterstützt (input_image-Teile verursachen keinen Fehler, werden aber durch Platzhaltertext ersetzt)“ – eininput_image-Teil bringt die Anfrage nicht zum Scheitern, sondern wird durch Platzhaltertext ersetzt. Bei Chat Completions akzeptiert dercontentder Benutzernachricht nur einen String, und bei Messages sindtype="image"-Blöcke als nicht unterstützt markiert. Wer multimodales Routing aufbaut, sollte „kein Fehler“ niemals als Beleg dafür werten, dass das Modell das Bild tatsächlich gesehen hat.
2. Wie schaltet man Thinking aus? Drei APIs, drei Feldstrukturen
V4 Pro denkt standardmäßig mit: Sendet man gar keine Parameter, enthält die Antwort Thinking-Inhalte. Zum Ausschalten wird auf jeder der drei APIs eine andere Feldstruktur verwendet.
Chat Completions
Verwende das oberste thinking-Objekt.
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": "What is 2 + 2?"}],
extra_body={"thinking": {"type": "disabled"}},
)
# Thinking on (default): message.reasoning_content present, reasoning_tokens = 43
# Thinking off (disabled): reasoning_content absent, reasoning_tokens absent
Verifiziert: Mitthinking.type="disabled"verschwindenmessage.reasoning_contentundusage.completion_tokens_details.reasoning_tokensgemeinsam, was bestätigt, dass die Umschaltung gewirkt hat.
Responses
Bei Responses gibt es keinen eigenen Schalter; Thinking wird ausgeschaltet, indem die Stufe auf none gesetzt wird.
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="What is 2 + 2?",
reasoning={"effort": "none"},
)
# effort="none": usage.output_tokens_details.reasoning_tokens = 0
# output[0] is the message item directly (no reasoning item)
# effort unset : output always starts with a reasoning item
Verifiziert:reasoning.effort="none"unterscheidet sich im Ergebnis deutlich von der Standardstufe (Thinking-Token fallen auf null, das Ausgabeelementreasoningverschwindet), was bestätigt, dass es gewirkt hat.
Messages
Gleicher Name und gleiche Struktur wie bei Chat Completions: das oberste thinking-Objekt.
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": "What is 2 + 2?"}],
extra_body={"thinking": {"type": "disabled"}},
)
# Thinking on (default): content = [thinking block, text block]
# Thinking off (disabled): content = [text block]
Verifiziert: Nach dem Deaktivieren verschwindet derthinking-Block vollständig, und nur dertext-Block bleibt übrig.
Zu den Thinking-Stufen:lowundmaxlieferten bei Chat Completions im Test beide 200 (highist der Standard und gilt, wenn das Feld weggelassen wird). Die Anzahl der Thinking-Token zeigt jedoch für dieselbe Frage keinen monotonen Unterschied zwischen den Stufen (einfache Frage: low=43 / max=27; schwierige Frage: low=114 / max=92), und in der Antwort wird nichts zurückgespiegelt. Die Stufen werden akzeptiert, aber die Antwort liefert kein unterscheidbares Signal. Bei Responses lässt sich von der Antwortseite her nur die Stufenone(Thinking aus) bestätigen.
3. Warum liefert eine mehrstufige Konversation plötzlich 400? Die Thinking-Historie muss unverändert zurückgegeben werden
Dies ist der mit Abstand häufigste Stolperstein bei diesem Modell: Im Thinking-Modus muss eine mehrstufige Konversation die Thinking-Inhalte des vorherigen Turns unverändert zurückgeben, sonst wird die Anfrage abgelehnt. Nicht schlechtere Qualität, sondern ein harter HTTP-400-Fehler.
Die drei APIs transportieren denselben Thinking-Inhalt unter unterschiedlichen Feldnamen:
| API | Form der Rückgabe | Fehlertext bei fehlender Rückgabe |
|---|---|---|
| Chat Completions | Das Feld reasoning_content in der Assistenten-Nachricht |
The `reasoning_content` in the thinking mode must be passed back to the API. |
| Responses | Das Ausgabeelement mit type="reasoning" im input-Array |
The `reasoning_text` in the thinking mode must be passed back to the API. |
| Messages | Der thinking-Block innerhalb der Inhaltsblöcke des Assistenten |
The `content[].thinking` in the thinking mode must be passed back to the API. |
Verifiziert (Auslösebedingungen): Diese Validierung greift zuverlässig bei mehrstufigen Anfragen mit tools (das Modell stellt einen Tool-Aufruf, danach wird das Tool-Ergebnis zurückgesendet). Bei einfachen mehrstufigen Anfragen ohne Tools, bei denen das Modell direkt antwortet, griff die Validierung in dieser Testrunde nicht, und die Anfrage lieferte 200. Anders gesagt: Die Tool-Orchestrierung (Agent- oder Function-Calling-Workloads) ist der Bereich, in dem man am ehesten darauf stößt. Daher sollte man Thinking-Inhalte als Teil des Gesprächszustands behandeln, den man speichert und erneut sendet.Chat Completions
# Multi-turn: pass the previous assistant message back verbatim, including reasoning_content
messages = [
{"role": "user", "content": "What is 1 + 1? Remember the result."},
{
"role": "assistant",
"content": "2",
"reasoning_content": "<reasoning_content from the previous response>",
},
{"role": "user", "content": "Add 1 to the result."},
]
# Dropping reasoning_content -> HTTP 400 invalid_request_error
Verifiziert: Eine historische Assistenten-Nachricht ohne reasoning_content liefert 400; fügt man es wieder hinzu, liefert dieselbe Anfrage 200 und setzt die Konversation korrekt fort.Responses
# Multi-turn: input = previous input + response.output (reasoning item included) + new message
input = previous_input + response.output + [
{"role": "user", "content": "Add 1 to the result."}
]
# Filtering out the type="reasoning" item -> HTTP 400
Verifiziert: Es genügt,response.outputunverändert wieder einzufügen. Filtert man beim Zusammenstellen der Historie die Ausgabeelemente nachtype == "message", fällt dasreasoning-Element weg und löst den 400-Fehler aus. Das ist der häufigste Weg, in diese Falle zu tappen.
Messages
# Multi-turn: pass response.content back verbatim as the assistant message
messages = [
{"role": "user", "content": "What's the weather in Paris?"},
{"role": "assistant", "content": response.content}, # thinking + tool_use blocks
{"role": "user", "content": [tool_result_block]},
]
# Stripping the thinking block -> HTTP 400
Verifiziert: Das Entfernen desthinking-Blocks aus dem Inhaltsarray liefert 400 (miterror.typegleichinvalid_request_error).
4. Tool-Aufrufe
Jede API deklariert Tools in ihrer eigenen Protokollstruktur; die Strukturen sind nicht austauschbar.
Chat Completions
Verschachtelte Struktur (ein function-Objekt, das name und parameters umschließt). Ein tool_choice mit benannter Funktion erzwingt den Aufruf.
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "What's the weather in Paris?"}],
tools=[{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather for a city",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
},
}],
tool_choice={"type": "function", "function": {"name": "get_weather"}},
)
# Observed: finish_reason "tool_calls", tool_calls[0].function.arguments = {"city": "Paris"}
❗ Verifiziert:tool_choice: "required"kann nicht verwendet werden, solange Thinking aktiv ist. Es liefert 400 mitThinking mode does not support this tool_choice; deaktiviert man Thinking (thinking.type="disabled"), liefert dieselbe Anfrage 200. Wenn man die Semantik „muss ein Tool aufrufen“ braucht, verwendet man stattdessen ein tool_choice mit benannter Funktiontool_choice(wie oben, das funktioniert auch mit aktivem Thinking), oder man schaltet Thinking zuerst aus und verwendet dannrequired.
Responses
Flache Struktur (type, name und parameters auf derselben Ebene).
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="What's the weather in Paris?",
tools=[{
"type": "function",
"name": "get_weather",
"description": "Get weather for a city",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
)
# Observed output items: ["reasoning", "function_call"]; arguments = {"city": "Paris"}
Verifiziert: Kopiert man die verschachtelte Struktur von Chat Completions (function: {...}) in Responses, liefert das 400. Stattdessen die flache Struktur verwenden.tool_choice: "required"unterliegt bei Responses derselben Einschränkung im Thinking-Modus wie bei Chat.
Messages
Anthropic-native Struktur (input_schema), mit tool_choice: {"type": "any"}, um einen Aufruf zu erzwingen.
response = client.messages.create(
model="deepseek-v4-pro-0813",
max_tokens=1024,
tools=[{
"name": "get_weather",
"description": "Get weather for a city",
"input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
tool_choice={"type": "any"},
messages=[{"role": "user", "content": "What's the weather in Paris?"}],
)
# Observed: content contains a tool_use block, name = get_weather, input = {"city": "Paris"}
❗ Paralleler Tool-Aufruf lässt sich nicht abschalten, so ist es von DeepSeek bewusst konzipiert: Die offizielle Seite zur Anthropic-Kompatibilität vermerkt in der Zeile zutool_choice, dassdisable_parallel_tool_use is ignoredgilt, und die Responses-Seite nennt ebensoparallel_tool_calls | Ignored (parallel tool calling is always enabled). Der Test bestätigt das: Fragt man nach zwei Städten gleichzeitig und setztdisable_parallel_tool_use: true, liefert die Antwort trotzdem zweitool_use-Blöcke. Wer eine serielle Ausführung braucht, nimmt den ersten Aufruf oder reiht die Aufrufe clientseitig selbst in eine Warteschlange ein.
Anzahl der Tools und Kontextkosten: Das Senden von 200 Funktionsdefinitionen in einer einzigen Anfrage lieferte weiterhin 200 mit einer normalen Antwort und löste keine Anzahlprüfung aus (auf diesem Pfad beobachtet; höhere Anzahlen wurden nicht getestet). Aber prompt_tokens erreichte bei dieser Anfrage 6,105 — Tool-Definitionen werden vollständig in den Kontext aufgenommen und abgerechnet. Wenn Sie viele Tools haben, schränken Sie das Tool-Set pro Szenario ein, statt alles unbedingt zu deklarieren.5. Strukturierte Ausgabe
Chat Completions
response_format unterstützt den JSON-Modus.
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "Return {\"a\": 1} as JSON."}],
response_format={"type": "json_object"},
)
# Observed response content: {"a":1}
Verifiziert: Die Ausgabe ist gültiges JSON.
Responses
Deklarieren Sie ein JSON Schema über text.format; der strict-Modus wird unterstützt.
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Return the number 1 under key a.",
text={
"format": {
"type": "json_schema",
"name": "extract",
"strict": True,
"schema": {"type": "object", "properties": {"a": {"type": "integer"}}, "required": ["a"]},
}
},
)
# Observed output text: {"a":1}
Verifiziert: Die Ausgabe entspricht strikt dem vorgegebenen Schema.
Messages
Das Messages-Protokoll (Anthropic) hat kein Äquivalent zu response_format / text.format. Der übliche Workaround besteht darin, das Schema in einem Tool zu übergeben: Deklarieren Sie ein Tool, dessen input_schema Ihr Zielschema ist, setzen Sie tool_choice: {"type": "any"} und lesen Sie das strukturierte Ergebnis aus dem input des tool_use-Blocks. Diese Testrunde hat dieses Muster nicht gezielt verifiziert; wenn Sie harte Schema-Garantien benötigen, bevorzugen Sie Chat Completions oder Responses.
6. Wie aktivieren Sie Context Caching? Gar nicht, es ist automatisch
Context Caching (identische Präfixe werden wiederverwendet, und der gecachte Anteil wird zu einem niedrigeren Satz abgerechnet) ist standardmäßig aktiviert und benötigt keine Parameter. Eine zweite Anfrage mit demselben langen Präfix meldet den Treffer in usage, unter einem Feldnamen, der je nach API variiert. Details zum Caching und aktuelle Preise finden Sie auf der Modellseite; zur modellübergreifenden Caching-Strategie und Techniken für Trefferquoten siehe Best Practices für Prompt Caching.
Chat Completions
# usage of the second call with an identical long prefix
"prompt_tokens_details": {"cached_tokens": 640} # first call: 0
Verifiziert: Zwei unmittelbar aufeinanderfolgende Aufrufe mit demselben langen Präfix auf demselben Kanal erhöhten cached_tokens von 0 auf 640.Responses
# usage of the second call with identical long instructions
"input_tokens_details": {"cached_tokens": 896} # first call: 0
Messages
# usage of a call whose long system prefix was already warmed
"cache_read_input_tokens": 896
Verifiziert: Das oben genannte Präfix wurde durch eine Responses-Anfrage mit identischem Inhalt vorgewärmt, und der erste Messages-Aufruf traf sofort 896 — konsistent damit, dass das Caching über den Inhaltspräfix gesteuert und über Protokoll-Oberflächen hinweg geteilt wird.
7. logprobs: Chat liefert zwei Kanäle
logprobs (Log-Wahrscheinlichkeiten – die Konfidenzdetails des Modells pro Kandidaten-Token) kommen auf den beiden APIs in unterschiedlicher Form zurück, und Parsing-Code muss sie getrennt behandeln.
Chat Completions
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "Say hi."}],
logprobs=True,
top_logprobs=2,
)
# Observed: choices[0].logprobs contains TWO arrays
# logprobs.content[] -> tokens of the final answer
# logprobs.reasoning_content[] -> tokens of the thinking text
❗ Verifiziert: Chat liefert Log-Wahrscheinlichkeiten sowohl fürcontentals auch fürreasoning_content. Code, der nurlogprobs.contentgemäß der standardmäßigen OpenAI-Antwortstruktur liest, bricht nicht mit einem Fehler ab, verpasst aber stillschweigend den Denk-Kanal; wenn Ihr Code von einem einzelnen Array unterlogprobsausgeht, fügen Sie zuerst eine Strukturprüfung hinzu.
Responses
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Say hi.",
top_logprobs=3,
)
# Observed: logprobs only on the final message item
# output[-1].content[0].logprobs[] with logprob + top_logprobs details
Verifiziert: Responses hängt logprobs nur an das letzte Textelement an – keine der dualen Kanal-Strukturen, die bei Chat zu sehen ist.
Messages
Das Messages-Protokoll (Anthropic) hat kein entsprechendes Feld. Für Wahrscheinlichkeitsdetails auf Token-Ebene verwenden Sie Chat Completions oder Responses.
8. Welche APIs können das Web durchsuchen?
Die Websuche ist hier ein serverseitiges Tool (die Abfrage läuft auf dem Server; der Client stellt die Anfrage nie selbst), und sie wird in den Tests tatsächlich sowohl über die Responses- als auch über die Messages-API ausgeführt.
Responses
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="What is the latest stable version of Python?",
tools=[{"type": "web_search"}],
)
# Observed output item sequence:
# ["reasoning", "web_search_call", "reasoning", "message"]
Verifiziert: Ein web_search_call-Element erscheint in der Ausgabesequenz, was bedeutet, dass der Server tatsächlich eine Abfrage ausgeführt hat.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": "What is the latest stable version of Python?"}],
)
# Observed content block sequence:
# ["thinking", "server_tool_use", "web_search_tool_result", "thinking", "text"]
# usage.server_tool_use.web_search_requests = 1
Verifiziert: usage.server_tool_use.web_search_requests zählt 1 – die Suchanfrage hat tatsächlich stattgefunden und wurde abgerechnet.Chat Completions
Websuche kann auf Chat nicht ausgelöst werden. Die offizielle Chat-API-Referenz von DeepSeek enthält im Anfrageschema kein Such-Tool-Feld (diese Feststellung beruht darauf, die Feldliste Punkt für Punkt durchzugehen; DeepSeek hat keine explizite Aussage gemacht, die Unterstützung verneint). Die API mit einer ausdrücklichen offiziellen Unterstützungsaussage für serverseitige Suche ist Responses (web_search), und die offizielle Messages-Kompatibilitätsseite listet ebenfalls die suchbezogenen Content-Blöcke auf.
# Three control groups, same question requiring live information, all HTTP 200:
# A no search field -> "cannot retrieve", annotations = null
# B web_search_options -> "cannot retrieve", annotations = null, usage identical to A
# C enable_search -> "cannot retrieve", annotations = null, usage identical to A
Verifiziert: Das Senden vonweb_search_optionsoderenable_searchlöst keinen Fehler aus, ruft aber auch nichts ab – die Antwort enthält keineannotations(die Quellenliste, die einer Antwort bei ausgeführter Websuche beigefügt wird), und die Usage stimmt Feld für Feld mit der Kontrollgruppe überein. Für Webzugriff verwenden Sie stattdessen die Responses- oder Messages-API.
9. Nutzungshinweise: DeepSeeks Design vs. Abweichungen auf unserem Pfad
Alles Folgende liefert HTTP 200 zurück, verhält sich aber kontraintuitiv. Die Ursachen unterscheiden sich, ebenso wie das, was Sie dagegen tun sollten, daher werden sie getrennt aufgeführt: Die erste Gruppe beruht auf DeepSeeks Modelldesign, und ein Anbieterwechsel ändert daran nichts; die zweite Gruppe ist das aktuelle Verhalten auf dem AIHubMix-Pfad, an dem wir arbeiten.
9.1 Durch DeepSeeks Design bedingt
| Verhalten | Offizielle Formulierung | Was zu tun ist |
|---|---|---|
| Responses speichert keinen Sitzungsstatus oder keine Metadaten | Die offizielle Kompatibilitätsseite für Responses hält zeilenweise fest: store | Not supported. The response always carries store: false, metadata | Not supported und safety_identifier | Not supported (von diesen vier Feldern wird nur user unterstützt). Die Tests stimmen überein: Die Anfrage liefert 200, aber metadata ist null, safety_identifier fehlt, und store ist immer false |
Halten Sie anfragenbezogene Korrelationsdaten auf dem Client; verlassen Sie sich nicht auf serverseitige Speicherung |
| Sampling-Parameter haben im Denkmodus keine Wirkung | DeepSeek gibt ausdrücklich an, dass temperature und top_p im Denkmodus stillschweigend wirkungslos sind. In den Tests liefern beide 200 zurück, ohne Echo und ohne Änderung der Antwortstruktur |
Verlassen Sie sich im Denkmodus nicht auf Sampling-Parameter für stabile Ausgaben; verwenden Sie strukturierte Ausgabe, wenn Sie Determinismus benötigen |
| Prefix-Fortsetzung / FIM gibt es nur auf dem offiziellen Beta-Endpunkt | Die offizielle Beschreibung von prefix lautet „(Beta) … Sie müssen base_url="https://api.deepseek.com/beta" setzen, um diese Funktion zu nutzen“, und die FIM-Vervollständigung ist ebenfalls ein Beta-Feature. Auf der AIHubMix-Produktion verifiziert: Das Senden von prefix: true an den Standard-Endpunkt liefert 200, aber das Präfix wird stillschweigend verworfen – in der Richtung konsistent mit dem offiziellen Wortlaut |
Für kontrollierte Ausgabeformate verwenden Sie strukturierte Ausgabe (Abschnitt 5) oder stop-Abschneidung |
| Paralleler Tool-Aufruf lässt sich nicht deaktivieren | Siehe Abschnitt 4: DeepSeek gibt sowohl auf der Responses- als auch auf der Anthropic-Seite an, dass der Schalter ignoriert wird und paralleler Aufruf immer aktiv ist | Reihen Sie Aufrufe auf dem Client in eine Warteschlange, wenn Sie serielle Ausführung benötigen |
9.2 Aktuelles Verhalten auf dem AIHubMix-Pfad
| Verhalten | Was die Tests zeigen | Was zu tun ist |
|---|---|---|
Nicht standardmäßiger type in Responses-Fehlerobjekten |
Der error.type bei 4xx-Antworten lautet Aihubmix_api_error, während derselbe Fehlertyp bei Messages den kanonischen Wert invalid_request_error zurückgibt |
Verzweigen Sie anhand des HTTP-Statuscodes, nicht anhand der Zeichenkette error.type |
| Denk-Tokens bei Messages als 0 gezählt | Die Antwort enthält einen thinking-Block, dennoch ist usage.output_tokens_details.thinking_tokens immer 0, was dem tatsächlich erzeugten Denkinhalt widerspricht; nach dem Anthropic-Vertrag, in den wir integrieren, ist dieses Feld verpflichtend und sollte ≤ output_tokens sein |
Für die Abrechnung der Denkkosten verwenden Sie completion_tokens_details.reasoning_tokens bei Chat oder output_tokens_details.reasoning_tokens bei Responses |
Messages gibt model als deepseek-v4-pro zurück |
Die Anfrage sendet deepseek-v4-pro-0813, die Antwort gibt deepseek-v4-pro zurück. Die Ursache liegt in der Benennung: Der einzige offizielle API-Modellname von DeepSeek ist deepseek-v4-pro, und 0813 ist dessen Versionsbezeichnung |
Verwenden Sie das Antwortfeld model nicht als alleinige Grundlage für Modell-Routing-Prüfungen oder Nutzungszuordnung |
9.3 Von DeepSeek nicht definiert, daher weder als richtig noch als falsch bewertet
Das Senden eines Werts außerhalb des Enums für reasoning_effort (z. B. bogus_xyz) liefert 200 mit einer normalen Antwort, ohne Fehler und ohne beobachtbare Wirkung. Der Sachverhalt ist klar genug – dieser Pfad validiert das Enum von reasoning_effort derzeit nicht. Unklar ist, ob er das sollte: DeepSeek veröffentlicht das zulässige Enum, legt jedoch nie fest, ob eine unzulässige Stufe abgelehnt werden müsste; es gibt also keinen Maßstab zur Beurteilung, weshalb dies weder als offizielles Verhalten noch als Mangel auf unserem Pfad zählt. Der sichere clientseitige Ansatz: Prüfen Sie die Stufe selbst und verlassen Sie sich nicht darauf, dass die API den Fehler abfängt.
10. Matrix aus Funktion × API-Unterstützung
Die folgenden Zellen geben die Parameter- bzw. Feldschreibweise für jede API an. Sofern nicht als ausdrückliche DeepSeek-Formulierung gekennzeichnet, stammt jede Schlussfolgerung aus tatsächlichen Aufrufen vom 2026-08-13 gegen die AIHubMix-Produktions-APIs.
| Funktion | Chat Completions | Responses | Messages |
|---|---|---|---|
| Basis-Chat / Systemanweisungen | ✅ messages |
✅ input + instructions |
✅ messages + oberstes system |
| Streaming | ✅ stream + stream_options |
✅ stream (response.created … response.completed) |
✅ stream (message_start … message_stop) |
| Ausgabe-Obergrenze | ✅ max_tokens (400 bei Überschreitung, Obergrenze 393216) |
✅ max_output_tokens |
✅ max_tokens |
| Thinking deaktivieren | ✅ thinking: {"type": "disabled"} |
✅ reasoning: {"effort": "none"} |
✅ thinking: {"type": "disabled"} |
| Denkstufe | 🟡 reasoning_effort akzeptiert, kein unterscheidendes Signal |
✅ reasoning.effort (nur none bestätigbar) |
🟡 output_config.effort akzeptiert, nichts zurückgespiegelt |
| Zurückgegebener Denkinhalt | ✅ reasoning_content-Feld |
✅ reasoning-Ausgabeelement |
✅ thinking-Inhaltsblock |
| Verpflichtende Rückgabe des Denkverlaufs | ✅ fehlendes reasoning_content → 400 |
✅ fehlendes reasoning-Element → 400 |
✅ fehlender thinking-Block → 400 |
| Tool-Aufrufe | ✅ verschachteltes tools + benanntes tool_choice |
✅ flaches tools |
✅ input_schema + tool_choice: {"type":"any"} |
Erzwingen eines Aufrufs mit required |
❗ 400 bei aktivem Denken; zuerst Denken deaktivieren | ❗ wie links | ✅ {"type": "any"} |
| Paralleler Tool-Aufruf (nicht deaktivierbar) | ➖ kein solches Feld in der offiziellen Chat-API | ❗ DeepSeek gibt an, dass parallel_tool_calls ignoriert wird und paralleler Aufruf immer aktiv ist |
❗ DeepSeek gibt an, dass disable_parallel_tool_use ignoriert wird; die Tests liefern weiterhin zwei tool_use-Blöcke |
| Strukturierte Ausgabe | ✅ response_format (json_object) |
✅ text.format (json_schema + strict) |
➖ kein protocol-Feld; das Schema wird in einem Tool übertragen |
| Automatische Erfassung von Cache-Treffern | ✅ usage.prompt_tokens_details.cached_tokens |
✅ usage.input_tokens_details.cached_tokens |
✅ usage.cache_read_input_tokens |
| logprobs | ❗ Zweikanal: content + reasoning_content |
✅ top_logprobs nur beim letzten Textelement |
➖ |
| Websuche | ➖ Die offizielle Chat API hat kein Suchfeld; wird eines gesendet, wird dadurch ebenfalls nichts abgerufen | ✅ tools: [{"type": "web_search"}] |
✅ web_search_20250305 |
| Stop-Sequenzen | ✅ stop |
➖ Im Protokoll gibt es kein Feld für Stop-Sequenzen (die Länge wird nur über max_output_tokens begrenzt) |
✅ stop_sequences (stop_reason: "stop_sequence") |
Legende: ✅ geprüft und funktionsfähig · 🟡 akzeptiert, aber Wirksamkeit nicht bestätigbar · ❗ benötigt Aufmerksamkeit (siehe Hinweise oben) · ➖ dieses Konzept gibt es in dieser API nicht
FAQ
Welche APIs unterstützt deepseek-v4-pro-0813 auf AIHubMix?
Chat Completions (/v1/chat/completions), Responses (/v1/responses) und die Claude-kompatible Messages API (/v1/messages).
Warum liefert eine Konversation mit mehreren Runden plötzlich 400?
Die häufigste Ursache ist ein nicht zurückgesendeter Denkverlauf. Im Denkmodus muss der Denkinhalt der vorherigen Runde wortgetreu erneut übermittelt werden: reasoning_content in der Assistant-Nachricht bei Chat, das Ausgabeelement type="reasoning" bei Responses und der Inhaltsblock thinking bei Messages. Besonders kritisch wird es bei Mehrrunden-Konversationen mit Tools – viele Frameworks filtern beim Zusammenstellen des Verlaufs Ausgabeelemente nach type == "message", wodurch das Reasoning-Element verloren geht.
Lässt sich das Denken abschalten?
Ja. Sende bei Chat oder Messages thinking: {"type": "disabled"} und bei Responses reasoning: {"effort": "none"}. Danach verschwinden sowohl der Denkinhalt als auch die Denk-Tokens.
Unterscheiden sich die drei reasoning_effort-Stufen?low / high / max werden alle akzeptiert (Standard ist high; medium und xhigh werden zur Kompatibilität auf high abgebildet). Bei Tests zeigt die Anzahl der Denk-Tokens für dieselbe Frage zwischen den Stufen keinen monotonen Unterschied, und es wird nichts zurückgespiegelt; der Unterschied lässt sich von der Aufruferseite aus also nicht bestätigen. Nur die Stufe none bei Responses (Denken aus) erzeugt einen eindeutig erkennbaren Unterschied.
Warum liefert tool_choice: "required" den Fehler 400?
Dieser Wert wird bei aktiviertem Denken nicht akzeptiert (der Fehlertext lautet Thinking mode does not support this tool_choice). Verwende eine benannte Funktion in tool_choice ({"type": "function", "function": {"name": "..."}}), um bei aktivem Denken einen bestimmten Aufruf zu erzwingen, oder deaktiviere das Denken zuerst und verwende danach required.
Wie aktiviert man das Kontext-Caching?
Gar nicht – es ist automatisch aktiv. Platziere die stabilen, unveränderlichen Inhalte (System-Prompts, Wissensausschnitte, Tool-Definitionen) am Anfang der Anfrage. Die Anzahl der Treffer wird in der Usage ausgewiesen: prompt_tokens_details.cached_tokens bei Chat, input_tokens_details.cached_tokens bei Responses und cache_read_input_tokens bei Messages.
Preise und den aktuellen Status findest du auf der Modellseite von deepseek-v4-pro-0813; weitere Modelle findest du in der Modellgalerie.
Verwandte praktische Anleitungen: Praxisleitfaden zu Kimi K3 (neue Parameter und eine Matrix der drei unterstützten APIs) und Änderungen bei Prompt-Caching und Abrechnung für GPT-5.6.



