首页 >> 工具知识

Token都去哪了?深度扒皮:Claude在Minimax上的'抽水'行为为何远超OpenCode

你肯定碰到过这种情况:同样的 MiniMax 账号,同样聊代码,用 Claude Code 那个号的钱花得飞快,用 OpenCode 就还好。查后台,Token 消耗差好几倍。

钱去哪了?我先说结论:不是 MiniMax 的锅,不是模型"话多"的锅,核心差异在客户端。


一个常见误解

很多人以为"在 Claude Code 里配置了 MiniMax 的 API Base URL,就等于 Claude Code 直接跟 MiniMax 对接了"。不是的。

中间隔着一层。Claude Code 只认识 Anthropic Messages API 的格式,MiniMax 提供的是一个 OpenAI 兼容接口。这两个接口在结构层面上就不是一回事——不是一个换 URL 就能直连的关系。所以你的链路大概是这样的:

Claude Code(Anthropic 格式)→ CCSwitch/代理(格式转换)→ MiniMax(OpenAI 格式)

对比 OpenCode:

OpenCode(OpenAI 格式)→ MiniMax(OpenAI 格式)

少了一层。少了一层意味着什么?往下看。


MiniMax 的缓存到底是什么样的

先查了 MiniMax 的官方文档,它家缓存其实做得挺扎实的。有两种模式:

第一种:被动缓存(Passive,OpenAI 格式)

你只要用 OpenAI 兼容接口(/v1),什么都不用配,缓存自动生效。工作方式是前缀匹配,按这个顺序拼:

工具定义 → System Prompt → 用户消息

上一轮请求的前缀如果跟这一轮一样,命中的部分就按缓存价算。

MiniMax M3 的价格是这样:

  • 正常输入:$0.30 / 百万 Token
  • 缓存命中:$0.06 / 百万 Token

也就是说,命中缓存的部分直接打 2 折。而且写缓存不收费,只有读的时候才走折扣价。

响应里会有一个 cached_tokens 字段,你能直接看到每次请求有多少 Token 是缓存命中的。

第二种:显式缓存(Explicit,Anthropic 格式)

如果你走 MiniMax 的 Anthropic 兼容接口(/anthropic),可以用 cache_control 显式标记哪些内容该被缓存。跟 Anthropic 原生 API 的用法一样。这种模式下缓存 TTL 是 5 分钟,每次命中自动续。

M2.7 的价格:Input $0.30,Cache Read $0.06,Cache Write $0.375。同样输入打 2 折。


那问题来了——缓存这么好,为什么 Claude Code 还是贵?

先说清楚:MiniMax 的缓存没毛病,甚至挺大方。

问题出在两层。

第一层:System Prompt 大小差太多

Claude Code 的 system prompt 是从 Anthropic 官方那一套继承来的。里面包含完整的工具定义(读文件、写文件、执行命令、搜索、Agent、Workflow……每个工具的参数、用法全写清楚)、安全规范、输出格式要求、CLAUDE.md 的内容、项目结构摘要。

你在 Claude Code 里跑一次 /context 就能看到,system prompt 那一栏动不动就是几千 Token。这部分当然可以命中缓存——system prompt 从第二轮开始就不变了——但命中的是几千 Token 打折,不打折的时候这几千 Token 是全额计费。

OpenCode 的情况不一样。它从头就是按 OpenAI 格式设计的,工具定义和系统指令更精简。不是说功能少,是格式上先天更紧凑。

第二层:对话历史这玩意儿,缓存救不了

这是最容易被忽略的一点。

缓存能救的是"不变的部分"——system prompt、工具定义。对话历史是每轮都变的,你上一轮说"A",这一轮说"B",整个 messages 数组的前缀就变了。缓存机制是前缀匹配,前缀一变,后面全白搭。

在 Claude Code 里,你每说一句话,完整的历史对话(包括它读过的所有文件内容、执行的命令输出)都被保留,前缀一直在变,能持续命中的其实只有最开头那一段 system prompt。

在 OpenCode 里,对话历史的管理策略可能更激进——你可能发现它不会把十几轮前的细节记得那么清楚,但也因此上下文体积不会无限膨胀。

这个差异直接体现在账单上:假设你俩端都用 M3,system prompt 的几千 Token 享受了 2 折,但几万 Token 的对话历史部分——缓存完全救不了,全额计费。谁的对话历史更大,谁就花得更多。


手动算笔账

假设两种场景,都用 MiniMax M3,价格按输入 $0.30/百万 Token,缓存命中 $0.06/百万 Token。

场景一:短对话(5 轮,少量代码)

Claude Code:

  • System prompt + 工具定义:3000 Token(假设从第 2 轮起全缓存)
  • 每轮对话历史:约 2000 Token,5 轮后历史累积约 10,000 Token
  • 第 5 轮输入 ≈ 3000(缓存) + 10,000(全新) = 13,000 Token
  • 费用:3000 × 0.06/1M + 10,000 × 0.30/1M ≈ $0.00018 + $0.003 = $0.00318

