DeepSeek V4 Pro (0813): Myślenie i Matryca 3-API

AIHubMix15 min czytania
DeepSeek V4 Pro (0813): Myślenie i Matryca 3-API

Artykuł ten zawiera uwagi dotyczące użytkowania i pułapki związane z deepseek-v4-pro-0813. Na AIHubMix model jest dostępny za pośrednictwem API Chat Completions, Responses i Claude-compatible Messages. Zobacz także: oficjalna dokumentacja API DeepSeek.

Wnioski "Zweryfikowane" i przykładowe odpowiedzi w każdej sekcji pochodzą z rzeczywistych wywołań dokonanych 2026-08-13 za pośrednictwem API AIHubMix (Chat Completions / Responses / Messages); elementy specyfikacji, które nie są oznaczone jako "Zweryfikowane", pochodzą z oficjalnej dokumentacji DeepSeek.

1. Pozycjonowanie modelu i specyfikacje w skrócie

V4 Pro to najwyższa klasa generacji V4 DeepSeek (lekki deepseek-v4-flash jest jego odpowiednikiem). Linia wydania sięga do DeepSeek-V4 Preview z dnia 2026-04-24, a 0813 to etykieta WERSJI MODELU przypisana przez DeepSeek do bieżącej wersji. Oprócz surowych specyfikacji, cztery rzeczy wyróżniają go:

  • Model o rzadkiej granicy: 1,6T całkowitych parametrów / 49B aktywowanych (architektura MoE, czyli mieszanka ekspertów — każdy przebieg wnioskowania aktywuje tylko podzbiór sieci ekspertów: całkowite parametry określają pojemność wiedzy, aktywowane parametry określają koszt obliczeniowy na wywołanie). Karta modelu wymienia hybrydową uwagę CSA+HCA, mHC i optymalizator Muon.
  • Otwarte wagi na licencji MIT: deepseek-ai/DeepSeek-V4-Pro jest publikowane na HuggingFace na licencji MIT (jedna z najbardziej liberalnych licencji open-source — dozwolone jest użycie komercyjne i redystrybucja w zamkniętym źródle) i może być hostowane samodzielnie. MIT jest rzadkością dla modelu tej wielkości. Notatki dotyczące samodzielnego hostowania na karcie modelu sugerują również okno kontekstowe ≥384K tokenów podczas działania w Trybie Myślenia Max (najwyższy poziom myślenia) — to jest wskazówka dotycząca wdrożenia dla samodzielnego hostowania, a nie specyfikacja hostowanego API.
  • Wsparcie dla wielu protokołów jest pierwszoosobowe, a nie tłumaczenie zewnętrzne: DeepSeek samodzielnie oferuje API OpenAI Chat, punkt końcowy zgodny z Anthropic (/anthropic, który mapuje claude-opus* na ten model) oraz API Responses (DeepSeek opisuje natywne wsparcie dla formatu, z adaptacjami dla Codex). Oferuje również FIM (uzupełnianie w środku) jako funkcję beta na osobnym punkcie końcowym, która nie jest częścią trzech API AIHubMix.
  • Około 120× różnica między ceną za trafienie w pamięci podręcznej a nietrafieniem: opublikowany mechanizm cenowy DeepSeek to cena za trafienie w pamięci podręcznej $0.003625/M w porównaniu do nietrafienia $0.435/M (wyjście $0.87/M), a pamięć podręczna jest automatyczna bez potrzeby ustawiania parametrów. Dla obciążeń, które ponownie wykorzystują długie prefiksy (podpowiedzi systemowe, długie dokumenty), ta różnica dominuje w rachunku. Rzeczywiste ceny detaliczne to to, co pokazuje strona modelu.
