Claude Code插件开发:实现AI编程成本控制与Token预算管理
2026/4/28 11:43:22 网站建设 项目流程

1. 项目概述:为你的AI编程伙伴装上“流量监控器”

如果你和我一样,日常重度依赖 Claude Code 来辅助编程、调试代码,那你肯定也经历过那种“账单焦虑”。尤其是在使用 AWS Bedrock、Google Vertex AI 这类按量付费的后端时,一次长时间的对话或一个复杂的代码生成任务,都可能让 token 消耗量在不知不觉中飙升。Claude Code 本身功能强大,但它原生缺少一个简单直观的“每日预算”控制功能,这就像开着一辆没有油表的车跑长途,心里总是不踏实。

今天要聊的这个项目——claude-code-tokenbudget,就是来解决这个痛点的。它是一个 Claude Code 的原生插件,核心功能就一个:为你设定一个每日 token 消耗的上限,并在快超支时及时提醒甚至阻止你。它的设计非常巧妙,直接利用了 Claude Code 自身的插件钩子(Hook)系统,这意味着它不依赖任何特定的 AI 后端,无论是官方的 Claude 订阅、AWS Bedrock、Google Vertex,还是直接调用 API,它都能无缝工作。本质上,它就是在你的 Claude Code 会话流中,安插了两个“检查点”,一个在对话开始前检查余额,一个在对话结束后记录开销,从而实现了精准的预算控制。

对于任何需要控制 AI 辅助编程成本的开发者、团队或频繁使用者来说,这个工具都极具价值。它让你能从“事后看账单”的被动状态,转变为“事前设预算”的主动管理。接下来,我会带你从原理到实操,彻底拆解这个插件,分享我的配置心得和避坑经验,让你能稳稳地把每日 AI 编程成本控制在预期之内。

2. 核心原理与架构设计拆解

要理解这个插件为何有效,首先得弄明白 Claude Code 的插件系统是如何运作的。Claude Code 允许插件在特定的“事件”发生时介入执行自定义代码,这为功能扩展提供了极大的灵活性。claude-code-tokenbudget插件正是基于此,采用了“事件驱动”的轻量级架构。

2.1 双钩子协同工作机制

插件的核心是两个 Python 脚本,分别监听 Claude Code 工作流中的两个关键事件:

  1. enforce_quota.py(监听UserPromptSubmit事件):这是“哨兵”。每当你在 Claude Code 中输入提示词并按下回车,准备发起一次新的对话轮次(turn)时,这个事件就会触发。该脚本会立刻检查截至当前时刻,你今天已经消耗的 token 总数。如果这个数已经达到或超过了你在配置中设置的每日限额,它会直接“拦截”这次请求,向你显示一个超限提示,并阻止请求被发送到 AI 后端。这就从根本上杜绝了超支。

  2. track_tokens.py(监听Stop事件):这是“会计”。当 Claude 完成一次回复(即一个完整的对话轮次结束)时,Stop事件触发。该脚本会从本次对话轮次的元数据中,精确提取出本次请求消耗的输入 token 数和输出 token 数,然后将这个数字累加到当日的总使用量中,并持久化保存到本地文件。

这种设计非常高效和可靠。“哨兵”在前,确保不会发起可能超预算的请求;“会计”在后,负责准确记账。两者配合,形成了一个完整的预算控制闭环。

2.2 数据持久化与隔离策略

插件所有数据都存储在本地,默认路径是~/.claude-token-quota/。这是一个非常重要的设计,它保证了:

  • 隐私性:你的使用数据不会上传到任何第三方服务器。
  • 可靠性:不依赖网络,记账功能始终可用。
  • 灵活性:文件结构清晰,易于手动查看或备份。

每天的使用情况会存储在一个独立的 JSON 文件中,文件名就是当天的日期(例如2024-05-27.json)。文件内容大致如下:

