迁移至 DeepSeek V4.1 Flash 1017:reasoning_content 400 错误、静默的别名切换与高峰时段计费

推理时代阅读约 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 的用户,无需修改任何一行代码就被迁移过去了。

在 AIHubMix 上,新版本模型拥有自己的 ID deepseek-v4.1-flash-1017,因此你可以自行决定何时迁移。无论采用哪种方式,都需要检查以下问题:

问题 故障表现 发现途径
未回传 reasoning_content 明显报错 第一次工具调用后出现 400
同名模型被替换 悄无声息 输出长度、格式、评测分数
高峰时段定价 悄无声息 工作日高峰时段账单翻倍
默认将 effort 设为 max 悄无声息 Agent 运行时间延长 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 错误

表现形式。工具调用后的第二次请求会失败,返回 HTTP 400 及以下信息。这是 10 月 15 日有人在 GitHub 上针对 V4.1 Flash 向 opencodex 提交的 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 的思考模式指南指出,当请求包含 tools 时,之前每一轮 assistant 的 reasoning_content 都必须回传,"即使是模型未执行工具调用的轮次"也不例外。如果未回传,"API 将返回 400 错误"。在没有 tools 的情况下,回传该字段是可选的,且会被忽略。客户端之所以常常踩坑,是因为其消息序列化器保留了 content 和 tool_calls,却丢掉了这个额外字段。

触发该错误的请求。工具循环的第二轮,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 和正常回答。这只是一次运行的结果,不应将其视为保证。

解决方法。无论使用哪种途径,都要保留该字段:

msg = resp.choices[0].message
messages.append(msg)  # carries content, reasoning_content, and tool_calls over
  • 在你自己的代码中,应追加完整的 assistant 消息,而不是手动构造的副本。
  • 在框架中,请升级版本:opencode 已在后续版本中修复了往返传递的问题,opencodex 则于 10 月 16 日合并了其修复。
  • 作为最后的手段,可为工具循环设置 {"thinking": {"type": "disabled"}}。这样可以避免报错,但也会放弃让模型在 agent 任务中表现出色的推理能力。

2. 同一名称,不同模型

DeepSeek 在 10 月 17 日的更新日志中直言:"API 调用方式与定价保持不变,只需使用 deepseek-flash 即可访问最新模型。"9 月版本没有固定的名称,两个旧的 Flash 名称现在也都指向 1017 版本。

不会报错,但有三方面可能发生变化:

  • 输出长度。1017 经过训练,输出更为简短。那些依赖 9 月模型长篇解释的解析器、UI 布局和提示词,可能会得到比以前更少的文本。
  • 评测基准。你在 9 月版本上记录的分数和成本,已无法反映 deepseek-flash 当前返回的结果。
  • 行为表现。DeepSeek 针对端到端的项目工作重新训练了 1017。Agent 可能会以不同路径得到相同结果。

应采取的措施。每次评测运行都应记录模型和日期,并立即重新运行你的回归测试集。响应会告诉你是哪个版本作答:在 10 月 19 日的测试中,经由 AIHubMix 的每个响应都带有 "model": "deepseek-v4-1-flash-261017"。记录该字段,未经公告的切换就会在发生当天被发现。

3. 容易被忽视的计费规则

高峰与非高峰时段。DeepSeek 在工作日 UTC 时间 01:00–04:00 和 06:00–10:00 按全价计费,其余时段、整个周末以及中国法定节假日按半价计费。AIHubMix 沿用相同的时段划分,并按请求提交时的时间计价,因此一个在非高峰时段开始的长时间流式请求,全程都按非高峰价格计费。

项目 高峰 非高峰
输入,缓存未命中 $0.3098 $0.155
输入,缓存命中 $0.0062 $0.0031
输出 $1.2392 $0.62

以下为 deepseek-v4.1-flash-1017 在 AIHubMix 上的标价(每 100 万 token),目前叠加了限时 30% 折扣。

缓存命中的价格比未命中便宜 50 倍。Agent 每次调用都会重复发送相同的系统提示词、工具定义和历史记录。保持这一前缀稳定,将每次调用都会变化的内容放在末尾,这样大部分请求都会按缓存命中价格计费。

思考内容按输出计费。思考功能默认开启,且推理 token 既计入账单,也计入 max_tokens。

Search 与 Fetch。DeepSeek 于 10 月 17 日推出了全新的 Search 和 Fetch API,每 1,000 次成功调用分别收费 0.75 美元。通过 DeepSeek Harness、Claude Code 或 Codex 在 DeepSeek API 上发起的服务端调用,在 2026 年 10 月 31 日 16:00 UTC 之前免费。此后,若 agent 每轮都进行搜索,除 token 费用外还会额外产生按次计费的成本。

综合成本。在既定假设下(40 次调用、120 万输入 token 且缓存命中率 90%、6 万输出 token),按 AIHubMix 标价计算,一次 agent 会话在高峰时段成本为 0.118 美元,非高峰时段为 0.059 美元。将批量任务转移到非高峰时段,是最大的一项节省。

4. 得不偿失的设置