Element Wartość
Nazwa modelu na AIHubMix deepseek-v4-pro-0813
Okno kontekstowe 1M tokenów (1,000,000)
Maksymalne wyjście Oficjalne sformułowanie to MAX OUTPUT MAXIMUM: 384K (dokładna liczba tokenów i domyślna nie są publikowane)
Modalności wejściowe Tylko tekst. Strona zgodności Responses wyraźnie stwierdza, że wejścia obrazowe i plikowe są nieobsługiwane; strona Messages wyraźnie oznacza bloki type="image" jako Nieobsługiwane; w Chat Completions wiadomość użytkownika content akceptuje tylko ciąg, bez części multimodalnych
Tryb myślenia Hybrydowy (myślenie / brak myślenia), myślenie włączone domyślnie
Poziomy myślenia reasoning_effort akceptuje low / high / max, domyślnie high; medium i xhigh są mapowane na high dla zgodności
Dostępne API Chat Completions, Responses, Messages (zgodne z Claude)
Zweryfikowane: przekroczenie max_tokens jest odrzucane przez walidację, a nie cicho przycinane — wysłanie max_tokens=9999999 zwraca HTTP 400, a treść błędu wskazuje pole i podaje sufit 393216.
# max_tokens=9999999 -> HTTP 400
"...max_tokens... 393216"
Obrazy nie generują błędu, ale są pomijane: oficjalne sformułowanie dla API Responses brzmi "Wejścia obrazowe i plikowe nie są obsługiwane (części input_image nie powodują błędu, ale są zastępowane tekstem zastępczym)" — część input_image nie powoduje błędu żądania, jest zamieniana na tekst zastępczy. W Chat Completions wiadomość użytkownika content akceptuje tylko ciąg, a w Messages bloki type="image" są oznaczone jako Nieobsługiwane. Przy budowaniu trasowania multimodalnego nigdy nie traktuj "braku błędu" jako dowodu, że model rzeczywiście widział obraz.

2. Jak wyłączyć myślenie? Trzy API, trzy kształty pól

V4 Pro myśli domyślnie: nie wysyłaj żadnych parametrów, a odpowiedź wraca z treścią myślenia. Wyłączenie go wymaga użycia innego kształtu pola w każdym z trzech API.

Chat Completions

Użyj obiektu thinking na najwyższym poziomie.

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": "Co to jest 2 + 2?"}],
    extra_body={"thinking": {"type": "disabled"}},
)

# Myślenie włączone (domyślnie): message.reasoning_content obecne, reasoning_tokens = 43
# Myślenie wyłączone (wyłączone): reasoning_content nieobecne, reasoning_tokens nieobecne
Zweryfikowane: z thinking.type="disabled" zarówno message.reasoning_content, jak i usage.completion_tokens_details.reasoning_tokens znikają razem, co potwierdza, że przełącznik zadziałał.

Responses

Nie ma osobnego przełącznika w Responses; wyłączenie myślenia oznacza ustawienie poziomu na none.

response = client.responses.create(
    model="deepseek-v4-pro-0813",
    input="Co to jest 2 + 2?",
    reasoning={"effort": "none"},
)

# effort="none": usage.output_tokens_details.reasoning_tokens = 0
#                output[0] to element wiadomości bez elementu reasoning
# effort nieustawione: output zawsze zaczyna się od elementu reasoning
Zweryfikowane: reasoning.effort="none" różni się zauważalnie od domyślnego poziomu (tokeny myślenia spadają do zera, element reasoning znika), co potwierdza, że zadziałało.

Messages

Taka sama nazwa i taki sam kształt jak Chat Completions: obiekt thinking na najwyższym poziomie.

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": "Co to jest 2 + 2?"}],
    extra_body={"thinking": {"type": "disabled"}},
)

# Myślenie włączone (domyślnie): content = [blok myślenia, blok tekstu]
# Myślenie wyłączone (wyłączone): content = [blok tekstu]
Zweryfikowane: po wyłączeniu blok thinking całkowicie znika, a pozostaje tylko blok text.
O poziomach myślenia: low i max zwróciły 200 w testach Chat Completions (high jest domyślne i stosuje się, gdy pole jest pominięte), ale liczby tokenów myślenia nie pokazują monotonicznej różnicy między poziomami dla tego samego pytania (łatwe pytanie: low=43 / max=27; trudne pytanie: low=114 / max=92), a nic nie jest zwracane w odpowiedzi — poziomy są akceptowane, ale nie ma obserwowalnego sygnału rozróżniającego z odpowiedzi. W Responses tylko poziom none (myślenie wyłączone) można potwierdzić z strony odpowiedzi.

3. Dlaczego rozmowa wieloetapowa nagle zwraca 400? Historia myślenia musi być przekazywana dosłownie

To najczęstszy problem z tym modelem: w trybie myślenia rozmowa wieloetapowa musi przekazać treść myślenia z poprzedniego etapu dosłownie, w przeciwnym razie żądanie zostanie odrzucone. Nie obniżone, nie gorszej jakości — twardy HTTP 400.