{ "date": "2024-05-27", "total_tokens": 124750, "details": [ {"timestamp": "2024-05-27T10:15:30Z", "input_tokens": 120, "output_tokens": 560}, {"timestamp": "2024-05-27T11:20:15Z", "input_tokens": 345, "output_tokens": 1200} ] }

这种按日分文件存储的方式,使得每日重置(Quota Reset)变得非常简单——只需要在检查时判断文件名是否是今天即可。同时,插件还通过TOKEN_QUOTA_RETAIN_DAYS配置项,自动清理过期的历史文件(默认保留30天),避免了磁盘空间的无限增长。

2.3 与不同后端的兼容性思考

项目强调“Works with any backend”,这得益于其“事后记账”模式。无论后端是 Bedrock、Vertex 还是 Anthropic 官方 API,Claude Code 在收到回复后,其内部转录(Transcript)对象中都会包含本次交互最终的 token 计数。track_tokens.py脚本正是从这个转录对象中读取数据,因此完全绕开了不同 API 在请求参数或响应格式上的差异。只要 Claude Code 能正常工作并给出 token 计数,这个插件就能记账。

注意:这里有一个细微但关键的认知点。插件记录的 token 数来源于 Claude Code 会话的内部数据,理论上应与 AI 服务提供商(如 AWS)账单上统计的 token 数一致。但由于服务商可能涉及不同的计量精度或舍入规则,两者之间可能存在极其微小的差异。对于成本控制来说,这个差异通常可以忽略不计,插件数据足以提供高精度的预算参考。

3. 安装、配置与深度定制指南

了解了原理,我们就可以动手把它用起来了。安装过程非常简单,但一些配置细节和高级用法,能让你用得更顺手。

3.1 安装流程与验证

安装只需一条命令,通过 Claude Code 自带的插件市场完成:

claude plugin marketplace add thedavidwhiteside/claude-code-tokenbudget claude plugin install tokenbudget@claude-code-tokenbudget

执行后,插件会被永久安装到你的 Claude Code 环境中。此后,你启动的任何 Claude Code 会话都会自动加载并运行这个插件,无需额外指定参数。

安装后验证:为了确认插件已正确安装并激活,你可以打开 Claude Code,直接输入插件提供的状态查询命令:

/tokenbudget:status

如果安装成功,你会立刻看到类似“Today‘s usage: 0 / 1000000 tokens”的输出。如果提示命令未找到,可能需要重启一下你的终端或 Claude Code 应用。

临时试用模式:如果你希望对插件进行测试,或者不想永久安装,可以使用“临时目录”模式运行 Claude Code:

claude --plugin-dir /path/to/cloned/claude-code-tokenbudget

这会让 Claude Code 从你指定的本地目录加载插件,非常适合在贡献代码或调试插件功能时使用。

3.2 核心配置参数详解

插件的默认配置(每日100万token)可能不适合所有人。所有配置都通过修改 Claude Code 的用户设置文件~/.claude/settings.json来实现。如果该文件不存在,可以手动创建。

你需要关注以下三个环境变量,它们可以写在settings.jsonenv对象中:

{ "env": { "TOKEN_QUOTA_DAILY": "500000", "TOKEN_QUOTA_DIR": "/home/yourname/.my-claude-budget", "TOKEN_QUOTA_RETAIN_DAYS": "7" } }
  • TOKEN_QUOTA_DAILY(每日限额):这是最重要的参数。它的值是一个字符串形式的数字。如何设定一个合理的值?这需要结合你的后端定价模型。以文档中举例的 Claude Sonnet 4.6 on AWS Bedrock 为例,其混合成本约为 $5.40 / 1M tokens。那么:

    • 如果你想将日成本控制在$5左右,预算可设为925000
    • 控制在$10左右,预算可设为1850000
    • 插件默认的1000000大致对应$5.4/天。
    • 实操心得:我建议初期可以设置一个稍宽松的预算(比如200万),观察自己几天内的实际使用情况,再逐步调整到一个既能满足日常开发需求,又不会造成浪费的“甜蜜点”。
  • TOKEN_QUOTA_DIR(数据目录):用于存储每日 JSON 账本文件的路径。你可以修改它,例如放在一个同步网盘目录下,方便在多台机器间同步使用记录;或者放在一个更显眼的位置便于查看。修改此路径后,旧路径下的历史数据不会被自动迁移,如果需要,请手动移动文件。

  • TOKEN_QUOTA_RETAIN_DAYS(历史保留天数):控制保留多少天的历史账本文件。默认30天对于月度成本回顾已经足够。如果你磁盘空间紧张,或者只关心近期花费,可以将其调小,例如7

