1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DeepSeek V4.1 Flash 1017 移行時の reasoning_content 400 エラーと課金の落とし穴

1
Last updated at Posted at 2026-10-19

この記事は AIHubMix が作成しました。調査日は2026年10月19日です。記事中の「AIHubMix 経由の確認」は、同日 03:02 UTC(日本時間 12:02)に各項目を1回ずつ実行した結果で、動作を保証するものではありません。

TL;DR

  • tools を含むリクエストでは、過去のすべての assistant ターンの reasoning_content を送り返す必要があります。落とすと DeepSeek の API は HTTP 400 を返します。assistant メッセージは丸ごと履歴に追加してください。
  • 2026年10月17日、DeepSeek は deepseek-flash の名前と料金を変えずに、中身を V4.1 Flash 1017 に差し替えました。旧名の deepseek-v4-flash と deepseek-v4-flash-vision-exp も同じで、9月版を固定して呼ぶ名前はありません。
  • AIHubMix では deepseek-v4.1-flash-1017 という別の ID なので、切り替えるタイミングを自分で決められます。
  • 平日のピーク時間帯(01:00〜04:00 と 06:00〜10:00 UTC)は、オフピークの2倍の料金です。試算ではエージェント1セッションがピーク時 $0.118、オフピーク時 $0.059 でした。
  • 推論強度は high が基本です。DeepSeek の論文によると、max にしてもエージェントの実行が1.6〜1.8倍長くなるだけで、改善はわずかです。

前提

  • AIHubMix の API キーを環境変数 AIHUBMIX_API_KEY に設定済みであること
  • モデル ID は deepseek-v4.1-flash-1017。OpenAI 形式のクライアントはベース URL https://aihubmix.com/v1、Claude Code は https://aihubmix.com を使います
  • 最後の動作確認には git、pytest を入れた Python、そして Claude Code、Codex、DeepSeek Harness のいずれかが必要です

AIHubMix 経由の確認結果

2026年10月19日 03:02 UTC に、deepseek-v4.1-flash-1017 へ各項目1回ずつリクエストを送りました。どの行も「1回通った」という意味で、保証ではありません。

確認項目 エンドポイント 結果
推論強度 low、high、max Chat Completions 3つとも200
reasoning_content なしのツール2ターン目 Chat Completions 200、通常の回答
2ターンのツール呼び出し Anthropic Messages 両ターンとも200
推論強度の指定なし Anthropic Messages thinking ブロックなし
output_config.effort に low を指定 Anthropic Messages thinking ブロックあり
reasoning.effort に low を指定 Responses 200、reasoning と message

どのレスポンスも、model フィールドは "deepseek-v4-1-flash-261017"(1017 のチェックポイント)でした。

ハマりどころ

ツール呼び出しの次のリクエストが 400 エラーになる

症状:ツールを呼んだあと、その結果を送り返すリクエストが HTTP 400 で失敗し、次のメッセージが返ります。10月15日に opencodex の GitHub issue で V4.1 Flash について報告された文面です。

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

(思考モードでは、reasoning_content を API に送り返す必要があります。)

同じ文面は、それ以前にも opencode、LangChain、claude-code-router で、V4 Pro と V4 Flash について報告されています。

原因:DeepSeek の 思考モードのガイド によると、リクエストに tools が含まれる場合、過去のすべての assistant ターンの reasoning_content を送り返す必要があります。ツールを呼ばなかったターンも対象で、送らなければ API は 400 エラーを返します。tools がなければ送り返しは任意で、送っても無視されます。多くのクライアントは、メッセージをシリアライズするときに content と tool_calls だけを残し、この追加フィールドを落としてしまいます。

再現:ツールループの2ターン目で、assistant メッセージから reasoning_content を取り除いた形です。

repro.sh
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回だけの結果で、どの上流チャネルが処理したかもレスポンスからは分かりません。これを前提に実装しないでください。

対処:経路にかかわらず、このフィールドを残します。

tool_loop.py
msg = resp.choices[0].message
messages.append(msg)  # carries content, reasoning_content, and tool_calls over
  • 自前のコードでは、assistant メッセージを手で組み直さず、レスポンスのメッセージをそのまま追加します。
  • フレームワークを使っている場合はアップデートします。opencode は後続のリリースで修正済みで、opencodex も10月16日に修正をマージしました。
  • 最終手段として、ツールループで {"thinking": {"type": "disabled"}} を指定する方法もあります。エラーは避けられますが、このモデルがエージェント用途で強い理由である推論を手放すことになります。

エラーは出ないのに、出力の長さや評価スコアが変わる

症状:コードは何も変えていないのに、回答が短くなった、評価スコアやコストが前回と合わない。

原因:DeepSeek の 変更履歴 の10月17日の項には、次のように書かれています。

The API calling method and pricing remain unchanged — simply use deepseek-flash to access the latest model.

(API の呼び出し方法と料金は変わりません。deepseek-flash を指定するだけで最新モデルを利用できます。)