Trzy API przenoszą te same treści myślenia pod różnymi nazwami pól:

API Kształt przekazywania Treść błędu, gdy brakuje
Chat Completions Pole reasoning_content w wiadomości asystenta Treść `reasoning_content` w trybie myślenia musi być przekazywana z powrotem do API.
Responses Element wyjściowy z type="reasoning" w tablicy input Treść `reasoning_text` w trybie myślenia musi być przekazywana z powrotem do API.
Messages Blok thinking wewnątrz bloków treści asystenta Treść `content[].thinking` w trybie myślenia musi być przekazywana z powrotem do API.
Zweryfikowane (warunki wyzwalające): ta walidacja działa konsekwentnie na wieloetapowych żądaniach, które zawierają tools (model wydaje wywołanie narzędzia, a następnie wynik narzędzia jest przesyłany z powrotem). W przypadku zwykłych wieloetapowych żądań bez narzędzi, gdzie model odpowiada bezpośrednio, walidacja nie zadziałała w tej rundzie testów, a żądanie zwróciło 200. Innymi słowy, orkiestracja narzędzi (agenci / obciążenia wywołania funkcji) to miejsce, w którym najprawdopodobniej napotkasz ten problem, więc traktuj treść myślenia jako część stanu rozmowy, który utrzymujesz i odtwarzasz.

Chat Completions

# Wieloetapowe: przekazanie poprzedniej wiadomości asystenta dosłownie, w tym reasoning_content
messages = [
    {"role": "user", "content": "Co to jest 1 + 1? Zapamiętaj wynik."},
    {
        "role": "assistant",
        "content": "2",
        "reasoning_content": "<reasoning_content z poprzedniej odpowiedzi>",
    },
    {"role": "user", "content": "Dodaj 1 do wyniku."},
]

# Pominięcie reasoning_content -> HTTP 400 invalid_request_error
Zweryfikowane: brakująca historyczna wiadomość asystenta bez reasoning_content zwraca 400; dodanie jej z powrotem sprawia, że identyczne żądanie zwraca 200 i kontynuuje poprawnie.

Responses

# Wieloetapowe: input = poprzednie input + response.output (element reasoning włączony) + nowa wiadomość
input = previous_input + response.output + [
    {"role": "user", "content": "Dodaj 1 do wyniku."}
]

# Filtrowanie elementu typu="reasoning" -> HTTP 400
Zweryfikowane: włączenie response.output z powrotem w oryginalnej postaci to wszystko, co jest potrzebne. Filtrowanie elementów wyjściowych według type == "message" podczas składania historii pomija element reasoning i wyzwala 400 — to najczęstszy sposób na napotkanie problemu.

Messages

# Wieloetapowe: przekazanie response.content dosłownie jako wiadomości asystenta
messages = [
    {"role": "user", "content": "Jaka jest pogoda w Paryżu?"},
    {"role": "assistant", "content": response.content},   # bloki myślenia + użycie narzędzi
    {"role": "user", "content": [tool_result_block]},
]

# Usunięcie bloku myślenia -> HTTP 400
Zweryfikowane: usunięcie bloku thinking z tablicy treści zwraca 400 (z error.type ustawionym na invalid_request_error).

4. Wywoływanie narzędzi

Każde API deklaruje narzędzia w swoim własnym kształcie protokołu; kształty nie są wymienne.

Chat Completions

Zagnieżdżony kształt (obiekt function otaczający name / parameters). Nazwana funkcja tool_choice wymusza wywołanie.

completion = client.chat.completions.create(
    model="deepseek-v4-pro-0813",
    messages=[{"role": "user", "content": "Jaka jest pogoda w Paryżu?"}],
    tools=[{
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Uzyskaj pogodę dla miasta",
            "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
        },
    }],
    tool_choice={"type": "function", "function": {"name": "get_weather"}},
)

# Obserwowane: finish_reason "tool_calls", tool_calls[0].function.arguments = {"city": "Paryż"}
Zweryfikowane: tool_choice: "required" nie może być używane, gdy myślenie jest włączone — zwraca 400 Tryb myślenia nie obsługuje tego tool_choice; wyłączenie myślenia (thinking.type="disabled") sprawia, że identyczne żądanie zwraca 200. Gdy potrzebujesz semantyki "musi wywołać narzędzie", użyj zamiast tego nazwanego funkcji tool_choice (jak powyżej, co działa z włączonym myśleniem), lub najpierw wyłącz myślenie, a następnie użyj required.

