Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Book: Claude Code VS OpenCode: Architecture, Design and The Road Ahead 章节: 第11章 — Claude Code的商业设计 Model: openai/gpt-5.4 Generated: 2026-04-01 Token Usage: 当前API环境不可见

11.2 成本控制

Claude Code 很“商业化”的一个特征,是它没有把成本留在后台账单里,而是把成本做成了产品内的一等公民。核心实现位于 src/cost-tracker.ts,配套有 src/costHook.ts/cost 命令,以及 QueryEngine.ts 中的预算检查。对于企业用户来说,这一点极其关键,因为 AI 编码代理不仅要好用,还要可控、可结算、可约束。

其中心能力是 按会话追踪美元成本。Claude Code 记录的不只是输入 token 与输出 token 总数,它还记录按模型分解的 usage、API 耗时、墙钟时间、增删代码行数、缓存创建 token、缓存读取 token,以及 web search 请求次数。cost-tracker.ts 会将不同模型的 usage 累加、规范化模型名称,并最终输出总费用与分模型费用。这说明 Claude Code 不是把 token 当成抽象资源,而是当成了财务事件。

更进一步,它显式区分了 cache creationcache read。这是一个非常成熟的设计,因为现代模型 API 往往会对新写入缓存的 token 与命中缓存的 token 使用不同计价。Claude Code 把两者单独记账,意味着系统可以区分“新上下文有多贵”和“重用上下文节省了多少”。很多代理会做缓存,但不会把节省效果透明呈现出来;Claude Code 则把缓存直接变成可审计的效率杠杆。

会话生命周期也被考虑进去了。cost-tracker.ts 支持在恢复会话时还原成本状态,并在退出时保存当前会话的累计成本。costHook.ts 则在进程退出时触发摘要输出与持久化。这说明成本统计并不依赖一次不间断的 CLI 运行,而是可以跨恢复、跨继续。这对于长会话、远程会话、协作会话都很重要。

Claude Code 还提供了硬性的 session budget,即 maxBudgetUsd。在 QueryEngine.ts 中,每轮消息流转后都会检查当前总成本是否已达到预算上限;一旦达到,就直接返回 error_max_budget_usd,并终止本轮执行。这不是提醒用户“你花得有点多了”,而是真正的超支阻断。换言之,它把成本从“可观察指标”提升成了“可执行策略”。

与此配套的是 /cost 命令。这个命令的价值不在于它能显示一串数字,而在于它把成本信息拉回到工作现场。开发者无需切到控制台或云账单页面,就能在当前代理会话中看到总费用、时长、模型分布以及缓存使用情况。这样一来,模型切换、上下文压缩、是否继续会话,都可以在成本感知下实时决策。

从企业视角看,这套设计天然支持 chargeback(内部费用分摊)。所谓 chargeback,就是把 AI 费用归因到正确的团队、仓库、项目或部门,以便内部核算。Claude Code 虽然未必在 CLI 内直接实现完整的财务分账系统,但它已经收集了分摊所需的关键数据:会话身份、模型维度、时间维度、成本维度、工作产出维度。换句话说,它已经为企业级计费治理准备好了底层遥测基础。

这也解释了为什么 Claude Code 的“上下文压缩”“模型选择”“会话继续”这些机制,看起来都带有明显的商业取向。因为在这里,token 不只是技术资源,还是成本资源;上下文不只是推理材料,还是财务负担。OpenCode 与 Oh-My-OpenCode 当然也能外接成本统计,但 Claude Code 把成本纳入了核心架构本身。

本节的结论是:严肃的代理系统,不能只有推理架构,还必须有财务架构。只要代理能长时间运行、频繁调工具、并行做任务,token 消耗就不再是后台细节,而会变成产品设计本身的一部分。Claude Code 的会话级美元跟踪、缓存感知计费、预算上限与 /cost 命令,正是这种商业成熟度的体现。