9月版のチェックポイントを固定して呼ぶ名前はなく、旧名の2つも 1017 で動いています。エラーは出ませんが、次の3点が変わりえます。

  • 出力の長さ:1017 は出力が短くなるように学習されています。9月版の長い説明を前提にしたパーサー、UI のレイアウト、プロンプトでは、受け取るテキストが減るかもしれません。どれだけ短くなったかを DeepSeek は数値で示していません。
  • 評価のベースライン:9月版で記録したスコアやコストは、いまの deepseek-flash の結果を表していません。
  • 振る舞い:1017 はエンドツーエンドのプロジェクト開発向けに再学習されています。エージェントが同じ結果に別の経路でたどり着くことがあります。

対処:評価を回すたびにモデル名と日付を記録し、回帰テストをいま回し直します。どのチェックポイントが答えたかはレスポンスで分かります。10月19日の確認では、AIHubMix 経由のレスポンスはすべて "model": "deepseek-v4-1-flash-261017" でした。このフィールドをログに残しておけば、予告なしの差し替えにもその日のうちに気づけます。

平日の日中だけ請求額が2倍になる

症状:同じ処理なのに、実行した時間帯によって費用が倍違う。

原因:DeepSeek は平日の 01:00〜04:00 と 06:00〜10:00 UTC(日本時間 10:00〜13:00 と 15:00〜19:00)を定価、それ以外の時間帯と週末、中国の祝日を半額にしています。AIHubMix も同じ時間帯区分を使い、リクエストを送信した時刻で料金を決めます。オフピークに始まった長いストリーミングリクエストは、最後までオフピーク料金です。

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

AIHubMix における deepseek-v4.1-flash-1017 の定価で、単位は100万トークンあたりの米ドルです。現在はこれに加えて、期間限定の30%割引があります。

試算の前提は、呼び出し40回、入力120万トークン(キャッシュヒット90%)、出力6万トークンのエージェント1セッションです。

  • ピーク時:0.12M × $0.3098 + 1.08M × $0.0062 + 0.06M × $1.2392 = $0.118
  • オフピーク時:同じトークン数で半額の $0.059

対処:

  • バッチ処理や夜間のエージェント実行をオフピークに回します。これが最も効く節約です。
  • キャッシュヒットの単価はミスの50分の1です。エージェントは毎回同じシステムプロンプト、ツール定義、履歴を送るので、先頭部分を固定し、呼び出しごとに変わる内容は末尾に置きます。
  • 思考はデフォルトでオンで、推論トークンは出力として課金され、max_tokens にも含まれます。

10月31日以降、検索のたびに追加料金がかかる

症状:トークン以外の費用が増える。

原因:DeepSeek は10月17日に新しい Search API と Fetch API を公開しました。料金はそれぞれ成功1,000回あたり $0.75 です。DeepSeek の API 上で DeepSeek Harness、Claude Code、Codex から行うサーバー側の呼び出しは、2026年10月31日 16:00 UTC(日本時間11月1日 01:00)まで無料です。

対処:DeepSeek のサーバー側ツールを使っているなら、10月31日以降の呼び出し回数を見積もっておきます。毎ターン検索するエージェントでは、トークンとは別に回数分の費用が積み上がります。

推論強度を max にしたら、エージェントの実行が長くなった

症状:1回の実行が長くなり費用も増えたのに、結果はほとんど変わらない。

原因:API の推論強度は low、high(デフォルト)、max の3段階です。DeepSeek の V4.1 Flash 論文は、これらを内部の強度値50、75、100に対応させたうえで、max への引き上げについて次のように書いています。

lengthens agent trajectories by 1.6–1.8× for only marginal improvements

(エージェントの実行経路が1.6〜1.8倍に伸びる一方で、改善はわずかにとどまる)

それでも DeepSeek 自身の Claude Code 設定ガイドは CLAUDE_CODE_EFFORT_LEVEL=max を設定しています。また DeepSeek は他の強度名も3段階に割り当てます。minimal は low に、medium と xhigh はどちらも high になります。5段階を選べるツールでも、実際に効くのは2〜3段階です。

対処:日常のエージェント作業は high を基本にし、max は最も難しいタスクに限ります。10月19日の確認では、AIHubMix の Chat Completions は low、high、max のいずれも受け付けました。

回答が途中で切れる

原因:思考と出力は同じ max_tokens の枠を使います。上限が小さいと、難しいステップで枠をすべて思考に使い切ることがあります。

対処:モデルカードは、長いエージェント実行には256K以上を推奨しています。finish_reason: "length" を監視してください。

temperature を下げても出力が揃わない

原因:思考モードでは、temperature、presence_penalty、frequency_penalty はエラーにならずに受け付けられますが、効果はありません。top_p は0.95〜1.0に制限されます。

対処:低い temperature による決定的な出力を前提にした処理は見直します。

権限を持たせる前に