Responses

Płaski kształt (type / name / parameters na tym samym poziomie).

response = client.responses.create(
    model="deepseek-v4-pro-0813",
    input="Jaka jest pogoda w Paryżu?",
    tools=[{
        "type": "function",
        "name": "get_weather",
        "description": "Uzyskaj pogodę dla miasta",
        "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
    }],
)

# Obserwowane elementy wyjściowe: ["reasoning", "function_call"]; arguments = {"city": "Paryż"}
Zweryfikowane: skopiowanie zagnieżdżonego kształtu Chat Completions (function: {...}) do Responses zwraca 400 — użyj płaskiego kształtu. tool_choice: "required" podlega temu samemu ograniczeniu trybu myślenia, co w Chat.

Messages

Kształt natywny dla Anthropic (input_schema), z tool_choice: {"type": "any"}, aby wymusić wywołanie.

response = client.messages.create(
    model="deepseek-v4-pro-0813",
    max_tokens=1024,
    tools=[{
        "name": "get_weather",
        "description": "Uzyskaj pogodę dla miasta",
        "input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
    }],
    tool_choice={"type": "any"},
    messages=[{"role": "user", "content": "Jaka jest pogoda w Paryżu?"}],
)

# Obserwowane: content zawiera blok użycia narzędzia, name = get_weather, input = {"city": "Paryż"}
Równoległe wywoływanie narzędzi nie może być wyłączone, zgodnie z własnym projektem DeepSeek — oficjalna strona zgodności z Anthropic stwierdza, w wierszu tool_choice, że disable_parallel_tool_use jest ignorowane, a strona Responses również stwierdza parallel_tool_calls | Ignored (równoległe wywoływanie narzędzi jest zawsze włączone). Testy potwierdzają: pytanie o dwie miasta jednocześnie z disable_parallel_tool_use: true nadal zwraca dwa bloki tool_use. Jeśli potrzebujesz wykonania szeregowego, weź pierwsze wywołanie lub kolejkuj je samodzielnie po stronie klienta.
Liczba narzędzi i koszt kontekstu: wysłanie 200 definicji funkcji w jednym żądaniu nadal zwróciło 200 z normalną odpowiedzią i nie wywołało żadnej walidacji liczby (obserwowane na tej ścieżce; wyższe liczby nie były testowane). Ale prompt_tokens dla tego żądania osiągnęły 6,105 — definicje narzędzi wchodzą w kontekst w całości i są rozliczane. Gdy masz wiele narzędzi, skróć zestaw narzędzi na dany scenariusz, zamiast deklarować wszystko bezwarunkowo.

5. Ustrukturyzowane wyjście

Chat Completions

response_format obsługuje tryb JSON.

completion = client.chat.completions.create(
    model="deepseek-v4-pro-0813",
    messages=[{"role": "user", "content": "Zwróć {\"a\": 1} jako JSON."}],
    response_format={"type": "json_object"},
)

# Obserwowane treści odpowiedzi: {"a":1}
Zweryfikowane: wyjście jest poprawnym JSON-em.

Responses

Zadeklaruj schemat JSON za pomocą text.format, z obsługą trybu strict.

response = client.responses.create(
    model="deepseek-v4-pro-0813",
    input="Zwróć liczbę 1 pod kluczem a.",
    text={
        "format": {
            "type": "json_schema",
            "name": "extract",
            "strict": True,
            "schema": {"type": "object", "properties": {"a": {"type": "integer"}}, "required": ["a"]},
        }
    },
)

# Obserwowane tekst wyjściowy: {"a":1}
Zweryfikowane: wyjście ściśle odpowiada podanemu schematowi.

Messages

Protokół Messages (Anthropic) nie ma odpowiednika response_format / text.format. Zwykłym obejściem jest przeniesienie schematu do narzędzia — zadeklaruj narzędzie, którego input_schema jest twoim docelowym schematem, ustaw tool_choice: {"type": "any"} i odczytaj ustrukturyzowany wynik z input bloku tool_use. Ta runda testów nie zweryfikowała tego wzorca; gdy potrzebujesz twardych gwarancji schematu, preferuj Chat Completions lub Responses.

