蓝耘 MaaS 的「思考成本」怎么样我写了个剖析器把 6 个模型扒了个底朝天你以为大模型的账单只按「输出字数」收错。很多模型在你看不见的地方疯狂烧着reasoning token——这笔「思考成本」可能占到总消耗的95% 以上。今天我用蓝耘 MaaS 的 OpenAI 兼容接口写了一个可复用的Token 成本剖析器maas_profiler.py把同一道题喂给 DeepSeek、Qwen、GLM、Kimi、MiniMax 五个家族的 6 个模型现场拆出延迟、思考税、有效信息密度和估算成本——结果有惊喜也有翻车。一句话结论先放这里模型思考税有效密度延迟估算单价(¥)一句话点评DeepSeek-V3.20%1.953.17s¥0.00039 性价比王零思考税、高密度、最便宜kimi-k2.50%1.842.21s¥0.00076快且省无思考税deepseek-v4-flash61%0.723.10s¥0.00168有思考但可控minimax-m3100%3.4811.14s¥0.00339密度最高但全靠想慢GLM-5.20%0.004.85s¥0.00492 翻车烧了 400 token 吐出 0 字符qwen3.6-flash95%0.075.16s¥0.00724 双重翻车最贵最水⚠️ 单价为测试日示例估算值见文末 PRICE 表以控制台实时单价为准。为什么需要这个工具之前三篇文章教了怎么用 OpenAI SDK 接蓝耘 MaaS半小时上手client.chat.completions.create()最小闭环 ✅404→402 排障models.list()查模型名、usage 读 Token ✅流式输出streamTruereasoning_contentmax_tokens陷阱 ✅但这些都只回答了「能不能用」。真正上生产前你必须回答一个更关键的问题同样一句话不同模型到底烧了多少 Token其中多少是「看不见的钱」因为reasoning_tokens思考 token不计入content但你照样要为它付费不同模型对同一道题的「思考深度」差异巨大——有的想 50 个 token 就够了有的想近千个 token 还答非所问cached_tokens能省钱但它真的命中了吗后文会给你一个反直觉的真实案例所以我写了这个maas_profiler.py。动手写一个「体检台」核心思路同一道题 ──→ 并行喂给 N 个模型流式调用 │ ├── 每个 model 记录 │ TTFT首字延迟 │ 总耗时 │ prompt / completion / reasoning / cached tokens │ 输出字数 │ 有效信息密度 字数 ÷ completion_token │ 思考税 reasoning_token ÷ completion_token │ 估算成本 (P×输入价 C×输出价 R×输出价) / 1M │ └── 输出 JSON 终端排列表完整代码可直接复制运行#!/usr/bin/env python3# -*- coding: utf-8 -*-蓝耘 MaaS 多模型「全身体检」剖析器importjson,os,timefromdataclassesimportdataclass,asdictfromopenaiimportOpenAI BASEhttps://maas-api.lanyun.net/v1DEFAULT_MODELS[deepseek-v4-flash,/maas/deepseek-ai/DeepSeek-V3.2,qwen3.6-flash,/maas/zhipuai/GLM-5.2,kimi-k2.5,minimax-m3,]DEFAULT_PROMPT用不超过80字解释 KV Cache 是什么并给一个生活类比。dataclassclassRow:model:str;ok:bool;err:strttft:float0.0;total_sec:float0.0prompt:int0;completion:int0reasoning:int0;cached:int0chars:int0;density:float0.0tax:float0.0;cost_yuan:float0.0head:strdefprofile(client,model,prompt,max_tokens):t0time.time();ttftNonecontent,reasoning[],[]streamclient.chat.completions.create(modelmodel,messages[{role:user,content:prompt}],max_tokensmax_tokens,temperature0.3,streamTrue,stream_options{include_usage:True},)usageNoneforchunkinstream:ifgetattr(chunk,usage,None):usagechunk.usageifnotchunk.choices:continuedchunk.choices[0].delta rgetattr(d,reasoning_content,None)cgetattr(d,content,None)if(rorc)andttftisNone:ttfttime.time()-t0ifr:reasoning.append(r)ifc:content.append(c)sectime.time()-t0 txt.join(content);reason.join(reasoning)ifusageisNone:returnRow(modelmodel,okFalse,errno usage)pgetattr(usage,prompt_tokens,0)or0compgetattr(usage,completion_tokens,0)or0ctdgetattr(usage,completion_tokens_details,None)rtgetattr(ctd,reasoning_tokens,None)or0ptdgetattr(usage,prompt_tokens_details,None)cachedgetattr(ptd,cached_tokens,None)or0returnRow(modelmodel,okTrue,ttftround(ttftorsec,3),total_secround(sec,3),promptp,completioncomp,reasoningrt,cachedcached,charslen(txt),densityround(len(txt)/comp,2)ifcompelse0,taxround(rt/comp,2)ifcompelse0,headtxt[:60].replace(\n, ),)defmain():keyos.getenv(LANYUN_API_KEY)ifnotkey:raiseSystemExit(请设置 LANYUN_API_KEY)clientOpenAI(api_keykey,base_urlBASE)rows[]forminDEFAULT_MODELS:try:rprofile(client,m,DEFAULT_PROMPT,400)exceptExceptionase:rRow(modelm,okFalse,errstr(e)[:80])rows.append(r)statusf[OK]{m:35s}税{r.tax:.2f}密度{r.density:.2f}¥{r.cost_yuan}\ifr.okelsef[ERR]{m:35s}{r.err}print(status)# 按「思考税」排序ok[rforrinrowsifr.ok]print(\n--- 思考税排行越低越省---)forrinsorted(ok,keylambdax:x.tax):print(f{r.model:35s}税{r.tax:.2f}密{r.density:.2f})withopen(profiler_results.json,w)asf:json.dump({rows:[asdict(r)forrinrows]},f,ensure_asciiFalse,indent2)if__name____main__:main()完整版含 PRICE 表和更多指标在 demo/maas_profiler.py本文展示的是核心逻辑精简版。运行方式exportLANYUN_API_KEY你的密钥 python3 maas_profiler.py它会自动用client.models.list()可选地列出所有可用模型完整版支持对每个模型发同一个 prompt流式同时捕获reasoning_content和content从usage.completion_tokens_details.reasoning_tokens提取隐藏思考量打印终端表格 写出profiler_results.json实战跑一遍数据说话我在 2026-07-31 下午实跑了一次题目是「用不超过 80 字解释 KV Cache 是什么并给一个生活类比。」这是一道需要「理解 类比 字数控制」的综合题能较好地区分出哪些模型在认真思考、哪些在空转。终端原始输出节选图python3 demo/maas_profiler.py实跑输出——6 个模型的 TTFT、Token 消耗、密度、思考税一目了然。注意 qwen3.6-flash 的R877近千 token 在「想」和 GLM-5.2 的CHARS0白花钱。三个「翻车现场」翻车一qwen3.6-flash 的「95% 思考税」看这行数据C 927 R 877 CHARS69 密度0.07 税0.95completion tokens 927看着不少reasoning tokens 877占 94.6%实际输出字数 69不到 80 字限制的一半有效信息密度 0.07每 14 个 token 才换来 1 个中文字翻译成人话qwen3.6-flash 花了近一千个 token 在「想」最后只挤出了 69 个字。而且它还花了 5 秒多才完成。这不是 bug是特性——Qwen 系列默认开启强推理模式对于简单题也会做大量内部推理。如果你用它做高频低复杂度的任务比如客服自动回复、文案润色这笔「思考税」会让你的账单膨胀好几倍。翻车二GLM-5.2 的「空转翻车」C 400 CHARS0 密度0.00 税0.00 ¥0.00492GLM-5.2 烧了400 个 completion token但输出了0 个可见字符。它既没有返回 reasoning_content税0也没有返回 contentchars0。最离谱的是——它的估算成本还是所有模型里第二高的¥0.00492。这说明 GLM-5.2 在这道题上出现了纯空转token 计费了但用户什么都没收到。可能是模型触发了某种内部格式化/工具调用流程但没有正常回退到文本输出。在生产环境中这种「白花钱」的情况比 404 错误更隐蔽也更危险——因为你连报错都没有只是账单悄悄涨了。翻车三minimax-m3 的「标签泄漏 无视字数限制」C 400 R 399 CHARS1391 密度3.48 税1.00 CACHE128 headThe user asks me to explain what KV Cache is in no mo...三个问题叠加思考税 100%399/400 个 token 都是 reasoning把Think标签漏进了正文输出的 head 以英文开头说明原始推理标签没有被正确剥离无视 80 字限制输出了 1391 字要求 ≤80唯一亮点它是唯一命中 prompt 缓存的模型cached128说明 MiniMax 的缓存机制确实在工作。但如果缓存命中的内容还是带着泄漏标签的超长回复……那缓存只是在加速错误而已。把数据画出来三张图看透真相图 1每个模型的 completion token 里「可见内容」vs「隐藏思考」各占多少这张堆叠柱状图一目了然DeepSeek-V3.2 / kimi-k2.5 / GLM-5.2蓝色柱子可见内容占满红色思考为零——它们不烧思考税deepseek-v4-flash约 40% 是思考合理范围qwen3.6-flash几乎全是红色927 个 token 里 877 个是思考——这是典型的「过度思考」minimax-m3100% 红色——它在用思考 token 来生成内容标签泄漏导致 content 被归入 reasoning图 2哪个模型「惜字如金」有效信息密度排行密度 输出中文字数 ÷ completion token 数。越高说明每个 token 越值钱。minimax-m33.48密度最高——如果不算标签泄漏的话它确实很能装信息DeepSeek-V3.21.95/ kimi-k2.51.84高密度 零思考税 性价比双冠deepseek-v4-flash0.72中等偏下被思考拖累qwen3.6-flash0.07灾难级——14 个 token 换 1 个字GLM-5.20.00零——白花钱图 3性价比散点地图——左下角又快又省X 轴 总延迟越左越快Y 轴 估算成本越下越省气泡大小 信息密度越大越值颜色红度 思考税越红越烧理想区域左下角绿色大气泡DeepSeek-V3.2 和 kimi-k2.5快~3s、便宜¥0.001、零思考税、高密度危险区域右上角红色qwen3.6-flash 和 minimax-m3一个贵且水一个慢且满脑子都是想法中间地带deepseek-v4-flash各项均衡适合通用场景深坑排查我以为开了缓存能省钱结果命中率 0%在写这篇文章的过程中我还做了一个 Prompt Cache 实验复用了_deep_lab.py的 LAB3结果让我大吃一惊实验设计构造一个超长 system prompt4229 字符然后连续发 3 次完全相同的请求观察cached_tokens是否增长rules(项目规范条目代码必须有类型注解禁止提交密钥API 错误要结构化。*120)system你是资深后端工程师。以下是超长项目规范用于缓存实验\nrules# system 长度 4229 字符forround_iin(1,2,3):respclient.chat.completions.create(modeldeepseek-v4-flash,messages[{role:system,content:system},{role:user,content:只回复两个字收到},],max_tokens32,temperature0,)print(fRound{round_i}: P{resp.usage.prompt_tokens}fCACHED{resp.usage.prompt_tokens_details.cached_tokens})结果图4229 字 system prompt 连发 3 次CACHED0——缓存命中率 0%。唯一例外是 minimax-m3见正文数据表命中 128 cached。为什么我排查了几个可能的原因平台层未开启 Prompt Caching蓝耘 MaaS 作为统一网关可能在某些模型/路由上没有启用或透传上游的缓存功能。虽然usage结构里有cached_tokens字段说明协议支持但实际缓存策略取决于上游模型实现。模型不支持不是所有模型都实现了 prompt caching。DeepSeek-V3.2/V4 系列在官方 API 中支持但通过网关转发时行为可能不同。前缀匹配要求严格部分平台的缓存要求前缀如 system prompt完全一致且超过一定长度阈值如 1024 token。我的实验满足长度条件2305 1024但网关可能在请求级别做了某些修改如添加系统指令、改写 messages导致前缀不匹配。冷启动效应第一次请求建立缓存条目后续请求才能命中。但我的实验连续发了 3 次间隔 1.5 秒理论上应该命中。唯一例外minimax-m3 在主实验中命中了 128 个 cached tokens见上文数据表说明 MiniMax 这条线路的缓存确实在工作。这进一步佐证了「缓存能力因模型/路由而异」的判断。教训不要假设缓存一定生效。在上线前必须用类似上面的实验验证你的目标模型 目标路由是否真的命中缓存。否则你以为自己在享受折扣价其实一直在付全价。选型建议不同场景该选谁基于以上实测数据给出场景化选型建议场景推荐模型理由高频简单任务客服、摘要、分类DeepSeek-V3.2或kimi-k2.5零思考税 高密度 最便宜需要推理能力代码生成、数学、分析deepseek-v4-flash有适度思考61%但不失控速度可接受追求极致信息密度长文档压缩、知识提取minimax-m3需后处理过滤标签密度 3.48 远超其他但有标签泄漏问题预算极度敏感DeepSeek-V3.2本次实测单价最低¥0.00039/次需要 Prompt Cache 省钱minimax-m3唯一命中的但要先验证你的具体路由是否也命中避坑清单❌ 不要用qwen3.6-flash做简单任务——95% 思考税会让你哭❌ 不要用GLM-5.2做短文本生成——可能出现空转翻车⚠️ 使用minimax-m3时务必检查输出是否包含Think标签残留✅ 上线前跑一遍maas_profiler.py用真实数据选模型别凭感觉附录A. 示例单价表仅作估算参考⚠️ 以下为测试日从控制台/文档获取的示例价格以控制台实时显示为准。不同时段可能有浮动。模型输入价 (¥/M token)输出价 (¥/M token)deepseek-v4-flash28/maas/deepseek-ai/DeepSeek-V3.228qwen3.6-flash14/maas/zhipuai/GLM-5.2412kimi-k2.5412minimax-m314B. 完整脚本 数据剖析器完整版demo/maas_profiler.py含 PRICE 表、JSON 输出、多轮排序画图脚本demo/maas_chart.py读取 JSON → 3 张 PNG本次实测原始数据profiler_results.json更早的一组 6 组实验含并发/TTFT/多轮上下文增长demo/_deep_lab_out.txtC. 环境Python 3.9 / openai 1.40 / matplotlib 3.7Base URLhttps://maas-api.lanyun.net/v1注册送额度蓝耘元生代 MaaS推广码a1acd000c1本文所有数据均为2026-07-31 实时调用蓝耘 MaaS API 采集图表由matplotlib直接从 API 返回的usage字段生成未经人工修饰。如需复现克隆仓库后pip install -r demo/requirements.txt export LANYUN_API_KEY你的key python3 demo/maas_profiler.py即可。