DeepSeek V4.1 Flash 1017への移行:reasoning_content の400エラー、サイレントなエイリアス切り替え、ピーク時間帯の課金

AIHubMix約 9 分で読めます
DeepSeek V4.1 Flash 1017への移行:reasoning_content の400エラー、サイレントなエイリアス切り替え、ピーク時間帯の課金

多くの移行は、モデル名を変えることから始まります。しかしDeepSeek V4.1 Flash 1017は逆の順序で行われました。2026年10月17日、DeepSeekはモデル名deepseek-flashを維持したまま、その背後のモデルを変更しました。DeepSeekのAPIでdeepseek-flash、deepseek-v4-flash、deepseek-v4-flash-vision-expを呼び出していた人は、コードを1行も変更せずに新モデルへ移行されました。

AIHubMixでは、新しいチェックポイントは独自のIDdeepseek-v4.1-flash-1017を持つため、移行するタイミングを選べます。いずれの場合も、確認すべき問題は次のとおりです。

問題 失敗の仕方 気づく場面
reasoning_content が送り返されていない 明示的 最初のツール呼び出しの後に400エラー
同じ名前のままモデルが切り替わる 静かに 出力の長さ、フォーマット、評価スコア
ピーク時間帯の料金 静かに 平日のピーク時間帯に請求額が2倍になる
Effortがデフォルトでmaxに設定される 静かに エージェントの実行時間が1.6〜1.8倍長くなる
思考がmax_tokensに含まれる 両方 回答が途切れる
Search と Fetch の課金 静かに 10月31日 16:00 UTC以降

AIHubMixは2026年10月19日(03:02 UTC)にdeepseek-v4.1-flash-1017に対して短いテストリクエストのセットを実行しました。その実行の結果は、以下でそのように示しています。

1. ツールループを壊す400エラー

表示される内容。 ツール呼び出しの後の2回目のリクエストは、HTTP 400とともに次のメッセージで失敗します。これは10月15日、V4.1 Flash向けのopencodexに対するGitHubのissueで報告されたものです。

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

同じテキストは、V4 ProおよびV4 Flash向けのopencode、LangChain、claude-code-routerに関する以前の報告にも現れています。

原因。 DeepSeekのthinking modeガイドによると、リクエストにtoolsが含まれる場合、それ以前のすべてのassistantのターンのreasoning_contentを送り返す必要があります。これは「モデルがツール呼び出しを行わなかったターンであっても」適用されます。送り返さない場合、「APIは400エラーを返します」。ツールを含まない場合、送り返すことは任意であり無視されます。クライアントがこれに引っかかるのは、メッセージのシリアライザーがcontentとtool_callsを保持する一方で、余分なフィールドを削除してしまうことが多いためです。

エラーを引き起こすリクエスト。 ツールループの2ターン目で、assistantのメッセージから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}"}
    ]
  }'

DeepSeekの公式APIでは、公開されている報告で400エラーを返すのはこの形式です。AIHubMix経由では、同じ形式が10月19日のテスト実行でHTTP 200と通常の回答を返しました。これは1回の実行結果にすぎないため、保証としては扱わないでください。

修正方法。 どの経路を使う場合でも、そのフィールドを保持してください。

msg = resp.choices[0].message
messages.append(msg)  # carries content, reasoning_content, and tool_calls over
  • 自分のコードでは、手作業で作り直したコピーではなく、assistantのメッセージ全体を追加してください。
  • フレームワークでは、アップグレードしてください。opencodeは後のリリースで往復処理を修正し、opencodexは10月16日に修正をマージしました。
  • 最後の手段として、ツールループでは{"thinking": {"type": "disabled"}}を設定できます。これでエラーは回避できますが、モデルをエージェント作業に強くしている推論も失われます。

2. 同じ名前、別のモデル

DeepSeekの10月17日の変更履歴は、この点を明確に述べています。「APIの呼び出し方法と料金は変わりません。最新モデルを使うにはdeepseek-flashを指定するだけです。」9月のチェックポイントを指す固定名はなく、古い2つのFlash名も現在は1017で動作しています。

エラーは発生しませんが、次の3点が変化する可能性があります。

  • 出力の長さ。 1017は、より短い出力を生成するように学習されています。9月のモデルの長い説明を前提としたパーサー、UIレイアウト、プロンプトは、以前より少ないテキストしか得られない可能性があります。
  • 評価の基準値。 9月のチェックポイントで記録したスコアやコストは、deepseek-flashが返すものを表していません。
  • 動作。 DeepSeekは1017をエンドツーエンドのプロジェクト作業向けに再学習させました。エージェントは同じ結果に至るまでに異なる経路をたどる可能性があります。

対応方法。 評価を実行するたびにモデルと日付を記録し、今すぐ回帰テストセットを再実行してください。レスポンスには、どのチェックポイントが応答したかが示されます。10月19日のテストでは、AIHubMix経由のすべてのレスポンスに"model": "deepseek-v4-1-flash-261017"が含まれていました。このフィールドをログに記録しておけば、告知のないモデル切り替えが起きた日に、それを把握できます。

