Миграция към DeepSeek V4.1 Flash 1017: грешката 400 с reasoning_content, тихата подмяна на псевдонима и таксуване при пиково натоварване

AIHubMix9 мин четене
Миграция към DeepSeek V4.1 Flash 1017: грешката 400 с reasoning_content, тихата подмяна на псевдонима и таксуване при пиково натоварване

Повечето миграции започват със смяна на името на модела. DeepSeek V4.1 Flash 1017 беше направен обратното: на 17 октомври 2026 г. DeepSeek запази името deepseek-flash и смени модела зад него. Всеки, който извиква deepseek-flash, deepseek-v4-flash или deepseek-v4-flash-vision-exp в API на DeepSeek, беше прехвърлен без да се променя нито ред код.

В AIHubMix новата контролна точка има собствен идентификатор, deepseek-v4.1-flash-1017, така че сами избирате кога да преминете. Във всеки случай ето проблемите, които трябва да проверите:

Проблем Какво се счупва Къде се забелязва
reasoning_content не се изпраща обратно Шумно 400 след първото извикване на инструмент
Модел, сменен под същото име Тихо Дължина на изхода, формати, оценки от тестове
Ценообразуване при пиково натоварване Тихо Сметката се удвоява в пиковите часове през делнични дни
Усилие, зададено по подразбиране на max Тихо Работата на агента е 1,6–1,8 пъти по-дълга
Размислите се броят към max_tokens И двете Отрязани отговори
Таксуване на Search и Fetch Тихо От 31 октомври, 16:00 UTC

AIHubMix изпълни кратък набор от тестови заявки към deepseek-v4.1-flash-1017 на 19 октомври 2026 г. (03:02 UTC). Резултатите от този пробен тест са отбелязани като такива по-долу.

1. Грешката 400, която чупи циклите с инструменти

Какво ще видите. Втората заявка след извикване на инструмент се проваля с HTTP 400 и това съобщение, както е докладвано в GitHub issue към opencodex за V4.1 Flash на 15 октомври:

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

Същият текст се среща и в по-ранни доклади за opencode, LangChain и claude-code-router при V4 Pro и V4 Flash.

Защо. В ръководството за режим на разсъждение на DeepSeek се казва, че когато заявката включва tools, reasoning_content на всеки предишен ход на асистента трябва да се изпрати обратно, „дори за ходове, в които моделът не е извикал инструмент“. Ако не се изпрати, „API ще върне грешка 400“. Без инструменти изпращането му е по избор и се игнорира. Клиентите обикновено се препъват, защото техният сериализатор на съобщения запазва content и tool_calls, но отпада допълнителното поле.

Заявката, която го предизвиква. Втори ход в цикъл с инструменти, при който съобщението на асистента е лишено от 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}"}
    ]
  }'

В собствения API на DeepSeek това е формата, която връща грешката 400 в публичните доклади. През AIHubMix същата форма върна HTTP 200 и нормален отговор в пробния тест от 19 октомври. Това беше един тест, така че не разчитайте на него като на гаранция.

Как да поправите. Запазете полето, независимо от маршрута, който използвате:

msg = resp.choices[0].message
messages.append(msg)  # carries content, reasoning_content, and tool_calls over
  • В собствения си код добавяйте цялото съобщение на асистента, а не ръчно изграден негов препис.
  • Във фреймуърците обновете версията: opencode поправи цикъла в по-нови издания, а opencodex включи корекцията си на 16 октомври.
  • Като крайна мярка задайте {"thinking": {"type": "disabled"}} за циклите с инструменти. Това премахва грешката, но се отказвате от разсъжденията, които правят модела добър в агентната работа.

2. Същото име, различен модел

Промените на DeepSeek от 17 октомври го казват ясно: „Методът на извикване на API и цената остават непроменени – просто използвайте deepseek-flash, за да достъпите най-новия модел.“ Няма фиксирано име за септемврийската контролна точка, а двете по-стари имена на Flash вече работят и с 1017.

Нищо не дава грешка, но три неща могат да се променят:

  • Дължина на изхода. 1017 е обучен да генерира по-кратки изходи. Парсери, UI оформления и промпти, които очакват дългите обяснения на септемврийския модел, може да получават по-малко текст от преди.
  • Базови оценки. Резултатите и разходите, които сте записали за септемврийската контролна точка, вече не описват какво връща deepseek-flash.
  • Поведение. DeepSeek преобучи 1017 за цялостна работа по проекти от край до край. Агентите може да поемат различни пътища към същия резултат.

Какво да направите. Записвайте модела и датата при всяко изпълнение на оценка и пуснете отново регресионния си набор още сега. Отговорът показва кой вариант е отговорил: в пробния тест от 19 октомври всеки отговор през AIHubMix съдържаше "model": "deepseek-v4-1-flash-261017". Записвайте това поле и необявената смяна ще става видима в деня, в който се случи.

3. Правила за таксуване, които лесно се пропускат

