Qwen 3.8 27B reasoning_effort:为什么会过度思考、怎么省下 Token 账单
上周五,阿里 Qwen 团队发布了 Qwen 3.8 27B:一个 Apache-2.0 协议、270 亿参数、支持视觉的开源模型,17GB 的 Q4_K_M 量化文件就能在笔记本上跑。它确实很强:代码、工具调用、长上下文、图像理解都不错。但它出厂带一个很坑的默认:模型把 reasoning_effort 设成 xhigh(最强推理档)。Simon Willison 在 2026-08-16 的独立实测发现,这个默认会让模型几乎对什么都过度思考 — 思考 token 常常是回答 token 的 7 倍,在付费 API 上直接烧钱。本文是一份实战调优指南:reasoning_effort 是什么、过度思考的实测数据、怎么用代码限档或关掉、以及每个工作负载该用哪一档。
xhigh 推理是跑这个模型最大的隐藏成本。在已测案例里它用了 22,276 个思考 token 只产出 3,223 个(7 倍浪费)。大多数负载把 reasoning_effort 设成 "low" 或 "medium",琐碎请求直接关思考,通常能把思考 token 的开销砍掉 60–90%,同时该有的质量一点不掉。只有真正困难的一次成稿任务才值得留在 xhigh。问题:一个鼓励过度思考的默认值
Qwen 官方模型卡和随权重自带的 chat 模板写得很清楚:resolved_reasoning_effort = reasoning_effort|default('xhigh'),只允许 xhigh、medium、low 三档并默认 xhigh。三档官方说明:
- xhigh(默认)— 面向需要深度分析的复杂任务;提示词要求模型「仔细思考、校验关键假设、考虑替代方案」。
- medium — 兼顾准确性与速度。
- low — 面向速度与成本的高效推理;「保持思考简短聚焦,直接得出结论」。
思考模式也是默认开启的,可以在单次请求里关掉(模板用 enable_thinking 做判断),历史对话的推理上下文用 preserve_thinking 保留。这在实践里的意思是:一个不做任何调优的新 API 请求,你在看到答案之前,往往已经为一大堆看不见的思考 token 付了钱。
Simon Willison 的实测把这个问题放大到了极致。用模型默认设置本地跑 17GB 量化版,他让它画一个「骑自行车的鹈鹕」SVG。模型烧了 22,276 个推理 token 才产出 3,223 个回答 token(约 7 倍思考比),耗时 21 分钟。用关闭推理的完全相同提示词重跑,只需 3,715 token、约 137 秒。连「画一个圆的 SVG」这种琐碎请求,在 xhigh 下都会先花几分钟规划什么「包豪斯配色」,最后产出一个根本不是你要的东西。
不是说推理没用 — 它非常有用。同一篇文章里,开推理时它一次成稿搭出一个可用的图片框选工具;关推理后同样的构建把框放错了位置。过度思考是成本与延迟问题,不是质量问题。在付费 API 上,每一个推理 token 都按输出价计费,所以没调优的 xhigh 默认,能把一个几厘钱的问题变成几毛钱,再加几分钟延迟。
实测价格:这些思考 token 到底多贵
所有主流路线的推理 token 都按输出/completion价计费。截至 2026-08-23 的 Qwen 3.8 已验证价格如下:
| 路线 | 模型 | 输入 / M | 输出 / M | 缓存输入 / M |
|---|---|---|---|---|
| OpenRouter | qwen/qwen3.8-27b | $0.40 | $3.00 | $0.05 |
| OpenRouter | qwen/qwen3.8-2.4t-a95b | $2.00 | $6.00 | $0.25 |
| Workers AI | @cf/qwen/qwen3.8-27b | $0.45 | $3.20 | 暂无缓存行 |
把 Willison 实测的 7 倍思考比套到 OpenRouter 的 $3.00 / M 输出价上,画面就很吓人了。一个思考 22,276 token、回答 3,223 token 的请求,实际计费 25,499 个输出 token — 约 $0.077。关掉推理,同样的任务只需 3,715 个输出 token — $0.011。也就是说对不需要深度推理的任务,输出成本能省差不多 7 倍。反过来也说明:当你确实想要模型思考时,等于在花 ≈7 倍的输出预算买那番斟酌 — 这笔钱应该是主动花的,而不是被一个沉默的默认值吞掉的。
注意 OpenRouter 路线的缓存输入只要 $0.05 / M,这对 Agent 循环很重要:把大量重复的 system prompt 稳定缓存,每次轮询只按全价输出付推理预算。(Workers AI 这个模型还没有公开的缓存输入行 — 完整价格与 Neuron 换算见我们的 Workers AI Qwen 3.8 27B 指南。)
怎么在代码里调 reasoning_effort
在 OpenAI 兼容和 Qwen 原生端点,reasoning_effort 是顶层请求参数。最干净的部署是按路由建一套策略映射:琐碎调用默认 low(或关思考),困难的 Agent 调用保留 medium 或 xhigh。
1. Python(OpenAI SDK 或任意 OpenAI 兼容端点,例如 OpenRouter):
from openai import OpenAI
client = OpenAI(
api_key="YOUR_OPENROUTER_KEY",
base_url="https://openrouter.ai/api/v1",
)
# 琐碎抽取:不需要深度推理 - 用 low
low = client.chat.completions.create(
model="qwen/qwen3.8-27b",
messages=[{"role": "user", "content": "从这段文字里抽出模型名称。"}],
reasoning_effort="low",
max_tokens=300,
)
# 困难的一次成稿写代码任务:用 medium
hard = client.chat.completions.create(
model="qwen/qwen3.8-27b",
messages=[{"role": "user", "content":
"写一个 Python 函数,根据 0-1000 比例的 JSON 输入在图片上渲染带标签的包围框。"}],
reasoning_effort="medium",
)
print(hard.choices[0].message.content)
2. 对延迟敏感流量直接关掉思考。解析 transcript、归一化 JSON、批量转换这类任务,直接用 enable_thinking: false 跳过推理阶段:
resp = client.chat.completions.create(
model="qwen/qwen3.8-27b",
messages=[{"role": "user", "content": "把这个会话日志转成干净的 markdown。"}],
enable_thinking=False, # Qwen 原生 / 支持的宿主
max_tokens=1200,
)
3. curl,适合脚本和快速测试:
curl https://openrouter.ai/api/v1/chat/completions \
-H "Authorization: Bearer *** \
-H "Content-Type: application/json" \
-d '{
"model": "qwen/qwen3.8-27b",
"messages": [{"role": "user", "content": "用 5 个要点总结这个 README。"}],
"reasoning_effort": "low"
}'
4. 流式输出 + 用量遥测。推理 token 会出现在 reasoning_content 字段;请求 stream_options={"include_usage": true},就能按请求量出思考对回答的比例,据此微调 reasoning_effort:
stream = client.chat.completions.create(
model="qwen/qwen3.8-27b",
messages=[{"role": "user", "content": "简单解释一下量子计算。"}],
reasoning_effort="medium",
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
# chunk.choices[0].delta.reasoning_content -> 思考 token
# chunk.usage -> completion_tokens / prompt_tokens 总量
pass
如果你的服务商走的是 OpenAI 兼容 schema,留意 SDK 是否暴露了 reasoning_content — 有些网关会把它并进 content。无论哪种,usage 对象都是账单的最终真相。
每个负载该用哪一档
正确档位是任务难度的函数,不是对模型的忠诚度。一份可直接套用的默认策略:
| 负载 | reasoning_effort | 为什么 |
|---|---|---|
| 抽取、归一化、摘要、翻译 | low 或 off | 输出确定、延迟敏感、无需多步洞察 |
| 写代码、搭工具、一次成稿 Agent | medium | 性价比最佳;Willison 的工具构建开着推理也成功了 |
| 固定 system prompt 的长 Agent 循环 | medium | 静态上下文走 prompt-cache,只付每轮推理的钱 |
| 数学、逻辑、多步规划、调试 | xhigh | 把这个贵的默认留给真正需要深思的活 |
Agent 和本地跑场景里,除了限制思考 token,还要关注与它互补的原生多 token 预测(MTP)。在 llama.cpp 上用 --spec-type draft-mtp 跑 Qwen 3.8,同一份基准测出本地生成快约 72%,因为一个更便宜的草稿头会向前猜几个 token 让主模型快速校验。限 reasoning_effort 是减少你生成的 token 数量;MTP 是降低每 token 的时间。两个一起用是最便宜的快路径。
限制与坑
- 默认会穿透。如果你 fork 或自部署官方权重但不显式设置
reasoning_effort,chat 模板会强制xhigh。每个请求都显式传参,或在采样器默认里写死。 - 各家服务商接受度不同。不是每个 OpenAI 兼容宿主都以同样方式映射
reasoning_effort或enable_thinking。有些网关上这个参数会静默失效,你还是按默认付费 — 先做一次流式用量实测,再信任「low」标签。 - 思考 token 按输出价计费。推理不是免费的「隐藏」阶段,每个思考 token 都是账单上的一行 completion。把 system prompt 走缓存(OpenRouter 缓存输入 $0.05/M vs $0.40/M),让重复流量里只有推理是全价。
- 开推理在困难任务上确实更准。为了省钱全关,会毁掉写代码和搭工具的一次成稿质量。7 倍浪费是默认值的问题,不是全员关推理的理由。
- 上下文压力。本地默认上下文(8,192)下,过度思考可能在想完之前就把整个窗口耗尽导致截断。刻意跑
xhigh时把上下文/最大 token 调大。
FAQ
怎么查我这次请求实际用了哪档 reasoning_effort?用 stream_options={"include_usage": true} 流式计数 reasoning_content/usage。推理 token : 回答 token 的比例会立刻告诉你这个负载是否在过度思考。
Qwen 3.8 27B 和 Qwen3.8-Max 旗舰是同一个吗?不是。27B 是 270 亿参数、带视觉、面向边缘的开源模型(磁盘上 17GB 量化)。Max / 2.4T-A95B 以及 Qwen3.8-Max 旗舰是几千亿参数、每 token 贵得多,只在百炼和伙伴云上提供。Qwen 各档完整对比与百炼端点见我们的 百炼 API 指南。
走 OpenRouter 时 reasoning_effort 生效吗?生效。OpenRouter 的 qwen/qwen3.8-27b 标注支持推理,并透传顶层 reasoning_effort 参数。该路线的模型列表还显示它有 1M 上下文窗口,思考阶段空间很充裕。
能只保留思考但变便宜吗?能 — 全局默认设 "medium"、琐碎调用设 "low"(或关),把 "xhigh" 留给真正困难的一次成稿提示词。配合 prompt 缓存和本地跑 MTP 加速,就能保住模型真正的推理强项,又不用交 7 倍默认税。
总结
Qwen 3.8 27B 默认的 xhigh 推理,是运行这个模型最大的隐藏成本。官方 chat 模板强制它,实测思考对回答约 7 倍(参考案例 22,276 : 3,223),又因为思考按输出价计费,会在付费 API 上悄悄放大你的单次成本与延迟。修法很小也很机械:按路由传 reasoning_effort: "low"/"medium"(或 enable_thinking: false),缓存稳定提示词,只把 xhigh 留给需要深思的活。做到位,你在保住这个模型出色的代码、工具与视觉能力的同时,能把大部分流量的思考 token 花销砍掉 60–90%。权威的采样参数参考见官方 Qwen3.8-27B 模型卡,云端开箱即用的全价目表见我们的 Workers AI 定价指南。
如果你要把 Qwen(或 DeepSeek、OpenAI、Anthropic)接进应用,又想要按模型控制推理档位、只用一把 OpenAI 兼容 Key 而不是同时在五个后台来回切,FreeModel 是最省事的交接:一个后台、一份账单、跨区故障转移,无需胶水代码。