3. 見落としやすい課金ルール

ピーク時間帯とオフピーク時間帯。 DeepSeekは、平日の01:00〜04:00 UTCと06:00〜10:00 UTCは通常料金を請求し、それ以外の時間、週末全体、中国の祝日は半額で請求します。AIHubMixも同じ時間帯に従い、各リクエストは送信された時点の料金で計算されます。そのため、オフピークに開始した長いストリーミングリクエストは、オフピークのままになります。

項目 ピーク オフピーク
入力、キャッシュミス $0.3098 $0.155
入力、キャッシュヒット $0.0062 $0.0031
出力 $1.2392 $0.62

deepseek-v4.1-flash-1017の1Mトークンあたりの標準価格(AIHubMix)。期間限定で30%割引が上乗せされています。

キャッシュヒットはキャッシュミスより50倍安くなります。 エージェントは、呼び出しのたびに同じシステムプロンプト、ツール定義、履歴を送り直します。このプレフィックスを安定させ、呼び出しごとに変わる部分を末尾に置けば、リクエストの大部分はキャッシュヒットの料金で課金されます。

思考は出力として課金されます。 思考はデフォルトで有効であり、推論トークンは請求額とmax_tokensの両方に含まれます。

Search と Fetch。 DeepSeekは10月17日に新しいSearch APIとFetch APIを公開しました。成功した呼び出し1,000件あたり、それぞれ$0.75です。DeepSeek Harness、Claude Code、またはCodexからDeepSeekのAPIを経由して行われるサーバー側の呼び出しは、2026年10月31日 16:00 UTCまで無料です。その後、ターンごとに検索を行うエージェントは、トークン料金に加えて呼び出しごとの費用が発生します。

合計すると。 前提条件(40回の呼び出し、キャッシュヒット率90%の入力120万トークン、出力6万トークン)のもとで、AIHubMixの標準価格では、エージェントの1セッションの費用はピーク時に$0.118、オフピーク時に$0.059です。バッチ実行をオフピークに移すことが、最も大きな節約になります。

4. 得られる効果に対してコストが高すぎる設定

Effort。 APIはlow、high(デフォルト)、maxを提供しています。DeepSeekのV4.1 Flashの論文では、これらを内部のeffort値50、75、100に対応させており、maxへの切り替えは「エージェントの軌跡を1.6〜1.8倍長くするが、改善はわずかである」と報告しています。DeepSeek独自のClaude Codeセットアップガイドでは、依然としてCLAUDE_CODE_EFFORT_LEVEL=maxを設定しています。日常的なエージェント作業には、highの方が適したデフォルトです。

DeepSeekは、ほかのeffort名も3つのレベルに対応させています。minimalはlowになり、mediumとxhighはどちらもhighになります。5つのレベルを提供するツールでも、実際に使えるのは2つか3つです。10月19日のテストでは、AIHubMixはChat Completionsでlow、high、maxを受け付けました。

max_tokens。 モデルカードでは、長いエージェント実行には少なくとも256Kを推奨しています。思考は出力の上限を共有するため、上限が小さいと、難しいステップが上限をすべて思考に使い切ってしまうことがあります。finish_reason: "length"を確認してください。

サンプリングパラメータ。 思考モードでは、temperature、presence_penalty、frequency_penaltyはエラーなく受け付けられますが、効果はありません。top_pは0.95〜1.0に制限されます。低いtemperatureで決定論的な出力を得ていたパイプラインは、もうそれを得られません。

5. 実際の権限を持つエージェント

1017はプロジェクト全体を対象とした強化学習で学習されているため、作業が完了したように見えるまで作業を続ける傾向があります。また、回答は短くなっているため、何を変更したかの説明も少なくなります。次の2つの習慣が役立ちます。

  • モデルによる要約ではなく、差分とコマンドログを確認してください。
  • 許可されたコマンドのみを扱えるサンドボックスで実行し、破壊的な操作(削除、強制プッシュ、マイグレーション、外部へのネットワーク呼び出しなど)には承認を必須にしてください。

DeepSeek自身も、Flashシリーズがセキュリティ作業で強みを持つことを明記しています。DeepSeek独自の表では、9月のチェックポイントはCyberGymで88.1点でした。防御的な作業には有用ですが、権限を厳しく絞り込むべきもう一つの理由でもあります。

6. コーディングツール

AIHubMixは、コーディングツールが必要とする3つのプロトコルすべてでdeepseek-v4.1-flash-1017を提供しています。10月19日のテストでは、Chat Completions、Anthropic Messages(2ターンのツール呼び出しを含む)、Responses APIのすべてが200を返しました。