Effort。API 提供 low、high(默认)和 max。DeepSeek V4.1 Flash 论文将它们分别映射为内部 effort 值 50、75 和 100,并指出提升至 max 会"使 agent 轨迹延长 1.6–1.8 倍,而性能提升微乎其微"。DeepSeek 自家的 Claude Code 配置指南仍设置 CLAUDE_CODE_EFFORT_LEVEL=max。对于日常的 agent 工作,high 是更好的默认值。

DeepSeek 还会将其他 effort 名称映射到自己的三档设置上:minimal 变为 low,而 medium 和 xhigh 都变为 high。一个提供五档选项的工具,实际上只有两到三档可用。在 10 月 19 日的测试中,AIHubMix 的 Chat Completions 接口接受了 low、high 和 max。

max_tokens。模型卡建议长时间运行的 agent 至少设为 256K,因为思考内容与输出共享预算。若上限较小,一个困难的步骤可能会把整个预算都耗在思考上。请检查是否出现 finish_reason: "length"。

采样参数。在思考模式下,temperature、presence_penalty 和 frequency_penalty 会被接受而不报错,但不产生任何效果。top_p 会被限制在 0.95–1.0 之间。如果某个流水线依赖低 temperature 来获得确定性输出,那么它将不再获得这种效果。

5. 拥有真实权限的 Agent

1017 是通过对整个项目进行强化学习训练的,因此它倾向于一直工作,直到任务看起来已经完成。它的回答也更简短,这意味着它对所做改动的说明会更少。以下两个习惯会有所帮助:

  • 应审查 diff 和命令日志,而不是只看模型对其的总结。
  • 在沙箱中运行,并使用命令白名单;对任何具有破坏性的操作(删除、强制推送、迁移、对外网络调用)都要求人工批准。

DeepSeek 自己也指出了 Flash 系列在安全任务上的优势;在 DeepSeek 自家的表格中,9 月版本在 CyberGym 上得分为 88.1。这对防御性工作很有用,也是严格限定其权限的另一个理由。

6. 编程工具

AIHubMix 为 deepseek-v4.1-flash-1017 提供了编程工具所需的全部三种协议。在 10 月 19 日的测试中,Chat Completions、Anthropic Messages(包括两轮工具调用)以及 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 请求返回中没有 thinking 块,而设置了 output_config.effort 的请求则返回了 thinking。请保持设置某个 effort 级别,以确保 1017 进行推理,并检查请求日志。
  • 上下文:DeepSeek 指南会在模型名称后添加 [1m] 后缀,用于其自身的端点;该后缀未通过 AIHubMix 进行测试。
  • 已知问题:经过某些路由器时,Claude Code 会丢失 thinking 内容,并触发上述 400 错误(claude-code-router issue 1378)。通过 AIHubMix 的 Messages 端点进行的两轮工具调用测试未出现该问题。

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 上,因此实际只有两个有效档位。
  • 已知问题:较新版本的 Codex 若缺少某个必需字段,会丢弃整个目录。指南中的脚本可以避免这一问题。

DeepSeek Harness(Chat Completions)。DeepSeek 表示,1017 与 Harness 0.2.1-rc.1 或更高版本配合时效果最佳。请按照 DeepSeek Harness 指南将 AIHubMix 添加为 OpenAI 兼容提供方,并将 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。"若满足以下条件则视为通过:

  • agent 至少进行两次工具调用(运行测试、编辑文件),且没有出现 400 错误;
  • 最终两个测试均通过;
  • AIHubMix 的请求日志显示 deepseek-v4.1-flash-1017,整个会话的费用最多只有几分钱。

迁移清单

  • 确定模型 ID:在 AIHubMix 上使用 deepseek-v4.1-flash-1017。
  • 在工具调用循环中,每一轮都完整追加 assistant 消息,以确保 reasoning_content 每轮都被回传。
  • 重新运行回归测试和评估集;记录模型、日期以及 response model 字段。
  • 检查解析器和界面是否能处理更短的输出。
  • 默认将 effort 设为 high;max 只保留给最难的任务。
  • 为智能体轮次提高 max_tokens,并对 finish_reason 为 length 的情况设置告警。
  • 在思考模式下,去掉基于 temperature 的确定性假设。
  • 将批量任务和夜间智能体运行安排在非高峰时段。
  • 保持提示词前缀稳定,以命中缓存。
  • 如果你使用 DeepSeek 的服务端工具,请从 10 月 31 日起为 Search 和 Fetch 调用做好预算。
  • 让智能体在具备真实权限的沙箱中运行,并审查代码差异,而不是只看摘要。
  • 在你使用的每个编程工具中运行 15 分钟的冒烟测试。

常见问题

使用 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 之外的时段。其他所有时段、周末和中国法定节假日都按半price计费。

编程智能体应使用哪个 effort 等级?
使用 high,即默认值。DeepSeek 自己的论文指出,max 会使智能体运行时间延长 1.6 到 1.8 倍,而收益却很小。

1017 能否通过 AIHubMix 在 Claude Code 和 Codex 中使用?
可以。AIHubMix 通过这些工具所使用的 Anthropic Messages 和 Responses 协议提供服务,并且两者都在 2026 年 10 月 19 日通过了基础测试。

继续阅读:DeepSeek V4.1 Flash 1017 系列

来源