6. Jak włączyć pamięć podręczną kontekstu? Nie włączasz, to jest automatyczne

Pamięć podręczna kontekstu (identyczne prefiksy są ponownie używane, a część pamięci podręcznej jest rozliczana po niższej stawce) jest włączona domyślnie i nie wymaga parametrów. Drugie żądanie z tym samym długim prefiksem zgłasza trafienie w usage, pod polem, którego nazwa różni się w zależności od API. Aby uzyskać szczegóły dotyczące pamięci podręcznej i aktualnych cen, zobacz stronę modelu; aby uzyskać strategię pamięci podręcznej między modelami i techniki trafień, zobacz praktyki pamięci podręcznej podpowiedzi.

Chat Completions

# użycie drugiego wywołania z identycznym długim prefiksem
"prompt_tokens_details": {"cached_tokens": 640}   # pierwsze wywołanie: 0
Zweryfikowane: dwa kolejne wywołania z tym samym długim prefiksem na tym samym kanale przeniosły cached_tokens z 0 do 640.

Responses

# użycie drugiego wywołania z identycznymi długimi instrukcjami
"input_tokens_details": {"cached_tokens": 896}    # pierwsze wywołanie: 0

Messages

# użycie wywołania, którego długi prefiks systemowy był już podgrzany
"cache_read_input_tokens": 896
Zweryfikowane: powyższy prefiks został podgrzany przez żądanie Responses z identyczną treścią, a pierwsze wywołanie Messages trafiło na 896 od razu — zgodne z tym, że pamięć podręczna jest kluczowana na prefiks treści i współdzielona między powierzchniami protokołu.

7. logprobs: Chat zwraca dwa kanały

logprobs (logarytmy prawdopodobieństw — szczegóły pewności modelu dla każdego tokena kandydata) wracają w różnych kształtach w dwóch API, a kod analizy musi je obsługiwać osobno.

Chat Completions

completion = client.chat.completions.create(
    model="deepseek-v4-pro-0813",
    messages=[{"role": "user", "content": "Powiedz cześć."}],
    logprobs=True,
    top_logprobs=2,
)

# Obserwowane: choices[0].logprobs zawiera DWA tablice
#   logprobs.content[]            -> tokeny ostatecznej odpowiedzi
#   logprobs.reasoning_content[]  -> tokeny tekstu myślenia
Zweryfikowane: Chat zwraca logarytmy prawdopodobieństw zarówno dla content, jak i reasoning_content. Kod, który odczytuje tylko logprobs.content, zgodnie z standardowym kształtem odpowiedzi OpenAI, nie zgłosi błędu, ale cicho pominie kanał myślenia; jeśli twój kod zakłada pojedynczą tablicę pod logprobs, dodaj najpierw sprawdzenie kształtu.

Responses

response = client.responses.create(
    model="deepseek-v4-pro-0813",
    input="Powiedz cześć.",
    top_logprobs=3,
)

# Obserwowane: logprobs tylko na ostatnim elemencie wiadomości
#   output[-1].content[0].logprobs[] z logprob + szczegóły top_logprobs
Zweryfikowane: Responses dołącza logprobs tylko do ostatniego elementu tekstowego — żaden z podwójnych kanałów nie jest widoczny w Chat.

Messages

Protokół Messages (Anthropic) nie ma odpowiedniego pola. Aby uzyskać szczegóły prawdopodobieństwa na poziomie tokenów, użyj Chat Completions lub Responses.

8. Które API mogą przeszukiwać sieć?

Wyszukiwanie w sieci to narzędzie po stronie serwera (wyszukiwanie odbywa się na serwerze; klient nigdy nie wydaje żądania samodzielnie), a w testach rzeczywiście działa na obu API Responses i Messages.

Responses

response = client.responses.create(
    model="deepseek-v4-pro-0813",
    input="Jaka jest najnowsza stabilna wersja Pythona?",
    tools=[{"type": "web_search"}],
)

# Obserwowane sekwencje elementów wyjściowych:
# ["reasoning", "web_search_call", "reasoning", "message"]
Zweryfikowane: element web_search_call pojawia się w sekwencji wyjściowej, co oznacza, że serwer rzeczywiście przeprowadził wyszukiwanie.

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": "Jaka jest najnowsza stabilna wersja Pythona?"}],
)