OpenCode:

  • System prompt + 工具定义:800 Token(缓存)
  • 对话历史更紧凑,5 轮后约 5000 Token
  • 第 5 轮输入 ≈ 800(缓存) + 5000(全新) = 5800 Token
  • 费用:800 × 0.06/1M + 5000 × 0.30/1M ≈ $0.00005 + $0.0015 = $0.00155

差了一倍。原因:system prompt 大小 + 对话历史紧凑程度。

场景二:长对话(30 轮,工具调用密集)

到 30 轮的时候,Claude Code 的对话历史(包含工具调用、文件读取结果)可能已经膨胀到 50,000+ Token,而 OpenCode 因为更激进的历史压缩,可能控制在 15,000 Token 左右。

第 30 轮:

  • Claude Code 费用 ≈ 3000×0.06/1M + 50,000×0.30/1M = $0.015
  • OpenCode 费用 ≈ 800×0.06/1M + 15,000×0.30/1M = $0.0045

差了 3 倍多。差距来源几乎全是对话历史这坨"缓存救不了"的部分。


那 CCSwitch 那个翻译步骤到底有没有损耗?

有,但不是你想的那种"翻译过程本身吃掉了很多 Token"。格式转换增加的 Token 数量其实很小——更多是文本结构层面的细微差异。

真正值得注意的是:如果你的 CCSwitch 把 Anthropic 请求拆解后拼成 OpenAI 格式再发,那走的是 MiniMax 的被动缓存(OpenAI /v1 通道),缓存标记是系统自动检测的。

如果你的 CCSwitch 可以直接把请求转发到 MiniMax 的 Anthropic 兼容接口/anthropic),那 cache_control 标记就能原封不动地保留,走的是 MiniMax 的显式缓存通道。

这两种路径,缓存行为是不一样的。但不管哪条路,不变的内容最终都能被缓存——区别在于精确程度和命中率。而且不管哪种缓存模式,对话历史部分的缓存命中率都不会高到哪里去,因为它在持续变化。


Claude Code 的 compaction 呢?

Claude Code 是有 compaction 的——上下文快满的时候自动触发,把历史对话压成摘要。你也可以手动 /compact

但 compaction 只是把"旧对话"变成"更短的旧对话",不会让上下文体积归零。而且压完之后缓存需要重建——压缩后的摘要和之前的对话哈希不一样了,缓存前缀不匹配。

如果你的目标是省 Token,与其等上下文满了自动压,不如感觉差不多就 /compact 掉,别让对话历史无意义地膨胀下去。


怎么办

第一,明确你的目标。 Claude Code 的"记忆力好"是因为它保留了更完整的上下文,这不是 bug。OpenCode 的"省钱"是因为它压缩得更早、更狠。先想清楚你更需要记性好还是省得多。如果长对话是常态,Claude Code 全量历史带来的成本会很明显。

第二,别被缓存数字迷惑。 当你看到 MiniMax 后台显示"缓存命中率 40%"的时候,这 40% 大概率就是 system prompt 那几千 Token 在贡献。剩下 60% 的对话历史才是真正的花费大头。减少对话历史体积比提高缓存命中率更重要。

第三,善用 /compact/clear 觉得聊得差不多了就压一下。新话题直接清空重来。

第四,精简你的 CLAUDE.md。 里面每句话都在 system prompt 里,每次对话都得带着它。不能删的放进去,可有可无的删掉。

第五,subagent 分流。 Claude Code 的 Explore 子代理、OpenCode 的 subagent,都可以把大文件读取、代码搜索这种操作隔离到单独的上下文窗口里。主对话不会被撑大,Token 自然就省了。


最后一句实在话:

你感觉"Claude Code 在 MiniMax 上抽水",不是因为谁在偷你的 Token。是 Claude Code 的设计哲学就是"多带点上下文,让模型更聪明",而 MiniMax 虽然缓存做得不错(写缓存免费、读缓存打 2 折),它也救不了"每轮对话历史都在变"这个根本问题——而这个问题在 Claude Code 里更严重,因为它的对话历史通常比 OpenCode 大得多。

你花的每一分钱,都体现在那份更长、更详细的对话历史上。值不值,你自己判断。

所有评论

最新文章
Token都去哪了?深度扒皮:Claude在Minimax上的'抽水'行为为何远超OpenCode2026-07-10
ai编程中的强大skill2026-05-15
Elastic-Job 的发展历程、核心特性(Lite 与 Cloud)2026-02-27
分布式任务调度场景与挑战2026-02-27
图片验证码之hutool生成图片验证码2025-11-28
关于我2025-11-12
关于我 备案号:蜀ICP备2023042032号-3