Migracja do DeepSeek V4.1 Flash 1017: błąd 400 przy reasoning_content, ciche podmienienie aliasu i rozliczanie w godzinach szczytu

AIHubMix9 min czytania
Migracja do DeepSeek V4.1 Flash 1017: błąd 400 przy reasoning_content, ciche podmienienie aliasu i rozliczanie w godzinach szczytu

Większość migracji zaczyna się od zmiany nazwy modelu. DeepSeek V4.1 Flash 1017 zrobił to odwrotnie: 17 października 2026 r. DeepSeek zachował nazwę deepseek-flash i zmienił model, który się za nią kryje. Każdy, kto wywoływał deepseek-flash, deepseek-v4-flash lub deepseek-v4-flash-vision-exp w API DeepSeek, został przeniesiony na nowy model bez zmiany ani jednej linijki kodu.

W AIHubMix nowy checkpoint ma własny identyfikator, deepseek-v4.1-flash-1017, więc sam decydujesz, kiedy przejść. Tak czy inaczej, oto problemy, które warto sprawdzić:

Problem Skutek Gdzie to zauważysz
Niewysłane reasoning_content Głośno Błąd 400 po pierwszym wywołaniu narzędzia
Zmieniony model pod tą samą nazwą Cicho Długość wyjścia, formaty, wyniki ewaluacji
Ceny w godzinach szczytu Cicho Rachunek podwaja się w szczycie w dni robocze
Effort domyślnie ustawiony na max Cicho Uruchomienia agentów trwają 1.6–1.8x dłużej
Myślenie wlicza się do max_tokens Oba Obcięte odpowiedzi
Rozliczanie Search i Fetch Cicho Od 31 października, 16:00 UTC

AIHubMix uruchomił krótki zestaw testowych żądań do deepseek-v4.1-flash-1017 19 października 2026 r. (03:02 UTC). Wyniki z tego przebiegu są poniżej oznaczone jako takie.

1. Błąd 400, który psuje pętle narzędzi

Co zobaczysz. Drugie żądanie po wywołaniu narzędzia kończy się błędem HTTP 400 z tym komunikatem, zgłoszonym w issue na GitHubie dla opencodex dotyczącym V4.1 Flash 15 października:

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

Ten sam tekst pojawia się we wcześniejszych zgłoszeniach dotyczących opencode, LangChain i claude-code-router dla V4 Pro i V4 Flash.

Dlaczego. Przewodnik po trybie myślenia DeepSeek mówi, że gdy żądanie zawiera tools, trzeba odesłać reasoning_content każdej wcześniejszej tury asystenta, „nawet w turach, w których model nie wykonał wywołania narzędzia”. Jeśli tego nie zrobisz, „API zwróci błąd 400”. Bez narzędzi odsyłanie tego pola jest opcjonalne i ignorowane. Klienty zwykle na tym się potykają, ponieważ ich serializator wiadomości zachowuje content i tool_calls, ale gubi dodatkowe pole.

Żądanie, które to wywołuje. Druga tura pętli narzędzi, z wiadomością asystenta pozbawioną reasoning_content:

curl -s https://aihubmix.com/v1/chat/completions \
  -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4.1-flash-1017",
    "tools": [{"type": "function", "function": {"name": "get_weather",
      "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]}}}],
    "messages": [
      {"role": "user", "content": "What is the temperature in Hangzhou? Use the tool."},
      {"role": "assistant", "content": null, "tool_calls": [{"id": "call_00_example", "type": "function",
        "function": {"name": "get_weather", "arguments": "{\"city\": \"Hangzhou\"}"}}]},
      {"role": "tool", "tool_call_id": "call_00_example", "content": "{\"celsius\": 18}"}
    ]
  }'

W API DeepSeek ten kształt żądania zwraca błąd 400 opisany w publicznych zgłoszeniach. Przez AIHubMix ten sam kształt zwrócił HTTP 200 i normalną odpowiedź w przebiegu testowym z 19 października. Był to jeden przebieg, więc nie traktuj tego jako gwarancji.

Jak to naprawić. Zachowaj to pole, niezależnie od drogi, którą idziesz:

msg = resp.choices[0].message
messages.append(msg)  # carries content, reasoning_content, and tool_calls over
  • W swoim kodzie dołączaj całą wiadomość asystenta, a nie ręcznie odtworzoną kopię.
  • We frameworkach zaktualizuj: opencode naprawił obieg tego pola w nowszych wydaniach, a opencodex scalił poprawkę 16 października.
  • Jako ostatnią deskę ratunku ustaw {"thinking": {"type": "disabled"}} dla pętli narzędzi. To usuwa błąd, ale rezygnuje z rozumowania, dzięki któremu model dobrze radzi sobie z pracą agentów.

2. Ta sama nazwa, inny model

Changelog DeepSeek z 17 października mówi wprost: „Sposób wywoływania API i cennik pozostają bez zmian — wystarczy użyć deepseek-flash, aby uzyskać dostęp do najnowszego modelu”. Nie ma przypiętej nazwy dla checkpointu z września, a dwie starsze nazwy Flash również działają teraz na 1017.

Nic nie wyrzuca błędu, ale mogą zmienić się trzy rzeczy:

  • Długość wyjścia. Model 1017 został wytrenowany tak, by tworzyć krótsze odpowiedzi. Parsery, układy interfejsu i prompty, które oczekiwały długich wyjaśnień z modelu z września, mogą dostać mniej tekstu niż wcześniej.
  • Punkty odniesienia ewaluacji. Wyniki i koszty zapisane dla checkpointu z września nie opisują już tego, co zwraca deepseek-flash.
  • Zachowanie. DeepSeek przetrenował 1017 pod kątem pracy nad całymi projektami od początku do końca. Agenci mogą iść różnymi ścieżkami do tego samego wyniku.

Co zrobić. Zapisuj model i datę przy każdym przebiegu ewaluacji i uruchom teraz swój zestaw testów regresji. Odpowiedź mówi, który checkpoint odpowiedział: w teście z 19 października każda odpowiedź przez AIHubMix zawierała "model": "deepseek-v4-1-flash-261017". Loguj to pole, a nieogłoszona podmiana stanie się widoczna w dniu, w którym nastąpi.

3. Zasady rozliczeń, które łatwo przeoczyć

Szczyt i poza szczytem. DeepSeek pobiera pełną cenę w dni robocze w godzinach 01:00–04:00 i 06:00–10:00 UTC, a w każdej innej godzinie, przez cały weekend i w chińskie święta państwowe, połowę ceny. AIHubMix stosuje te same okna i wycenia każde żądanie w momencie jego wysłania, więc długie żądanie strumieniowe, które zaczyna się poza szczytem, pozostaje poza szczytem.

Pozycja Szczyt Poza szczytem
Wejście, chybienie w cache $0.3098 $0.155
Wejście, trafienie w cache $0.0062 $0.0031
Wyjście $1.2392 $0.62

Ceny katalogowe AIHubMix za 1M tokenów dla deepseek-v4.1-flash-1017. Dodatkowo obowiązuje ograniczona w czasie zniżka 30%.

Trafienia w cache są 50 razy tańsze niż chybienia. Agenci wysyłają ponownie ten sam prompt systemowy, definicje narzędzi i historię przy każdym wywołaniu. Utrzymuj stabilny prefiks, a wszystko, co zmienia się przy każdym wywołaniu, umieszczaj na końcu. Wtedy większość każdego żądania rozliczy się po stawce za trafienie w cache.

Myślenie jest rozliczane jak wyjście. Myślenie jest domyślnie włączone, a tokeny rozumowania wliczają się zarówno do rachunku, jak i do max_tokens.

Search i Fetch. DeepSeek uruchomił 17 października nowe API Search i Fetch po 0,75 $ za 1000 udanych wywołań każde. Wywołania po stronie serwera wykonywane przez DeepSeek Harness, Claude Code lub Codex w API DeepSeek są bezpłatne do 31 października 2026 r., 16:00 UTC. Potem agent, który wyszukuje przy każdej turze, dolicza koszt za wywołanie do kosztu tokenów.

Ile to wychodzi. Przy przyjętych założeniach (40 wywołań, 1.2M tokenów wejścia z 90% trafień w cache, 60K tokenów wyjścia) jedna sesja agenta kosztuje 0,118 $ w szczycie i 0,059 $ poza szczytem, według cen katalogowych AIHubMix. Przeniesienie zadań wsadowych poza szczyt to najbardziej znacząca oszczędność.

4. Ustawienia, które kosztują więcej, niż dają

Effort. API oferuje low, high (domyślnie) i max. Artykuł o V4.1 Flash od DeepSeek mapuje je na wewnętrzne wartości effort 50, 75 i 100 i podaje, że przejście na max „wydłuża trajektorie agentów o 1.6–1.8× przy tylko marginalnych usprawnieniach”. Przewodnik DeepSeek po konfiguracji Claude Code nadal ustawia CLAUDE_CODE_EFFORT_LEVEL=max. Do codziennej pracy agentów lepszym domyślnym wyborem jest high.

DeepSeek mapuje też inne nazwy effort na swoje trzy poziomy: minimal staje się low, a medium i xhigh stają się high. Narzędzie oferujące pięć poziomów faktycznie daje dwa lub trzy. W teście z 19 października AIHubMix przyjął low, high i max w Chat Completions.

max_tokens. Model card zaleca co najmniej 256K dla długich przebiegów agentów, ponieważ myślenie dzieli budżet wyjścia. Przy małym limicie trudny krok może zużyć cały budżet na myślenie. Sprawdzaj finish_reason: "length".

Parametry próbkowania. W trybie myślenia temperature, presence_penalty i frequency_penalty są akceptowane bez błędu i nie mają wpływu. top_p jest ograniczone do zakresu 0.95–1.0. Jeśli pipeline polegał na niskiej temperaturze dla deterministycznego wyjścia, teraz już jej nie otrzymuje.

5. Agenci z realnymi uprawnieniami

Model 1017 został wytrenowany uczeniem ze wzmocnieniem na całych projektach, więc ma tendencję do dalszej pracy, dopóki zadanie nie wygląda na skończone. Jego odpowiedzi są też krótsze, co oznacza mniej opisu tego, co zmienił. Pomagają dwa nawyki:

  • Sprawdzaj diffy i logi poleceń, a nie podsumowanie modelu.
  • Uruchamiaj go w sandboksie z listą dozwolonych poleceń i wymagaj zatwierdzenia dla wszystkiego, co destrukcyjne (usuwanie, force push, migracje, wychodzące połączenia sieciowe).

Sam DeepSeek podkreśla mocną stronę linii Flash w zadaniach związanych z bezpieczeństwem; checkpoint z września uzyskał 88.1 w CyberGym w tabeli DeepSeek. To przydatne w pracy defensywnej i kolejny powód, by ściśle ograniczać jego uprawnienia.

6. Narzędzia do kodowania

AIHubMix udostępnia deepseek-v4.1-flash-1017 we wszystkich trzech protokołach, których potrzebują narzędzia do kodowania. W teście z 19 października Chat Completions, Anthropic Messages (w tym dwuturowe wywołanie narzędzia) i Responses API zwróciły wszystkie 200.

Claude Code (Anthropic Messages). Skieruj go na AIHubMix zgodnie z przewodnikiem po Claude Code i ustaw model:

export ANTHROPIC_BASE_URL="https://aihubmix.com"
export ANTHROPIC_AUTH_TOKEN="$AIHUBMIX_API_KEY"
export ANTHROPIC_MODEL="deepseek-v4.1-flash-1017"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="deepseek-v4.1-flash-1017"
export CLAUDE_CODE_SUBAGENT_MODEL="deepseek-v4.1-flash-1017"
export CLAUDE_CODE_EFFORT_LEVEL="high"
  • Myślenie: w teście żądanie Messages bez ustawienia effort nie zwróciło bloku thinking, natomiast żądanie z output_config.effort zwróciło myślenie. Ustaw jakiś poziom effort, aby 1017 rozumował, i sprawdzaj logi żądań.
  • Kontekst: przewodnik DeepSeek dodaje do nazwy modelu przyrostek [1m] dla własnego endpointu; ten przyrostek nie był testowany przez AIHubMix.
  • Znany problem: przez niektóre routery Claude Code gubił treść thinking i trafiał na wspomniany wyżej błąd 400 (issue 1378 w claude-code-router). Dwuturowy test wywołania narzędzia przez endpoint Messages AIHubMix tego nie wywołał.

Codex (Responses API). Postępuj zgodnie z przewodnikiem Codex CLI: dostawca aihubmix z base_url = "https://aihubmix.com/v1" i wire_api = "responses" oraz model = "deepseek-v4.1-flash-1017". Aby wybrać go z /model, dodaj go do pliku model_catalog_json z context_window ustawionym na 1,000,000.

  • Effort: skrypt generujący katalog z przewodnika oferuje low, medium i high. Według mapowania DeepSeek medium i high trafiają oba na high DeepSeek, więc realnych poziomów są dwa.
  • Znany problem: nowsze wersje Codex odrzucają cały katalog, jeśli brakuje jednego wymaganego pola. Skrypt z przewodnika tego unika.

DeepSeek Harness (Chat Completions). DeepSeek podaje, że 1017 działa najlepiej z Harness 0.2.1-rc.1 lub nowszym. Dodaj AIHubMix jako dostawcę zgodnego z OpenAI według przewodnika po DeepSeek Harness i dodaj deepseek-v4.1-flash-1017 jako model. Przewodnik został napisany dla wcześniejszego wydania Harness, więc jeśli interfejs się zmienił, sprawdź nazwy pól.

15-minutowy test dymny. Utwórz mały repozytorium z jednym nieudanym testem:

mkdir flash-smoke && cd flash-smoke && git init -q
printf 'def mean(xs):\n    return sum(xs) / len(xs)\n' > stats.py
printf 'from stats import mean\n\ndef test_mean():\n    assert mean([1, 2, 3]) == 2\n\ndef test_empty():\n    assert mean([]) == 0\n' > test_stats.py

Uruchom narzędzie w tym folderze i zapytaj: „Uruchom pytest, napraw niezaliczony test, zmieniając wyłącznie stats.py, a potem uruchom pytest ponownie.” Test jest zaliczony, jeśli:

  • agent wykona co najmniej dwa wywołania narzędzi (uruchomienie testów, edycja pliku) bez błędu 400;
  • na końcu oba testy przechodzą;
  • w logu żądań AIHubMix widać deepseek-v4.1-flash-1017, a koszt sesji wynosi co najwyżej kilka centów.

Lista kontrolna migracji

  • Ustal identyfikator modelu: deepseek-v4.1-flash-1017 w AIHubMix.
  • W pętlach narzędzi dołączaj całe wiadomości asystenta, aby reasoning_content wracało w każdej turze.
  • Uruchom ponownie zestaw testów regresji i ewaluacji; zapisuj model, datę i pole response model.
  • Sprawdź parsery i interfejsy pod kątem krótszych odpowiedzi.
  • Ustaw effort na high jako domyślny; max zostaw na najtrudniejsze zadania.
  • Zwiększ max_tokens dla tur agentów i ustaw alert na finish_reason length.
  • Usuń założenia o deterministyczności opartej na temperature w trybie thinking.
  • Planuj uruchamianie wsadowych i nocnych zadań agentów poza godzinami szczytu.
  • Utrzymuj stabilne prefiksy promptów, aby trafiać w cache.
  • Zaplanuj budżet na wywołania Search i Fetch od 31 października, jeśli korzystasz z narzędzi serwerowych DeepSeek.
  • Uruchamiaj agentów w piaskownicy z realnymi uprawnieniami i sprawdzaj różnice w kodzie, a nie tylko podsumowania.
  • Uruchom 15-minutowy test dymny w każdym używanym narzędziu do kodowania.

Najczęstsze pytania

Czy muszę zmienić kod, aby używać DeepSeek V4.1 Flash 1017?
W API DeepSeek nie: deepseek-flash już wskazuje na 1017. W AIHubMix zmień nazwę modelu na deepseek-v4.1-flash-1017.

Dlaczego dostaję błąd 400 dotyczący reasoning_content?
DeepSeek wymaga, aby przy żądaniu zawierającym narzędzia odsyłać reasoning_content każdej wcześniejszej wiadomości asystenta. Klienci, którzy pomijają to pole, zawodzą przy wywołaniu następującym po pierwszym wywołaniu narzędzia.

Czy błąd 400 dotyczący reasoning_content występuje przez AIHubMix?
Nie wystąpił w teście AIHubMix z 19 października 2026 roku, gdzie tura bez reasoning_content zwróciła 200. Mimo to nadal wysyłaj to pole, ponieważ jest to udokumentowana zasada DeepSeek.

Czy nadal mogę używać wersji V4.1 Flash z września w API DeepSeek?
Nie. DeepSeek przeniósł deepseek-flash i starsze nazwy Flash na 1017 i nie oferuje przypiętej nazwy dla punktu kontrolnego z września.

Kiedy DeepSeek V4.1 Flash jest tańszy?
Poza godzinami 01:00–04:00 i 06:00–10:00 UTC w dni robocze. Każda inna godzina, weekendy i chińskie święta państwowe kosztują o połowę mniej.

Którego poziomu effort powinni używać agenci kodujący?
High, czyli domyślnego. Według własnej publikacji DeepSeek tryb max wydłuża działanie agentów 1,6–1,8 raza, przynosząc przy tym niewielkie zyski.

Czy 1017 działa w Claude Code i Codex przez AIHubMix?
Tak. AIHubMix udostępnia go w protokołach Anthropic Messages i Responses, z których korzystają te narzędzia, a oba przeszły podstawowy test 19 października 2026 roku.

Czytaj dalej: seria DeepSeek V4.1 Flash 1017

Źródła