# Obserwowane sekwencje bloków treści:
# ["thinking", "server_tool_use", "web_search_tool_result", "thinking", "text"]
# usage.server_tool_use.web_search_requests = 1
Zweryfikowane: usage.server_tool_use.web_search_requests liczy 1 — żądanie wyszukiwania rzeczywiście miało miejsce i zostało zmierzone.

Chat Completions

Wyszukiwanie w sieci nie może być wywołane w Chat. Oficjalna dokumentacja API Chat DeepSeek nie zawiera żadnego pola narzędzia wyszukiwania w schemacie żądania (to jest nieobecność ustalona poprzez przeglądanie listy pól jeden po drugim; DeepSeek nie wydał żadnego wyraźnego oświadczenia zaprzeczającego wsparciu). API z wyraźnym oficjalnym oświadczeniem o wsparciu wyszukiwania po stronie serwera to Responses (web_search), a oficjalna strona zgodności Messages również wymienia związane z wyszukiwaniem bloki treści.

# Trzy grupy kontrolne, to samo pytanie wymagające informacji na żywo, wszystkie HTTP 200:
# A brak pola wyszukiwania       -> "nie można pobrać", adnotacje = null
# B web_search_options    -> "nie można pobrać", adnotacje = null, użycie identyczne jak A
# C enable_search         -> "nie można pobrać", adnotacje = null, użycie identyczne jak A
Zweryfikowane: wysłanie web_search_options lub enable_search nie generuje błędu, ale również nic nie pobiera — odpowiedź nie zawiera annotations (listy cytatów dołączonej do odpowiedzi, gdy wyszukiwanie w sieci działa), a użycie odpowiada grupie kontrolnej pole po polu. Aby uzyskać dostęp do sieci, użyj API Responses lub Messages.

9. Uwagi dotyczące użytkowania: projekt DeepSeek vs odchylenia na naszej ścieżce

Wszystko poniżej zwraca HTTP 200, zachowując się w sposób nieintuicyjny. Przyczyny różnią się, a także to, co powinieneś z nimi zrobić, więc są wymienione osobno: pierwsza grupa to sposób, w jaki DeepSeek zaprojektował model, a zmiana dostawców tego nie zmieni; druga grupa to obecne zachowanie na ścieżce AIHubMix, nad którym pracujemy.

9.1 Zgodnie z projektem DeepSeek

Zachowanie Oficjalne sformułowanie Co robić
Responses nie zachowuje stanu sesji ani metadanych Oficjalna strona zgodności Responses stwierdza, wiersz po wierszu, store | Nieobsługiwane. Odpowiedź zawsze zawiera store: false, metadata | Nieobsługiwane, oraz safety_identifier | Nieobsługiwane (z tych czterech pól tylko user jest obsługiwane). Testy potwierdzają: żądanie zwraca 200, ale metadata jest null, safety_identifier jest nieobecny, a store jest zawsze false Zachowaj dane korelacji żądań po stronie klienta; nie polegaj na zachowaniu po stronie serwera
Parametry próbkowania nie mają wpływu w trybie myślenia DeepSeek wyraźnie stwierdza, że temperature i top_p są cicho nieaktywne w trybie myślenia. W testach oba zwracają 200 bez niczego zwracanego i bez zmiany w kształcie odpowiedzi Nie polegaj na parametrach próbkowania dla stabilności wyjścia w trybie myślenia; użyj ustrukturyzowanego wyjścia, gdy potrzebujesz deterministyczności
Kontynuacja prefiksu / FIM jest tylko na oficjalnym punkcie końcowym beta Oficjalny opis prefix brzmi "(Beta) … Musisz ustawić base_url="https://api.deepseek.com/beta", aby użyć tej funkcji", a uzupełnianie FIM jest również funkcją beta. Zweryfikowane na produkcji AIHubMix: wysłanie prefix: true przeciwko standardowemu punktowi końcowemu zwraca 200, ale prefiks jest cicho odrzucany, co jest zgodne z oficjalnym sformułowaniem Aby uzyskać kontrolowany format wyjścia, użyj ustrukturyzowanego wyjścia (sekcja 5) lub stop przycinania
Równoległe wywoływanie narzędzi nie może być wyłączone Zobacz sekcję 4: DeepSeek stwierdza na obu stronach Responses i Anthropic, że przełącznik jest ignorowany i równoległe wywoływanie jest zawsze włączone Kolejkuj wywołania po stronie klienta, gdy potrzebujesz wykonania szeregowego