重要提示:修改settings.json后,必须完全退出并重启 Claude Code 应用,新的环境变量才会生效。仅仅重启终端标签页可能不够。

3.3 预算设定的实战计算逻辑

文档中给出的预算-花费对应表是一个很好的起点,但我们必须理解其背后的计算逻辑,才能灵活应对不同的模型和定价。

  1. 获取精确单价:首先,去你的 AI 服务商后台确认当前模型的精确价格。例如:

    • Anthropic API (Claude 3.5 Sonnet):输入 $3/1M tokens,输出 $15/1M tokens。
    • AWS Bedrock (Claude 3.5 Sonnet):价格可能与 API 略有不同,需在 AWS 控制台核实。
    • Google Vertex AI:同样有其定价体系。
  2. 估算输入输出比例:这是一个关键变量。在编程场景中,你输入的提示(代码、问题描述)通常比较精炼,而 Claude 输出的代码或解释可能很长。文档假设的 4:1(输入:输出)是一个常见的经验比例,但你的实际情况可能不同。你可以通过几次典型对话后,使用/tokenbudget:status命令查看详情,计算你自己的平均比例。

  3. 计算混合单价:假设你的输入输出比例为 1:3,单价为输入$3/1M,输出$15/1M。那么每 100 万 tokens 中,有 25 万是输入,75 万是输出。混合成本 = (0.25 * $3) + (0.75 * $15) = $0.75 + $11.25 = $12.0 / 1M tokens。

  4. 确定每日预算:如果你希望将日成本控制在 $10 以内。那么每日 token 预算 = ($10 / $12.0) * 1,000,000 ≈ 833,333 tokens。将这个数字取整,设为TOKEN_QUOTA_DAILY的值即可。

我的经验是:在项目初期设计或调试复杂算法时,token 消耗会比较大;而在日常编写简单函数或代码审查时,消耗则小很多。因此,预算最好能覆盖你的“高峰日”需求,或者配合工作节奏灵活调整(比如周末调低预算)。

4. 日常使用、状态监控与问题排查

插件安装配置好后,其运行是完全自动化的,无需额外干预。但在日常使用中,掌握状态查询和理解其行为边界,能让你更安心。

4.1 状态查询与额度检查

在任何 Claude Code 会话中,你都可以随时输入以下命令来获取预算使用情况:

/tokenbudget:status

命令会返回一个清晰的摘要,通常包括:

  • 今日已用/总预算:例如Today‘s usage: 247,850 / 1,000,000 tokens
  • 使用百分比:例如(24.8%)
  • 今日各次对话的 token 消耗明细:列出每次交互的时间、输入 token 数和输出 token 数,这对于分析使用模式非常有用。

当你的使用量接近或达到限额时,这个命令的输出就是你最重要的“仪表盘”。我习惯在开始一个可能耗时较长的新任务前,先查一下余额,做到心中有数。

4.2 超限行为与提示

