返回博客

AI 入门指南

推理 effort 与思考 token:为什么思考成本更高

思考 token 作为输出计费。effort 级别意味着什么,max_tokens 该设多少才不会截断答案,以及如何估算账单。

作者:CheapTokens Team发布于 6 分钟阅读

聊天卡片:为什么一行答案花了这么多钱?因为模型先思考了,而思考作为输出计费
本页内容
  1. 模型在回答之前做了什么
  2. Effort:思考的旋钮
  3. 空回答陷阱:思考会计入 max_tokens
  4. 长推理对账单的影响
  5. 哪种工作用哪个 effort
  6. 迁移旧请求:400 错误
  7. 智能体和长对话:选一个级别并保持
  8. 在你自己的请求上试试

你的请求只是一个事实性问题。答案只有三行。输出计数器却显示数千个 token。这不是 bug:在回答之前,许多模型会在隐藏的草稿区中思考,而这些思考 token 会作为输出 token 计费。effort 设置决定了其中有多少思考会发生,而 max_tokens 必须为它留出空间,否则你会得到被截断或空的回答。

模型在回答之前做了什么#

想想考试。你可以直接写出答案,也可以先写满一页草稿。草稿通常能在难题上带来更好的结果,但纸不是免费的。推理就是那份草稿,它和其他一切一样按 token 计费。

Anthropic 的扩展思考文档(2026 年 10 月 23 日查阅)指出,思考 token 是计费输出 token 的一部分,响应会告诉你数量:usage.output_tokens_details.thinking_tokens。假设一个响应返回了这样的 usage 块(示例数字):

json
"usage": {
  "input_tokens": 480,
  "output_tokens": 2150,
  "output_tokens_details": { "thinking_tokens": 1900 }
}

你会为 2,150 个输出 token 付费。其中思考占了 1,900 个,所以你实际读到的文本是 2,150 − 1,900 = 250 个 token。即使思考文本没有返回给你,情况也一样:它仍然会被计入。如果你想先弄清楚输入和输出之间的区别,请从 输入 token 与输出 token 开始。

Effort:思考的旋钮#

在 Claude 的 API 中,这个旋钮是 output_config.effort。Anthropic 的 effort 页面(2026 年 10 月 23 日查阅)列出了五个级别:low、medium、high、xhigh、max。对初学者来说,有三个细节很重要:

  • 它影响每一个输出 token,而不仅仅是思考:文本、工具调用和思考都包括在内。
  • 它是一种行为信号,而不是严格的预算。较低的 effort 意味着更少的 token,代价是损失一些能力;在低 effort 下,Claude 在简单问题上可能完全跳过思考。
  • 在 Claude Opus 5.5 和 Claude Haiku 5.5 上默认是 medium,在大多数其他支持该参数的模型上默认是 high。显式设置默认值与省略它是一样的。

级别会按模型重新校准,所以一个模型上的 high 与另一个模型上的 high 并不代表相同数量的思考,而且并非每个模型都接受每个级别。在一个已发布的视频中,有人对同一个动态图形任务运行了 Claude Opus 5.5 的每个 effort 级别,并比较了图片。这是了解更多思考能带来什么的好方法。它不会告诉你你的账单,因为你的任务不是他们的。

一个简单问题的请求,调低了 effort:

json
{
  "model": "claude-opus-5-5",
  "max_tokens": 4000,
  "output_config": { "effort": "low" },
  "messages": [
    { "role": "user", "content": "What is the capital of Australia?" }
  ]
}

空回答陷阱:思考会计入 max_tokens#

问题是这样发生的。你期望一个两句话的回答,所以把 max_tokens 设为 300。模型开始思考,把 300 花在草稿上,达到限制后停止。你会得到空回复,或者一个在词中间结束的句子,停止原因显示为 max_tokens。

文档说得很明确:max_tokens 是总输出(思考加响应文本)的硬限制,而且即使思考内容没有返回,它也会被计入。在 high effort 及以上,Anthropic 建议设置一个较大的值。

在实践中:

  1. 取你想要的答案长度。
  2. 为思考留出充足空间。对于任何高于 low 的情况,几千个 token 是一个合理的起点。
  3. 在最初几次运行后检查停止原因。如果它仍然显示 max_tokens,就提高限制。如果答案完整,你可以降低它。

截断本身,连同 finish_reason 和上下文窗口,在 为什么 AI 回答会在句子中间停止 中有介绍。

长推理对账单的影响#