Пикови и извънпикови часове. DeepSeek начислява пълна цена от 01:00 до 04:00 и от 06:00 до 10:00 UTC през делнични дни, а половин цена през всички останали часове, през цялата събота и неделя и на китайските национални празници. AIHubMix следва същите интервали и тарифира всяка заявка според момента, в който е изпратена, така че дълга поточна заявка, започнала извън пиковите часове, остава извън тях.

Позиция Пикови Извънпикови
Вход, без попадение в кеша $0.3098 $0.155
Вход, попадение в кеша $0.0062 $0.0031
Изход $1.2392 $0.62

Ориентировъчни списъчни цени на AIHubMix за 1M токена за deepseek-v4.1-flash-1017. Върху тях е в сила временна отстъпка от 30%.

Попаденията в кеша са 50 пъти по-евтини от промахванията. Агентите изпращат отново един и същ системен промпт, дефиниции на инструменти и история при всяко извикване. Пазете този префикс стабилен, поставяйте всичко, което се променя при всяко извикване, в края и по-голямата част от всяка заявка ще се таксува по цената за попадение в кеша.

Разсъжденията се таксуват като изход. Режимът на разсъждение е включен по подразбиране, а токените за разсъждение се броят както към сметката, така и към max_tokens.

Search и Fetch. DeepSeek откри новите си API за Search и Fetch на 17 октомври на цена 0,75 USD за 1000 успешни извиквания на всеки от тях. Извикванията от страна на сървъра, направени през DeepSeek Harness, Claude Code или Codex в API на DeepSeek, са безплатни до 31 октомври 2026 г., 16:00 UTC. След това агент, който търси при всеки ход, добавя цена за всяко извикване към таксата за токените.

Колко се получава. При посочените допускания (40 извиквания, 1,2M входни токена с 90% попадения в кеша, 60K изходни токена) една сесия на агент струва 0,118 USD в пиковите часове и 0,059 USD извън тях по списъчните цени на AIHubMix. Преместването на пакетните изпълнения извън пиковите часове е най-голямата единична икономия.

4. Настройки, които струват повече, отколкото носят

Усилие. API предлага low, high (по подразбиране) и max. Документът за V4.1 Flash на DeepSeek ги съпоставя с вътрешни стойности на усилието 50, 75 и 100 и отчита, че преходът към max „удължава траекториите на агентите с 1,6–1,8×, за само маргинални подобрения“. Собственото ръководство на DeepSeek за настройка на Claude Code все още задава CLAUDE_CODE_EFFORT_LEVEL=max. За ежедневна агентна работа high е по-добрият избор по подразбиране.

DeepSeek съпоставя и други имена на усилие към своите три нива: minimal става low, а medium и xhigh стават high. Инструмент, който предлага пет нива, всъщност ви дава две или три. В пробния тест от 19 октомври AIHubMix прие low, high и max през Chat Completions.

max_tokens. Картата на модела препоръчва поне 256K за дълги агентни изпълнения, защото разсъжденията споделят бюджета за изход. При малък лимит една трудна стъпка може да изразходва целия бюджет за разсъждения. Проверявайте за finish_reason: "length".

Параметри на семплирането. В режим на разсъждение temperature, presence_penalty и frequency_penalty се приемат без грешка и нямат ефект. top_p се ограничава в интервала 0,95–1,0. Ако някой конвейер е разчитал на ниска temperature за детерминиран изход, вече няма да я получава.

5. Агенти с реални права

1017 е обучен с подсилено обучение върху цели проекти, затова има склонност да продължава да работи, докато задачата не изглежда завършена. Отговорите му са и по-кратки, което означава по-малко описание на направените промени. Две навици помагат:

  • Преглеждайте разликите (diff) и журналите на командите, а не резюмето на модела за тях.
  • Пускайте го в sandbox със списък с позволени команди и изисквайте одобрение за всичко деструктивно (изтривания, force push, миграции, изходящи мрежови заявки).

Самият DeepSeek отбелязва силната страна на линията Flash при задачи, свързани със сигурността; септемврийската контролна точка получи 88,1 в CyberGym според собствената таблица на DeepSeek. Това е полезно за защитна работа и още една причина да ограничавате правата му строго.

6. Инструменти за програмиране

AIHubMix предоставя deepseek-v4.1-flash-1017 по трите протокола, от които се нуждаят инструментите за програмиране. В пробния тест от 19 октомври Chat Completions, Anthropic Messages (включително двуходово извикване на инструмент) и Responses API върнаха всички 200.

Claude Code (Anthropic Messages). Насочете го към AIHubMix, както е описано в ръководството за Claude Code, и задайте модела:

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"
  • Разсъждения: в теста заявка Messages без настройка на усилието се върна без блок с разсъждения, докато заявка с output_config.effort върна разсъждения. Задавайте ниво на усилие, за да разсъждава 1017, и проверявайте журналите на заявките.
  • Контекст: ръководството на DeepSeek добавя наставката [1m] към името на модела за собствената му крайна точка; тази наставка не е тествана през AIHubMix.
  • Известен проблем: през някои рутери Claude Code е губел съдържанието на разсъжденията и е получавал горната грешка 400 (claude-code-router, issue 1378). Двуходовият тест с инструменти през крайната точка Messages на AIHubMix не я предизвика.