9.2 Obecne zachowanie na ścieżce AIHubMix

Zachowanie Co pokazują testy Co robić
Nie-standardowy type w obiektach błędów Responses Typ error.type w odpowiedziach 4xx to Aihubmix_api_error, podczas gdy ta sama klasa błędu w Messages zwraca kanoniczny invalid_request_error Rozgałęź się na kod statusu HTTP, a nie na ciąg error.type
Tokeny myślenia liczone jako 0 w Messages Odpowiedź zawiera blok thinking, a jednak usage.output_tokens_details.thinking_tokens jest zawsze 0, co stoi w sprzeczności z rzeczywistą treścią myślenia; zgodnie z umową Anthropic, z którą integrujemy, to pole jest wymagane i powinno być ≤ output_tokens Do obliczania kosztów myślenia użyj completion_tokens_details.reasoning_tokens w Chat lub output_tokens_details.reasoning_tokens w Responses
Messages powtarza model jako deepseek-v4-pro Żądanie wysyła deepseek-v4-pro-0813, a odpowiedź powtarza deepseek-v4-pro. Przyczyną jest nazewnictwo: jedyną oficjalną nazwą modelu API DeepSeek jest deepseek-v4-pro, a 0813 to jego etykieta wersji Nie traktuj pola model w odpowiedzi jako jedynej podstawy do sprawdzania trasowania modelu lub przypisywania użycia

9.3 Niezdefiniowane przez DeepSeek, więc brak wyroku w obie strony

Wysłanie wartości spoza enum dla reasoning_effort (np. bogus_xyz) zwraca 200 z normalną odpowiedzią, bez błędu i bez widocznego efektu. Fakt jest wystarczająco jasny — ta ścieżka obecnie nie waliduje enum reasoning_effort. To, co jest niejasne, to czy powinno: DeepSeek publikuje legalny enum, ale nigdy nie stwierdza, czy nielegalny poziom powinien być odrzucany, więc nie ma podstawy do oceny, co oznacza, że to nie liczy się ani jako oficjalne zachowanie, ani jako defekt na naszej ścieżce. Bezpieczne podejście po stronie klienta: zwaliduj poziom samodzielnie i nie polegaj na API, aby to wychwyciło.

10. Matryca wsparcia API × możliwości

Komórki poniżej podają parametry / pisownię pól dla każdego API. Z wyjątkiem miejsc, w których zaznaczone jest to jako wyraźne sformułowanie DeepSeek, każda konkluzja pochodzi z rzeczywistych wywołań dokonanych 2026-08-13 przeciwko produkcyjnym API AIHubMix.

Możliwość Chat Completions Responses Messages
Podstawowe instrukcje czatu / systemu messages input + instructions messages + najwyższy poziom system
Streaming stream + stream_options stream (response.createdresponse.completed) stream (message_startmessage_stop)
Sufit wyjścia max_tokens (400, gdy przekroczony, sufit 393216) max_output_tokens max_tokens
Wyłączanie myślenia thinking: {"type": "disabled"} reasoning: {"effort": "none"} thinking: {"type": "disabled"}
Poziom myślenia 🟡 reasoning_effort akceptowane, brak sygnału rozróżniającego reasoning.effort (tylko none potwierdzalne) 🟡 output_config.effort akceptowane, nic nie jest zwracane
Zwracana treść myślenia reasoning_content pole reasoning element wyjściowy thinking blok treści
Obowiązkowe przekazywanie historii myślenia ✅ brak reasoning_content → 400 ✅ brak elementu reasoning → 400 ✅ brak bloku thinking → 400
Wywoływanie narzędzi ✅ zagnieżdżone tools + nazwane tool_choice ✅ płaskie tools input_schema + tool_choice: {"type":"any"}
Wymuszenie wywołania z required ❗ 400, gdy myślenie jest włączone; najpierw wyłącz myślenie ❗ to samo co po lewej {"type": "any"}
Równoległe wywoływanie narzędzi (nie do wyłączenia) ➖ brak takiego pola w oficjalnym API Chat ❗ DeepSeek stwierdza, że parallel_tool_calls jest ignorowane i równoległe wywoływanie jest zawsze włączone ❗ DeepSeek stwierdza, że disable_parallel_tool_use jest ignorowane; testy nadal zwracają dwa bloki tool_use
Ustrukturyzowane wyjście response_format (json_object) text.format (json_schema + strict) ➖ brak pola protokołu; przenieś schemat do narzędzia
Automatyczne pomiar trafień w pamięci podręcznej usage.prompt_tokens_details.cached_tokens usage.input_tokens_details.cached_tokens usage.cache_read_input_tokens
logprobs ❗ podwójny kanał: content + reasoning_content top_logprobs tylko na ostatnim elemencie tekstowym
Wyszukiwanie w sieci ➖ brak pola wyszukiwania w oficjalnym API Chat; wysłanie go również nic nie pobiera tools: [{"type": "web_search"}] web_search_20250305
Sekwencje zatrzymania stop ➖ brak pola sekwencji zatrzymania w protokole (tylko max_output_tokens ogranicza długość) stop_sequences (stop_reason: "stop_sequence")