Claude Code(Anthropic Messages)。Claude Codeガイドに従ってAIHubMixを指定し、モデルを設定してください。

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"
  • 思考:テストでは、effortを設定しないMessagesリクエストは思考ブロックなしで返されましたが、output_config.effortを指定したリクエストは思考を返しました。1017が推論するように、effortレベルを設定したままにし、リクエストログを確認してください。
  • コンテキスト:DeepSeekのガイドでは、自社エンドポイント向けにモデル名へ[1m]のサフィックスを付けています。このサフィックスはAIHubMix経由ではテストされていません。
  • 既知の問題:一部のルーターを経由すると、Claude Codeが思考の内容を落とし、前述の400エラーに遭遇することがあります(claude-code-routerのissue 1378)。AIHubMixのMessagesエンドポイントを通じた2ターンのツールテストでは、この問題は発生しませんでした。

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に設定します。

  • Effort:ガイドのカタログスクリプトはlow、medium、highを提供します。DeepSeekの対応付けでは、mediumとhighはどちらもDeepSeekのhighになるため、実際に使えるレベルは2つです。
  • 既知の問題:新しいバージョンのCodexは、必須フィールドが1つでも欠けていると、カタログ全体を破棄します。ガイドのスクリプトはこれを回避しています。

DeepSeek Harness(Chat Completions)。DeepSeekは、1017にはHarness 0.2.1-rc.1以降が最適だと述べています。DeepSeek Harnessガイドに従ってAIHubMixをOpenAI互換プロバイダーとして追加し、deepseek-v4.1-flash-1017をモデルとして追加してください。このガイドは以前のHarnessリリースに基づいて書かれているため、UIが変わっている場合はフィールド名を確認してください。

15分のスモークテスト。 失敗するテストが1つだけある小さなリポジトリを作成してください。

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エラーなしで、ツール呼び出しを少なくとも2回行う(テストを実行し、ファイルを編集する)。
  • 最後に両方のテストが合格する。
  • AIHubMixのリクエストログにはdeepseek-v4.1-flash-1017と表示され、セッションの費用はせいぜい数セントです。

移行チェックリスト

  • モデルIDを決めます。AIHubMixでは deepseek-v4.1-flash-1017 を使用します。
  • ツールループでは、reasoning_content が毎ターン返されるように、assistantのメッセージを丸ごと追加します。
  • 回帰テストと評価セットを再実行し、モデル、日付、response modelフィールドを記録します。
  • 出力が短くなったことについて、パーサーとUIを確認します。
  • effortはデフォルトでhighに設定し、maxは最も難しいタスクにのみ使用します。
  • エージェントのターンではmax_tokensを増やし、finish_reasonがlengthの場合はアラートを出すようにします。
  • thinkingモードでは、temperatureによる決定性を前提とした考え方を取り除きます。
  • バッチ処理や夜間のエージェント実行は、ピーク時間外にスケジュールします。
  • キャッシュヒットを得るため、プロンプトのプレフィックスを安定させておきます。
  • DeepSeekのサーバー側ツールを使う場合は、10月31日以降のSearchおよびFetch呼び出しの予算を確保しておきます。
  • エージェントは実際の権限を与えたサンドボックス内で動かし、要約ではなく差分をレビューします。
  • 使用する各コーディングツールで、15分のスモークテストを実行します。

FAQ

DeepSeek V4.1 Flash 1017を使うためにコードを変更する必要はありますか?
DeepSeekのAPIでは不要です。deepseek-flashはすでに1017を指しています。AIHubMixでは、モデル名をdeepseek-v4.1-flash-1017に変更してください。

reasoning_contentに関する400エラーが出るのはなぜですか?
DeepSeekでは、リクエストにツールが含まれる場合、それ以前のすべてのassistantターンのreasoning_contentを送り返す必要があります。このフィールドを落とすクライアントは、最初のツール呼び出しの後の呼び出しで失敗します。

AIHubMix経由でもreasoning_contentの400エラーは発生しますか?
AIHubMixの2026年10月19日のテスト実行では発生しませんでした。reasoning_contentを含まないターンでも200が返されました。ただし、DeepSeekが文書化している仕様なので、引き続きこのフィールドを送信してください。

DeepSeekのAPIで9月版のV4.1 Flashを引き続き使えますか?
いいえ。DeepSeekはdeepseek-flashと旧Flash名を1017に切り替えており、9月のチェックポイントを固定できる名前は提供していません。

DeepSeek V4.1 Flashが安くなるのはいつですか?
平日のUTC 01:00〜04:00と06:00〜10:00以外の時間帯です。それ以外の時間帯、週末、中国の祝日は半額になります。

コーディングエージェントではどのeffortレベルを使うべきですか?
デフォルトのhighです。DeepSeek自身の論文によると、maxはエージェントの実行時間を1.6〜1.8倍に延ばすものの、得られる改善はわずかです。

AIHubMix経由で、Claude CodeやCodexでも1017は動作しますか?
はい。AIHubMixは、これらのツールが使うAnthropic MessagesおよびResponsesプロトコルで提供しており、2026年10月19日の基本テストではどちらも合格しました。

続けて読む:DeepSeek V4.1 Flash 1017シリーズ

出典