假设你运行一个每天处理 2,000 张工单的支持机器人。每张工单输入约 500 个 token。简短直接的回答输出约 400 个 token。同一张工单如果进行长时间隐藏推理,输出约 4,000 个 token。这些是示例假设;要了解你自己的数字,请参阅 一个请求使用多少 token。

每天就是 2,000 × 500 = 1,000,000 个输入 token,以及 2,000 × 400 = 800,000 个输出 token 或 2,000 × 4,000 = 8,000,000 个输出 token。无论哪种方式,工单的读者看到的都是同样的两行。唯一变化的是输出量,而输出正是推理会膨胀的那一侧。

支持机器人的每日成本,1,000,000 个输入 token,短回答与长推理对比(实时价格)
  • MiniMax-M2.7,长推理(8,000,000 输出)$1.25
  • DeepSeek-V4-Flash,长推理(8,000,000 输出)$0.815
  • MiniMax-M2.7,短回答(800,000 输出)$0.17
  • DeepSeek-V4-Flash,短回答(800,000 输出)$0.095

在任何对隐藏推理计费的模型上,算术都是一样的:输出 token × 输出价格。对于 DeepSeek-V4-Flash,该价格是每 1M 输出 token $0.10,其输出侧比 OpenRouter 的参考价格更便宜。它还能一次回答最多 32,768 个 token,上下文为 380K,所以较大的 max_tokens 也能容纳。价格按模型固定,没有高峰时段,上表会根据实时价格列表重新计算。所有价格都在 定价页面 上;DeepSeek 页面 有模型详情。

这里有一个可以自己发送的请求。这是一个普通的摘要任务,所以你不需要长推理,而且限制留出了充足空间:

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/DeepSeek-V4-Flash-0731",
    "max_tokens": 2000,
    "messages": [
      {"role": "user", "content": "Summarize in one sentence: A token is a small piece of text that a model reads and writes, and APIs bill by the token."}
    ]
  }'

在回复中,usage.completion_tokens 是你在输出侧付费的内容,而 finish_reason 应该是 stop。如果它显示 length,说明限制截断了答案。获取密钥和第一次调用:文档。

哪种工作用哪个 effort#

  • 一个事实、一行摘要、一个标签。 最低 effort。这就是文章开头的情况:你不需要草稿。
  • 日常写作、简短解释、简单编辑。 模型的默认值。只有在看到答案的成本后再更改它。
  • 棘手的 bug、多步计划、数学问题。 high 或以上,以及较大的 max_tokens。在这里,额外的思考才是重点。

不确定时,用两个级别运行同一个提示,比较答案,并比较 output_tokens。如果更便宜的答案一样好,你就找到了自己的级别。

迁移旧请求:400 错误#

较旧的代码用 token 预算来控制思考。在 Claude 4.7 及更高版本的模型(Opus 5.5、Sonnet 5.5、Haiku 5.5、Fable 5.1)上,这种形式会被拒绝并返回 400 错误。你要切换到自适应思考,并用 effort 设置深度:

json
// before: returns 400 on newer models
"thinking": { "type": "enabled", "budget_tokens": 8000 }

// after
"thinking": { "type": "adaptive" },
"output_config": { "effort": "medium" }
左侧是旧的思考预算,右侧是带 effort 的自适应思考
根据 Anthropic 的文档,同一请求迁移前后的对比,2026 年 10 月 23 日查阅

还有一个陷阱:在 Opus 5.5 上,自适应思考始终开启,thinking: { "type": "disabled" } 在每个 effort 级别都会返回 400。Haiku 5.5 允许在 high effort 或以下禁用思考。如果你想在 Opus 5.5 上减少思考,请降低 effort,而不是关闭它。

智能体和长对话:选一个级别并保持#

如果你的提示被缓存,在请求之间更改顶层 effort 会使该对话的缓存断点失效。对于智能体循环或长对话,请提前选择一个级别。一些模型在 beta 中提供按消息的 effort,可以保持缓存,在基础打好之后值得一看。长对话还有第二个成本驱动因素,在 为什么长对话成本更高 中有介绍。

在你自己的请求上试试#

  1. 发送你的真实提示一次,并阅读 usage:有多少输出 token,其中有多少是思考。
  2. 将 effort 降低一级,再次发送。比较答案和计数。
  3. 将 max_tokens 设置为想要的答案加上思考空间,并检查停止原因。

然后把你自己的 token 计数放入 定价页面 上的实时价格表,你就有了月度估算。