当你的使用量达到每日限额后,插件会如何工作?这是其核心价值所在。

  1. 拦截提示:一旦尝试发送新提示,你会立即在 Claude Code 界面看到一个醒目的错误提示框(如文档中limit.png所示),明确告知“Daily token quota exceeded”。这次请求根本不会发送到 AI 后端。
  2. “超额”的细微差别:插件是在UserPromptSubmit事件(即发送新提示前)进行检查。这意味着,触发你达到限额的那最后一轮对话,其 token 消耗是在对话结束后才被记录的。因此,最终的总消耗量有可能会略微超过你设定的限额(例如超出几千 tokens)。文档指出,这与 Anthropic 官方配额系统的行为是一致的。从成本控制角度看,这种微小的溢出是完全可接受的。

4.3 常见问题与故障排查实录

即使工具设计得很健壮,在实际使用中也可能遇到一些小问题。以下是我遇到或能预见的常见情况及其解决方法:

问题一:修改了settings.json,但新配额未生效。

  • 现象:设置了新的TOKEN_QUOTA_DAILY,但/tokenbudget:status显示的还是旧限额,或者超限检查未按新值执行。
  • 排查
    1. 确认settings.json文件路径正确,且 JSON 格式无误(可以使用在线 JSON 校验工具)。
    2. 最关键的一步:确保你已经完全退出Claude Code 桌面应用程序,并重新启动。在 macOS 上,可能需要从 Dock 栏强制退出;在 Windows 上,检查任务管理器确保进程已结束。
    3. 重启后,立即使用/tokenbudget:status命令验证。

问题二:/tokenbudget:status命令无响应或报错。

  • 现象:输入命令后没有任何输出,或提示“Command not found”。
  • 排查
    1. 首先确认插件是否安装成功。可以检查插件目录是否存在(默认在 Claude Code 的插件安装位置,具体路径因系统而异)。
    2. 尝试以“临时目录”模式启动 Claude Code,指向插件的本地克隆,测试插件本身是否工作。
    3. 检查 Claude Code 版本。确保你使用的是支持插件系统的较新版本。

问题三:历史数据文件混乱或损坏。

  • 现象:状态显示异常,或者插件行为不符合预期。
  • 排查
    1. 导航到TOKEN_QUOTA_DIR指定的目录。
    2. 检查最新的 JSON 文件(以当天日期命名)。可以手动打开查看其格式是否正确。
    3. 如果怀疑文件损坏,可以重命名或移走当天的 JSON 文件(例如2024-05-27.json.bak)。插件在找不到当天的文件时,会创建一个新的。注意:这会丢失当天已记录的使用数据
    4. 检查TOKEN_QUOTA_RETAIN_DAYS设置是否过小,导致插件过早删除了你还想查看的历史文件。

问题四:Token 计数与账单有可见差异。

  • 现象:插件统计的月度总 token 数与 AWS/Azure 账单上的数字有出入。
  • 分析与处理
    • 时间区间:确保你对比的是完全相同的日期区间。账单可能按 UTC 时间切割,而插件按本地时间。
    • 模型切换:如果你在月中切换了不同定价的模型(例如从 Haiku 切换到 Sonnet),账单和插件的统计都是准确的,但混合单价变了,导致总成本对不上 token 数。这属于正常情况。
    • 微小差异:如原理部分所述,服务商计量舍入可能造成 <0.1% 的差异,无需担心。
    • 如果差异巨大:检查插件数据目录,确认所有日期的文件都在。极少数情况下,如果 Claude Code 异常崩溃,正在进行的最后一次对话的 token 数可能未被track_tokens.py成功记录。

我的避坑技巧:我养成了一个习惯,每周一早上打开 Claude Code 后,先运行一次/tokenbudget:status,并快速浏览一下上周的 JSON 文件。这不仅能让我了解上周的使用概况,还能及时确认插件运行正常,数据记录完整。同时,我会在日历上设置一个每月初的提醒,用于对比插件统计的 token 总数和云服务商的账单,确保两者在合理误差范围内一致。

5. 高级话题:插件机制与扩展可能性