Legenda: ✅ potwierdzone działanie · 🟡 zaakceptowane, ale nie można potwierdzić skuteczności · ❗ wymaga uwagi (zobacz powyższe uwagi) · ➖ brak takiego pojęcia w tym API

FAQ

Jakie API obsługuje deepseek-v4-pro-0813 na AIHubMix?
Chat Completions (/v1/chat/completions), Responses (/v1/responses) oraz API Messages zgodne z Claude (/v1/messages).

Dlaczego rozmowa wieloetapowa nagle zwraca 400?
Najczęstszą przyczyną jest historia myślenia, która nie została przekazana z powrotem. W trybie myślenia treść myślenia z poprzedniego etapu musi być odtwarzana dosłownie: reasoning_content w wiadomości asystenta dla Chat, element wyjściowy type="reasoning" dla Responses oraz blok treści thinking dla Messages. Wieloetapowe z narzędziami to miejsce, w którym to najbardziej uderza — wiele frameworków filtruje elementy wyjściowe według type == "message" podczas składania historii, co pomija element reasoning.

Czy myślenie można wyłączyć?
Tak. Wyślij thinking: {"type": "disabled"} w Chat lub Messages, a reasoning: {"effort": "none"} w Responses. Gdy jest wyłączone, zarówno treść myślenia, jak i tokeny myślenia znikają.

Czy trzy poziomy reasoning_effort różnią się?
low / high / max są wszystkie akceptowane (domyślnie high; medium i xhigh są mapowane na high dla zgodności). W testach liczby tokenów myślenia dla tego samego pytania nie pokazują monotonicznej różnicy między poziomami i nic nie jest zwracane, więc różnicy nie można potwierdzić z perspektywy wywołującego. Tylko poziom none w Responses (myślenie wyłączone) produkuje wyraźną obserwowalną różnicę.

Dlaczego tool_choice: "required" zwraca 400?
Ta wartość nie jest akceptowana, gdy myślenie jest włączone (treść błędu brzmi Tryb myślenia nie obsługuje tego tool_choice). Użyj nazwanego funkcji tool_choice ({"type": "function", "function": {"name": "..."}}), aby wymusić konkretne wywołanie z włączonym myśleniem, lub najpierw wyłącz myślenie, a następnie użyj required.

Jak włączyć pamięć podręczną kontekstu?
Nie włączasz — jest automatyczna. Umieść stabilną, niezmienną treść (podpowiedzi systemowe, fragmenty wiedzy, definicje narzędzi) na początku żądania, a liczba trafień jest zgłaszana w użyciu: prompt_tokens_details.cached_tokens w Chat, input_tokens_details.cached_tokens w Responses i cache_read_input_tokens w Messages.


Aby uzyskać informacje o cenach i statusie w czasie rzeczywistym, zobacz stronę modelu deepseek-v4-pro-0813; aby uzyskać więcej modeli, odwiedź galerię modeli.

Powiązane przewodniki praktyczne: Przewodnik po Kimi K3 (nowe parametry i matryca wsparcia trzech API) oraz zmiany w pamięci podręcznej podpowiedzi i rozliczenia GPT-5.6.