1017 はプロジェクト全体を対象にした強化学習で訓練されているため、作業が終わったように見えるまで手を動かし続ける傾向があります。回答も短いので、何を変えたかの説明も少なくなります。

  • モデルによる要約ではなく、差分とコマンドログをレビューします。
  • コマンドを許可リストで制限したサンドボックスで動かし、破壊的な操作(削除、force push、マイグレーション、外部へのネットワーク通信)には承認を必須にします。

DeepSeek 自身も Flash 系のセキュリティタスクでの強さを挙げており、DeepSeek の表では9月版のチェックポイントが CyberGym で88.1を記録しています。防御側の作業には役立ちますが、権限を絞る理由がもう1つ増えたとも言えます。

コーディングツールの設定

AIHubMix は、コーディングツールが使う3つのプロトコルすべてで deepseek-v4.1-flash-1017 を提供しています。Claude Code は Anthropic Messages、Codex は Responses API、DeepSeek Harness は Chat Completions です。

Claude Code

Claude Code の接続ガイド のとおり AIHubMix に向け、モデルを指定します。

claude-code-env.sh
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 リクエストには thinking ブロックがなく、output_config.effort を付けたリクエストでは思考が返りました。リクエストログで 1017 が推論しているかを確かめてください。
  • [1m] サフィックス:DeepSeek のガイドは、自社エンドポイント向けにモデル名へ [1m] を付けています。AIHubMix 経由では未検証です。
  • 既知の問題:一部のルーターを経由すると、Claude Code が思考の内容を落として上記の 400 エラーになる事例があります(claude-code-router の issue 1378)。AIHubMix の Messages エンドポイントでの2ターンのツール呼び出しでは発生しませんでした。

Codex

Codex CLI のガイド に従い、base_url = "https://aihubmix.com/v1" と wire_api = "responses" を持つ aihubmix プロバイダーを追加し、model = "deepseek-v4.1-flash-1017" を設定します。/model から選べるようにするには、model_catalog_json ファイルに追加し、context_window を1,000,000にします。

  • ガイドのカタログ用スクリプトは low、medium、high を用意しています。DeepSeek の割り当てでは medium と high がどちらも high になるので、実質2段階です。
  • 新しい Codex は、必須フィールドが1つでも欠けているとカタログ全体を読み込みません。ガイドのスクリプトはこの問題を回避しています。

DeepSeek Harness

DeepSeek によると、1017 は Harness 0.2.1-rc.1 以降で最もよく動きます。DeepSeek Harness のガイド に従って AIHubMix を OpenAI 互換のプロバイダーとして追加し、deepseek-v4.1-flash-1017 をモデルとして登録します。ガイドは以前の Harness を前提に書かれているので、UI が変わっていたらフィールド名を確認してください。

15分でできる動作確認

失敗するテストが1つだけある小さなリポジトリを作ります。

smoke.sh
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

このフォルダでツールを起動し、次のように指示します。

"Run pytest, fix the failing test by changing stats.py only, then run pytest again."

(pytest を実行し、stats.py だけを変更して失敗しているテストを直してから、もう一度 pytest を実行してください。)

次の条件をすべて満たせば合格です。

  • エージェントが 400 エラーなしで2回以上ツールを呼んでいる(テストの実行とファイルの編集)
  • 最後に2つのテストがどちらも通っている
  • AIHubMix のリクエストログに deepseek-v4.1-flash-1017 が記録され、セッションの費用が数セント以内である

この検証で分からないこと

  • ツール2ターン目の200:1回だけのリクエストで、上流チャネルも見えません。DeepSeek のルールは変わらないので、フィールドは送り返してください。
  • 推論強度ごとのコスト:確認に使ったのは簡単なプロンプトで、推論トークン数(low、high、max の順に68、39、54)では差が出ませんでした。high を勧める根拠は DeepSeek の論文で、今回の確認ではありません。
  • [1m] サフィックス:AIHubMix 経由では未検証です。
  • Harness の UI:AIHubMix の Harness ガイドは 0.2.1-rc.1 より前に書かれています。
  • 「出力が短くなった」:DeepSeek は数値を示していません。自分のプロンプトで、9月版のときに記録した completion_tokens と比べてください。

まとめ

  • tools を使うなら、assistant メッセージを丸ごと履歴に追加して reasoning_content を毎ターン送り返す
  • DeepSeek の API では deepseek-flash の中身が 1017 に替わっている。レスポンスの model フィールドを記録し、回帰テストを回し直す
  • 平日のピーク時間帯は2倍の料金。バッチはオフピークに回し、プロンプトの先頭部分を固定してキャッシュを効かせる
  • 推論強度は high を基本にし、max_tokens は大きめに取って finish_reason を監視する
  • 各コーディングツールで15分の動作確認を通してから、本番のエージェントを切り替える

AIHubMix なら、deepseek-v4.1-flash-1017 を1つの API キーで Chat Completions、Anthropic Messages、Responses API から呼び出せます。AIHubMix のクイックスタート で API キーを準備し、上の動作確認から試してみてください。

あわせて読みたい:DeepSeek V4.1 Flash 1017 シリーズ

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?