对于开发者而言,这个插件也是一个学习 Claude Code 插件开发的优秀范例。它的代码结构清晰,没有外部依赖,逻辑直接。

5.1 插件运行机制深度解析

当你执行claude plugin install时,Claude Code 会从市场拉取插件代码,并将其安装到本地一个受管理的目录中。插件必须包含一个plugin.toml清单文件,其中定义了插件名称、版本、以及最重要的——钩子(hooks)

在本插件的plugin.toml中,你会看到类似这样的定义:

[[hooks]] event = “UserPromptSubmit” script = “enforce_quota.py” [[hooks]] event = “Stop” script = “track_tokens.py”

这告诉 Claude Code:当UserPromptSubmit事件发生时,去执行enforce_quota.py;当Stop事件发生时,去执行track_tokens.py。Claude Code 会向这些脚本注入当前会话的上下文对象(如session),脚本通过访问这个对象来获取 token 数据、发送消息等。

5.2 潜在的扩展方向

理解了基础版本,你可以基于此进行定制化开发:

  1. 周预算或月预算:当前插件严格按日历日重置。你可以修改enforce_quota.py中的检查逻辑,将数据存储和检查周期改为按周(每周一重置)或按月(每月1号重置)。这需要改动文件命名规则和配额检查的逻辑。

  2. 多维度预算告警:除了总额,你可能还想设置“单次对话 token 上限”或“每小时速率限制”。可以在enforce_quota.py中增加更复杂的检查逻辑。

  3. 可视化报告:写一个简单的脚本,读取TOKEN_QUOTA_DIR下的所有 JSON 文件,生成每周/每月的 token 消耗曲线图或汇总报表,帮助你更直观地分析使用习惯。Python 的matplotlibpandas库可以轻松实现。

  4. 团队使用场景:目前插件是单用户本地存储。对于小团队,可以创建一个共享版本,将数据目录指向一个共享网络存储或轻量级数据库(如 SQLite),并增加简单的用户身份标识,实现团队级的预算池管理。

为插件贡献代码:如果你有改进想法,项目的贡献流程非常标准。Fork 仓库后,从develop分支创建你的特性分支,完成开发并确保通过现有测试(python3 -m unittest tests/test_plugin.py -v),然后提交 Pull Request 回develop分支即可。清晰的代码和包含测试的 PR 更容易被合并。

6. 总结与最终建议

经过一段时间的深度使用,claude-code-tokenbudget插件已经成为了我 AI 辅助编程工作流中不可或缺的一环。它以一种“润物细无声”的方式运行,平时几乎感觉不到它的存在,但恰恰是这种透明性,让我彻底摆脱了对于 token 消耗的焦虑。我可以更加专注地向 Claude 提出复杂、深入的问题,而不用担心会在月底收到令人意外的账单。

回顾整个配置和使用过程,我最想分享的几点核心体会是:第一,预算设定需要结合实际情况动态调整。不要一次性设死,先观察自己一周的高峰和低谷使用量,找到一个平衡点。第二,养成定期检查状态的习惯/tokenbudget:status命令不仅是查看余额,更是分析自己与 AI 协作模式的窗口,有时你会发现某些类型的任务消耗 token 特别多,从而优化你的提问方式。第三,理解其设计边界。它是一款出色的“预算守护”工具,其计数基于 Claude Code 的会话数据,对于绝大多数场景精度足够。但对于需要与财务系统做毫厘不差对接的极端情况,仍需以服务商的官方账单为最终依据。

最后,这个插件的价值不仅在于省钱,更在于培养一种“资源意识”。在云计算和 AI 服务按量付费的时代,清晰地了解和控制资源消耗,是一名现代开发者必备的素养。这个插件用极简的方式,为我们补上了 Claude Code 生态中这块重要的拼图。如果你也在使用 Claude Code 进行开发,我强烈建议你花十分钟安装配置它,这可能是你今天在工具链上做的最高性价比的投资之一。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询