用 API 时你大概注意过这个现象
同一个模型,有的请求字立刻往外蹦,有的却先卡两三秒,然后才开始输出正文。后面这种情况,多半是模型在「思考」。用网页版的时候,你会先看到一段灰色小字慢慢滚动,写的是「让我分析一下」「首先考虑」这类内容,之后正式回答才出现。那段小字,就是这篇文章要讲的东西。
它叫思考模式(Thinking Mode),也叫推理 token、reasoning tokens。这篇文章把它一次讲清:模型在思考什么、怎么开怎么关、强度怎么调、钱怎么算,最后给一张什么时候开什么时候关的判断清单。素材来自 Kimi、DeepSeek、智谱、OpenRouter 四家的官方文档,都是我这两天逐页翻出来核对的,不掺二手转述。
思考的时候,模型在干什么
普通模式下,模型读完你的问题就直接生成答案。思考模式多了一步:先生成一段「推理 token」,把问题拆开、列步骤、比较几种解法,然后才开始写正式回答。
这段过程不是黑箱。Kimi 文档的原话是:思考模型「先用推理 token 进行思考:分解问题、规划步骤、评估多种方案」,推理过程通过响应里的 reasoning_content 字段返回。DeepSeek、智谱的做法一样,字段名也叫 reasoning_content;OpenRouter 的 Chat Completions 里叫 reasoning。你在各家产品里看到的灰色思考小字,就是从这些字段里渲染出来的。
代价也写在文档里:延迟更高,token 消耗更多。思考的那几千个 token 要占生成时间(所以你等得久),还要按输出计费(所以账单变厚)。如果你好奇为什么思考模型的第一个字总是出来得特别慢,那和 Prefill、Decode 两个阶段的原理有关,我之前写过一篇拆解:等第一个字为什么最慢。
开与关:四家四种姿态
同样是思考模式,四家的开关设计差别不小,这是我翻文档时印象最深的一点。
DeepSeek:默认开启,可关。现役的 deepseek-flash 和 deepseek-v4-pro 都带思考模式,官方参数表写明默认 effort 是 high。关掉用一行参数 {"thinking": {"type": "disabled"}}。细节是 Anthropic 格式的接口同样认这个参数,OpenAI 格式则要塞进 extra_body 里传。
Kimi:分模型。kimi-k2.6 默认开思考,可以用 thinking.type 关;但 kimi-k3.1-pro 和 kimi-k2.7-code 是「始终思考」,传 disabled 直接报错,K3.1 Pro 只留了 reasoning_effort 给你调强度(K3 的 API 实操我写过教程)。顺带一个时效信息:K2 系列含 k2.6 从 10 月 31 日起停止向新注册用户开放,官方公告计划 12 月底下线全部 K2 模型,新项目直接看 K3 系列。
智谱:也在收紧开关。GLM-5.3 和 GLM-5.3-FLASH 的文档明确写了「不再支持关闭思考,thinking.type 传 disabled 将会报错」;GLM-5.2 这类上一代还保留选择权,enabled 时模型自动判断要不要思考,disabled 直接出答案。
OpenRouter:聚合网关做统一封装。不管底下模型用什么参数名,请求统一传一个 reasoning 对象:effort 从 none 到 max 七档,或者直接给 reasoning.max_tokens 设预算。它还在模型列表里给每个模型标注了 supported_efforts、default_enabled 和 mandatory 字段,mandatory 为 true 的模型(强制思考那批),前端就该把「关闭思考」的按钮藏掉。
趋势看得出来:新一代思考模型的开关正在消失,只能调强度,不能关。厂商赌的是你总是想要更准的答案。
强度档位:名字很多,实际就三档
reasoning_effort 这个参数,OpenAI 风格有 minimal、low、medium、high、xhigh、max 一堆档位,看着复杂。DeepSeek 文档里贴了张映射表,我看完直接乐了:
- minimal → low
- low → low
- medium → high
- high → high
- xhigh → high
- max → max
- ultra → max
七个输入档位,实际只有 low、high、max 三档在跑,其余名字是为了兼容老客户端。智谱的 GLM-5.2 同样把 low 和 medium 映射成 high,xhigh 映射成 max。
OpenRouter 文档给了另一个视角:对支持的模型,effort 大致对应思考 token 占输出预算的比例,high 约 80%,medium 约 50%,low 约 20%。想粗估一次思考要花多少 token,这个比例能当参考。
钱怎么算:思考没有折扣价
结论放在前面:思考 token 按输出 token 的正常价格计费,没有单独的便宜价。
OpenRouter 的原话是「Reasoning tokens are considered output tokens and charged accordingly」。DeepSeek 的价格表更直白,从头到尾只有输入和输出两列,思考没有独立条目,它就是输出的一部分。Kimi 的 FAQ 也确认 reasoning_content 计入 token 消耗。按 DeepSeek 非高峰时段的输出价 0.6 美元每百万 token 算,一次回答思考 3000 token 就是 0.0018 美元,单次不贵,但如果服务端每个请求都强制思考,乘上量就不是小数字了(计费怎么算出来的,之前写过一篇拆解)。
所以省钱的路径不在价格上,在用量上:交互式场景关思考或调低强度,批量跑复杂任务再开满。另外思考内容也会参与上下文缓存的前缀匹配,多轮对话里历史消息保持稳定,缓存命中能省回一部分,具体玩法见这篇提示缓存配置指南。
一个容易踩的坑:预算被思考吃光
这是我觉得全文最实用的一节。
思考 token 和正式回答共用 max_tokens 预算。OpenRouter 有个警告值得抄在这里:如果预算太小,模型把额度全花在思考上,正式回答一个字都出不来,返回 finish_reason 为 length 的空内容,而思考的 token 照样计费。你花了钱,拿到一个空响应。
检测办法它也给了:拿 completion_tokens 减去 reasoning_tokens,差值就是可见输出的长度,接近 0 就说明被思考吃光了。Kimi 的建议是思考模型把 max_tokens 设到 16000 以上,给思考留够空间。Anthropic 系还多一条规矩:max_output_tokens 必须严格大于思考预算,不然报错。
实际代码里,把思考内容和正式回答分开处理,流式读取大概长这样:
for chunk in stream:
delta = chunk.choices[0].delta
if getattr(delta, "reasoning_content", None):
print(delta.reasoning_content, end="") # 思考内容
elif delta.content:
print(delta.content, end="") # 正式回答
流式输出里 reasoning_content 一定先于 content 出现,所以用字段是否出现就能判断思考结束没有,不需要额外的标志位。
多轮对话里,上一次的思考还在吗
大模型 API 是无状态的,每轮都要把历史消息重新发一遍。那历史轮次的 reasoning_content 要不要发回去?答案是看场景,两家文档把这个边界写得非常清楚。
不带工具时,不用回传。DeepSeek 文档写明:请求不携带 tools 参数时,历史 reasoning_content 传了也会被忽略,不拼进上下文。省钱,也不占窗口。
带工具时,必须回传,而且必须完整。DeepSeek 的规则是带 tools 的请求要把所有轮次的 reasoning_content 原样传回,漏传直接 400 报错。原因不复杂:多步工具调用过程中,模型要接着上一步的思考继续推理,中间那几段「我先查日期再查天气」的草稿就是它的连续性。
Kimi 把这件事做成了显式开关,叫保留式思考(Preserved Thinking):kimi-k2.6 用 thinking.keep 设 all 才保留历史思考,默认不保留;k3.1-pro 和 k2.7-code 始终保留,没法关。要注意保留的思考照样计费、照样占上下文长度,Kimi 官方专门用警告框提醒「酌情使用」。上下文被思考内容撑大之后怎么管理,裁剪、压缩那些动作在这篇上下文管理实战里都覆盖了。
什么时候开,什么时候关
最后是判断清单,我按自己的使用习惯分了两堆。
适合开着:数学推导、代码生成和调试、多步工具调用的 Agent 任务、需要核对多个条件的分析。这类任务思考带来的正确率提升,值回 token 的票价。
适合关掉:翻译、改错字、格式转换、简单问答,以及对首字延迟敏感的交互场景。让用户多等二十秒换一段格式正确的 JSON,不值。而且开思考后 temperature 这类参数会失效(DeepSeek 思考模式直接忽略 temperature,top_p 也只认 0.95 到 1.0 的窄区间),想要输出的随机多样性反而做不到,这块原理在 temperature 那篇里展开过。
拿不准的中间地带,跑个对比就知道:同一批任务开和关各跑一遍,比正确率,比账单,数字会替你做决定。
至于推理模型和普通模型整体怎么选,我在这篇推理模型什么时候用里讲得更全,两篇配合着看刚好。
整篇收个尾
思考模式不是魔法,是用输出 token 买正确率。新一代模型把开关收走、只留强度,说明厂商默认你总是想要更准的答案,预算则留给你自己管。想清楚任务值不值这个价,把 max_tokens 给足,多轮对话按规则处理 reasoning_content,账单和延迟就都在掌控里。
你平时开思考吗?有没有哪种任务,你发现开了反而更慢更差?评论区聊聊。