Codex (Responses API). Следвайте ръководството за Codex CLI: доставчик aihubmix с base_url = "https://aihubmix.com/v1" и wire_api = "responses", както и model = "deepseek-v4.1-flash-1017". За да го избирате от /model, добавете го във файл model_catalog_json с context_window, зададен на 1,000,000.

  • Усилие: скриптът за каталога в ръководството предлага low, medium и high. Според съпоставянето на DeepSeek medium и high се свеждат до high на DeepSeek, така че реално получавате две нива.
  • Известен проблем: по-новите версии на Codex отхвърлят целия каталог, ако липсва едно задължително поле. Скриптът от ръководството това избягва.

DeepSeek Harness (Chat Completions). DeepSeek казва, че 1017 работи най-добре с Harness 0.2.1-rc.1 или по-нов. Добавете AIHubMix като доставчик, съвместим с OpenAI, по ръководството за DeepSeek Harness и добавете deepseek-v4.1-flash-1017 като модел. Ръководството е написано за по-ранно издание на Harness, така че проверете имената на полетата, ако интерфейсът е променен.

15-минутен проверочен тест. Създайте малко хранилище с един неуспешен тест:

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

Стартирайте инструмента в тази папка и поискайте: „Пусни pytest, поправи неуспешния тест, като промениш само stats.py, и после пусни pytest отново.“ Тестът се смята за успешен, ако:

  • агентът направи поне две извиквания на инструменти (пускане на тестовете, редакция на файла) без грешка 400;
  • и двата теста минават в края.
  • журналът на заявките в AIHubMix показва deepseek-v4.1-flash-1017, а цената на сесията е в най-добрия случай няколко цента.

Контролен списък за миграция

  • Определете идентификатора на модела: deepseek-v4.1-flash-1017 в AIHubMix.
  • Добавяйте цели съобщения на асистента в циклите с инструменти, така че reasoning_content да се връща при всеки ход.
  • Пуснете отново вашия набор за регресия и оценка; записвайте модела, датата и полето response model.
  • Проверете парсърите и интерфейсите за по-кратки изходи.
  • Задайте effort на high по подразбиране; запазвайте max за най-трудните задачи.
  • Увеличете max_tokens за ходовете на агентите и настройте известие при finish_reason length.
  • Премахнете предположенията за детерминизъм, основани на temperature, в режим на разсъждение.
  • Планирайте пакетните и нощните агентни задачи извън пиковите часове.
  • Поддържайте стабилни префикси на промптовете, за да има попадения в кеша.
  • Планирайте бюджета за извикванията на Search и Fetch от 31 октомври, ако използвате сървърните инструменти на DeepSeek.
  • Изпълнявайте агентите в песочница с реални права и преглеждайте разликите, а не обобщенията.
  • Изпълнете 15-минутния тест за работоспособност във всеки инструмент за кодиране, който използвате.

Често задавани въпроси

Трябва ли да променя кода, за да използвам DeepSeek V4.1 Flash 1017?
В API на DeepSeek – не: deepseek-flash вече сочи към 1017. В AIHubMix сменете името на модела на deepseek-v4.1-flash-1017.

Защо получавам грешка 400 за reasoning_content?
DeepSeek изисква reasoning_content на всеки предишен ход на асистента да се изпраща обратно, когато заявката съдържа инструменти. Клиентите, които пропускат това поле, се провалят при извикването след първия инструмент.

Случва ли се грешката 400 за reasoning_content през AIHubMix?
Не се случи в тестовото изпълнение на AIHubMix от 19 октомври 2026 г., където ход без reasoning_content върна 200. Въпреки това продължавайте да изпращате полето, тъй като това е документираното правило на DeepSeek.

Мога ли все още да използвам септемврийския V4.1 Flash в API на DeepSeek?
Не. DeepSeek премести deepseek-flash и по-старите имена на Flash към 1017 и не предлага фиксирано име за септемврийната версия.

Кога DeepSeek V4.1 Flash е по-евтин?
Извън 01:00 – 04:00 и 06:00 – 10:00 UTC в делничните дни. Всеки друг час, през уикендите и по китайските официални празници цената е наполовина.

Какво ниво на effort трябва да използват агентите за кодиране?
High, което е по подразбиране. Собствената статия на DeepSeek посочва, че max удължава агентните изпълнения 1,6 до 1,8 пъти за малки подобрения.

Работи ли 1017 в Claude Code и Codex през AIHubMix?
Да. AIHubMix го предоставя по протоколите Anthropic Messages и Responses, които използват тези инструменти, и двата минаха основен тест на 19 октомври 2026 г.

Продължете да четете: серията DeepSeek V4.1 Flash 1017

Източници