1. 项目概述:为什么我们需要一个AI代币用量监控工具?
如果你和我一样,在过去一年里深度使用了不止一个AI编程助手——比如在终端里用着OpenCode,在IDE里开着Cursor,偶尔还让Claude Code帮忙写写文档——那你肯定有过这样的困惑:我这个月到底在这些AI工具上花了多少钱?哪个模型用得最多?哪个客户端的性价比最高?
这个问题听起来简单,但实际操作起来却异常棘手。每个AI助手都把使用数据存在自己的一套“黑盒”里:OpenCode的数据在~/.local/share/opencode/opencode.db,Claude Code的在~/.claude/projects/,Cursor的则需要通过API去拉取。它们的数据格式五花八门,有SQLite数据库、有JSON文件、有CSV,甚至还有自定义的二进制格式。更头疼的是,各家模型的定价策略天差地别,GPT-4o、Claude 3.5 Sonnet、Gemini 2.0 Flash,每个模型的输入、输出、推理(Reasoning)token价格都不一样,而且还在动态调整。
于是,你可能会像我最初那样,尝试写几个蹩脚的脚本,用sqlite3命令去查数据库,用jq去解析JSON,然后手动去OpenAI或Anthropic的官网查最新的价格表,最后在Excel里拼凑出一个大概的数字。这个过程不仅繁琐、容易出错,而且几乎无法做到实时。当你某天突然发现账单超支时,往往为时已晚。
Tokscale就是为了解决这个痛点而生的。它本质上是一个高性能的CLI工具和可视化看板,专门用来跨平台、跨客户端地追踪和分析你的AI代币消耗与成本。它的核心价值在于统一和透视:把散落在各个角落的、格式各异的使用数据,统一采集、解析、聚合,并按照真实的、动态的市场价格计算出成本,最后以一个直观的终端界面(TUI)或网页图表呈现给你。
你可以把它想象成你个人AI消费的“家庭能源监测仪”。就像智能电表能告诉你空调、冰箱、电脑各自用了多少度电一样,Tokscale能告诉你,你的OpenCode在Claude Opus上烧了多少钱,Cursor在GPT-5.3-Codex上又花了多少预算。
2. 核心设计思路:从“卡达谢夫尺度”到“代币尺度”
这个项目的名字“Tokscale”很有意思,它源自一个天文学概念——卡达谢夫尺度。这是天体物理学家尼古拉·卡达谢夫提出的一种衡量文明技术先进程度的方法,依据是其能量消耗水平:I型文明能利用其行星上的所有可用能量,II型文明能捕获其恒星的全部输出,III型文明则能掌控整个星系的能量。
在AI辅助开发的时代,代币(Token)就是新的能量。它们驱动着我们的推理,为我们的生产力提供燃料,并推动着我们的创造性产出。Tokscale的愿景,就是为AI增强型开发者提供一个衡量自身“代币文明”等级的标尺。无论你是一个偶尔用用的休闲用户,还是每天消耗数百万代币的重度开发者,Tokscale都能帮你可视化你的攀升之旅——从一个“行星级”的开发者,逐步成长为“星系级”的代码架构师。
从技术实现上看,这个愿景被拆解成了几个清晰的设计目标:
- 性能优先,原生核心:处理GB级别的会话日志文件,如果只用JavaScript单线程去解析,速度会慢得令人难以忍受。因此,Tokscale的核心数据解析和聚合逻辑是用Rust编写的,并通过Node-API暴露给上层的Node.js/Bun层。Rust的零成本抽象、内存安全以及强大的并发能力(特别是Rayon库提供的并行迭代器),使得文件扫描和JSON解析的速度提升了近10倍。这是整个工具流畅体验的基础。
- 无侵入式数据采集:Tokscale绝不要求你修改AI客户端的任何配置,也不需要在你的代码中插入任何SDK。它完全通过读取各客户端在本地磁盘上生成的会话文件、数据库或缓存文件来工作。这是一种“只读”的监控方式,最大程度保证了与你现有工作流的兼容性。
- 实时、准确的价格计算:代币成本的计算不能依赖一份静态的、过时的价格表。Tokscale集成了LiteLLM的定价数据源,这是一个社区维护的、覆盖了绝大多数主流和长尾模型的价格数据库。工具会定期(默认缓存1小时)从网络获取最新的价格信息,并支持分层定价模型和缓存token折扣等复杂计费逻辑。对于LiteLLM尚未收录的最新模型(比如Cursor刚推出的某个新模型),它还内置了硬编码的定价作为后备方案。
- 极致的用户体验:对于开发者而言,最好的工具往往就在终端里。Tokscale默认提供了一个基于Ratatui库构建的、交互体验极佳的终端用户界面。你可以用键盘或鼠标在6个不同的数据视图间切换,像玩一件趁手的乐器一样探索你的数据。同时,它也提供了
--light模式用于简单的表格输出,以及--json模式方便你集成到自己的脚本或CI/CD流水线中。
3. 安装与快速上手:一分钟内看到你的AI消费全景图
Tokscale的安装简单到令人发指,这得益于现代JavaScript包管理器的便利性。你甚至不需要全局安装它。
3.1 最简安装方式
打开你的终端,直接运行以下任一命令:
# 使用 npx (Node.js 用户) npx tokscale@latest # 或者使用 bunx (Bun 用户) bunx tokscale@latest就这么简单。这条命令会从npm仓库拉取最新的Tokscale版本(一个名为@tokscale/cli的包,其中包含了预编译好的Rust原生模块),并直接启动交互式TUI界面。你第一次运行时,它会自动扫描你的系统,寻找所有已支持的AI客户端的会话数据。
注意:
tokscale这个包名是一个别名包,类似于著名的swc。它实际安装的是@tokscale/cli。无论你通过哪种方式安装,最终得到的都是同一个包含了Rust核心的CLI工具。
3.2 首次运行与数据发现
第一次运行tokscale时,你可能会在终端看到它飞快地掠过一系列扫描路径:
Scanning OpenCode sessions... Scanning Claude Code projects... Scanning Cursor usage via API... ...这个过程通常只需要几秒钟。扫描完成后,一个全屏的、色彩丰富的TUI界面就会呈现在你面前。默认是“概览”视图,通常会展示一个饼图或条形图,显示你总成本的分布,以及一个按成本排序的模型列表。
如果某些客户端你从未安装或使用过,Tokscale会安静地跳过它们,不会报错。它只报告它找到的数据。
3.3 给高级用户的提示:从源码构建
对于想要贡献代码、修改功能,或者单纯想体验最新开发版功能的用户,可以从GitHub克隆源码进行本地开发。
# 1. 克隆仓库 git clone https://github.com/junhoyeo/tokscale.git cd tokscale # 2. 安装 Bun (如果尚未安装) # macOS/Linux curl -fsSL https://bun.sh/install | bash # 或者参考官方文档安装 # 3. 安装项目依赖 bun install # 4. 构建Rust原生核心模块 (关键步骤!) bun run build:core # 这个过程会调用 cargo build --release,可能需要几分钟,取决于你的网络和机器性能。 # 5. 进入CLI包目录并运行开发模式 cd packages/cli bun run dev # 或者直接使用项目根目录的快捷命令 bun run cli为什么一定要构建原生模块?因为Tokscale的所有重活——并行文件系统遍历、SIMD加速的JSON解析、大规模数据聚合——都是在Rust层完成的。没有这个原生模块,CLI将无法工作。通过bunx安装时,你下载的包内已经包含了针对主流平台(macOS ARM/Intel, Linux, Windows)预编译好的二进制文件,所以无需手动构建。
4. 深入TUI:像高手一样探索你的数据
默认启动的交互式TUI是Tokscale的精华所在。它不是一个简单的表格输出,而是一个功能完整的终端应用。我们来详细拆解它的每一个部分。
4.1 六大核心视图
在TUI中,你可以通过按数字键1到6,或者使用左右方向键、Tab键在以下六个视图间切换:
- 概览 (Overview):这是默认视图。上半部分通常是一个图表(如成本分布饼图),下半部分是一个列表,显示按总成本或总token数排名的前几个模型。它能让你在3秒内对整体消费情况有个宏观把握。
- 模型 (Models):这是最常用的详细视图。它以表格形式列出所有检测到的模型,并显示每个模型的详细数据:总成本、总Token数(进一步拆分为输入、输出、缓存读写、推理Token)、平均每次会话的成本和Token数、以及使用该模型的客户端来源。你可以在这里进行排序和筛选。
- 每日摘要 (Daily):按天聚合数据。这个视图对于观察你的使用习惯非常有用。你可以看到哪几天是“高产日”,哪几天比较“节俭”。它有助于你建立预算意识,比如“每周的AI消费不超过50美元”。
- 每小时摘要 (Hourly):按小时聚合数据。这个视图能揭示你工作流中的“高峰时段”。也许你会发现,每天下午3点到5点是你最依赖AI的时候,这可能对应着你集中处理复杂代码或撰写文档的时间。
- 统计 (Stats):这是一个仿GitHub贡献图的日历热力图。每个小方块代表一天,颜色越深表示那天消耗的代币或成本越高。它提供了另一种直观的、时间序列的视角。你可以一眼看出自己过去一个月、一年的活跃模式。
- 客户端 (Agents):这个视图按AI客户端(如OpenCode, Cursor, Claude Code)来聚合数据。它可以回答“我在哪个工具上花钱最多?”这个问题。对于管理多个工具订阅的用户来说,这个信息至关重要。
4.2 键盘与鼠标导航
Tokscale的TUI支持完整的键盘和鼠标操作,这让你在终端里也能获得接近GUI应用的体验。
键盘快捷键大全:
1-6/←/→/Tab:在六个主视图间切换。↑/↓:在列表视图中上下移动选择。c/d/t:在模型或每日视图中,快速按成本(c)、日期(d)、Token数(t)进行排序。s:打开“数据源筛选”对话框。你可以用空格键勾选或取消勾选特定的AI客户端(例如,只看OpenCode和Cursor的数据)。g:打开“分组策略”对话框。这是高级分析的关键功能,我们稍后会详细解释。p:循环切换9种不同的配色主题。从经典的GitHub绿到万圣节橙、科技蓝、少女粉,总有一款适合你的终端主题和心情。r:手动刷新数据。当你刚刚完成一段密集的AI编码会话后,可以按r重新扫描文件,更新视图。e:将当前视图的数据导出为JSON文件。方便你进行二次分析或生成自定义报告。q:退出应用。
鼠标操作:
- 直接点击顶部的标签页可以切换视图。
- 点击列表中的行可以选中。
- 在某些图表视图中,鼠标悬停会显示更详细的数据提示框。
4.3 理解“分组策略”:数据聚合的魔法
按下g键打开的分组策略对话框,是Tokscale提供的一个非常强大的分析工具。它决定了“模型”视图中的每一行数据是如何被聚合出来的。
为什么需要这个?想象一下这个场景:你在OpenCode和Claude Code两个客户端里都使用了claude-3-5-sonnet这个模型。在计算总成本时,你是想把它们合并成一行来看总数,还是分开两行来看每个客户端的用量?
Tokscale提供了三种粒度:
- 按模型分组 (
--group-by model):这是TUI的默认策略,也是最聚合的视图。所有客户端、所有提供商(Provider)中,只要是同一个模型名称,就会被合并到一行。例如,OpenCode和Claude里的claude-opus-4-5会被加总,显示一个总成本和总Token数。这回答了“我最爱用哪个模型?”这个问题。 - 按客户端+模型分组 (
--group-by client,model):这是CLI的--light模式的默认策略。它会为每个“客户端-模型”组合创建单独的一行。例如,“OpenCode使用claude-opus-4-5”是一行,“Claude Code使用claude-opus-4-5”是另一行。这回答了“我在哪个客户端上,主要用哪个模型?”的问题。 - 按客户端+提供商+模型分组 (
--group-by client,provider,model):这是最精细的粒度。它甚至会把同一个客户端里,通过不同提供商调用的同一模型分开。例如,OpenCode可能通过github-copilot提供商调用claude-opus-4-5,也可能通过anthropic提供商调用。这个策略会把它们分成两行。这适用于深度排查成本差异的场景。
选择策略的技巧:
- 日常监控:用默认的“按模型分组”即可,一目了然。
- 成本分摊:如果你需要向不同项目或团队报销费用,用“按客户端+模型分组”,可以清晰地区分工具来源。
- 问题诊断:如果你发现某个模型的总成本异常高,切换到“按客户端+提供商+模型分组”,可以帮你定位到是哪个具体的调用路径导致了高消费。
4.4 个性化配置:让工具更贴合你的习惯
Tokscale会将你的偏好设置持久化到~/.config/tokscale/settings.json文件中。你可以直接编辑这个文件,或者在TUI中通过某些操作间接修改它(比如切换主题会被自动保存)。
一个典型的配置文件如下:
{ "colorPalette": "teal", "includeUnusedModels": false, "autoRefreshEnabled": false, "autoRefreshMs": 60000, "nativeTimeoutMs": 300000, "scanner": { "extraScanPaths": { "codex": [ "/Volumes/ExternalDrive/old_projects/.codex_backup/sessions" ] } } }关键配置项解析:
colorPalette: 设置你偏爱的主题颜色。可选值有green,halloween,teal,blue,pink,purple,orange,monochrome,ylgnbu。includeUnusedModels: 设为true时,报告里会包含那些Token数为0的模型。这在你想查看所有可能被使用的模型列表时有用。scanner.extraScanPaths:这是一个极其有用的功能。假设你有一些历史项目,它们的Codex会话文件没有放在默认的~/.codex/sessions目录,而是放在项目目录内(例如/path/to/project/.codex/sessions)。你可以在这里添加额外的扫描路径,Tokscale会在每次运行时一并扫描这些位置。路径是按客户端分类的,支持添加多个路径。
5. 命令行实战:从基础查询到高级集成
虽然TUI很强大,但命令行模式(--light)和脚本化输出(--json)在自动化、集成和快速查询方面无可替代。
5.1 基础命令与过滤
# 启动轻量级CLI表格输出(无TUI) tokscale --light # 只看模型视图的表格输出 tokscale models --light # 只看OpenCode的数据 tokscale --light --opencode # 只看今天的数据 tokscale --light --today # 组合过滤:只看过去7天,OpenCode和Claude的数据 tokscale --light --week --opencode --claude # 输出JSON格式,便于用jq等工具处理 tokscale --json | jq '.[0] | {model, total_cost}' tokscale models --json > monthly_report.json日期过滤的实用技巧:
--today、--week、--month这些快捷参数非常方便。--since和--until参数接受YYYY-MM-DD格式的日期,并且是包含端点的。时区使用你的本地系统时区。- 你可以用
--year 2024来快速查看某一整年的数据,做年度复盘。
5.2 价格查询:随时了解模型定价
Tokscale内置了一个离线的价格查询命令,它调用的是和主程序相同的LiteLLM定价数据。
# 查询某个模型的当前定价 tokscale pricing "claude-3-5-sonnet-20241022" # 输出示例: # Model: anthropic/claude-3-5-sonnet-20241022 # Input: $3.00 / 1M tokens # Output: $15.00 / 1M tokens tokscale pricing "gpt-4o" tokscale pricing "gemini-2.0-flash-thinking-exp" # 强制指定提供商(当模型名有歧义时) tokscale pricing "claude-3-5-sonnet" --provider anthropic tokscale pricing "claude-3-5-sonnet" --provider openrouter这个功能在什么时候有用?
- 预算规划:在启动一个可能消耗大量token的长期任务前,先查一下目标模型的单价,做个粗略估算。
- 模型选型:对比不同模型的性价比。例如,
claude-3-5-haiku比claude-3-5-sonnet便宜很多,但在某些简单任务上效果可能差不多。 - 理解账单:当你在Tokscale里看到某个模型成本很高时,可以用这个命令确认一下是不是因为它本身单价就贵。
5.3 无头模式:为CI/CD流水线而生
这是Tokscale一个非常酷的特性,专门为自动化场景设计。想象一下,你在一个GitHub Actions的CI流水线中,使用Codex CLI的--json模式批量处理一些任务(比如自动生成代码注释、审查PR)。这些会话数据默认只会输出到stdout,而不会保存到本地~/.codex/sessions/目录。
无头模式就是为了捕获这些“流离失所”的会话数据。
它是如何工作的?Tokscale会监控一个特定的目录:~/.config/tokscale/headless/(在macOS上还会检查~/Library/Application Support/tokscale/headless/)。你可以通过环境变量TOKSCALE_HEADLESS_DIR来自定义这个目录。
在这个目录下,为每个支持的客户端创建一个子目录(目前主要是codex/)。然后,将CI任务中Codex CLI的JSON输出重定向到这个目录下的文件里。
实战示例:
# 在你的CI脚本中(例如GitHub Actions的step) - name: Run AI-powered code review run: | # 1. 确保头模式目录存在 mkdir -p ~/.config/tokscale/headless/codex # 2. 运行Codex CLI,并将JSON输出保存到指定文件 # 文件名可以包含一些上下文,比如PR编号 codex exec --json "review the changes in this pull request for security issues" \ > ~/.config/tokscale/headless/codex/pr-${{ github.event.pull_request.number }}.jsonl # 在同一个workflow的后续步骤中,你可以汇总报告 - name: Report CI token usage run: | tokscale --light --today # 或者导出JSON用于后续处理 tokscale --json --today > ci_usage_${{ date 'YYYY-MM-DD' }}.json更优雅的方式:使用tokscale headless包装命令Tokscale提供了一个更简单的包装命令,可以自动完成目录创建和输出重定向:
# 使用 tokscale headless 来运行Codex命令,它会自动捕获输出 tokscale headless codex exec -m gpt-5 "implement the new API endpoint"这条命令会在背后执行:创建必要的目录,运行codex exec,并将其stdout和stderr重定向到headless目录下的一个时间戳文件中,同时将原内容输出到你的终端。这样,这次会话的用量就会被Tokscale追踪到。
5.4 数据源诊断
当你怀疑Tokscale没有扫描到某些数据时,可以使用sources命令来诊断。
# 显示Tokscale扫描的所有数据源位置和找到的会话数量 tokscale sources # 以JSON格式输出,便于解析 tokscale sources --json这个命令会列出它为每个客户端检查的默认路径、你在配置文件中设置的extraScanPaths,以及环境变量TOKSCALE_EXTRA_DIRS指定的路径。对于每个路径,它会显示是否可访问以及找到了多少会话文件。这是排查数据缺失问题的第一利器。
6. 高级集成:Cursor IDE与社交平台
6.1 集成Cursor IDE:获取最准确的用量数据
Cursor IDE的情况比较特殊。它不像OpenCode或Claude Code那样将完整的会话日志存储在本地明文文件中。为了获取详细的token用量,Tokscale需要通过Cursor的API来查询。这就需要认证。
设置Cursor集成(一次性操作):
获取你的Cursor会话令牌:
- 在浏览器中打开 https://www.cursor.com/settings。
- 打开开发者工具(F12)。
- 方法A(推荐):切换到“网络”(Network)标签页。在页面上随便点击一个按钮触发一个网络请求。在请求列表中,找到一个指向
cursor.com/api/域的请求。查看它的“请求头”(Headers),找到Cookie头。在其中找到WorkosCursorSessionToken=后面的那一长串字符串,复制它。 - 方法B:切换到“应用程序”(Application)标签页(在Chrome中),然后找到“存储”(Storage) -> “Cookie” ->
https://www.cursor.com。在列表中找到名为WorkosCursorSessionToken的Cookie,复制它的“值”(Value)。
⚠️ 重要安全警告:这个会话令牌(Session Token)就像你的密码。绝对不要把它分享给任何人,也不要提交到任何公开的版本控制系统(如GitHub)。拥有这个令牌的人可以完全访问你的Cursor账户。
在Tokscale中登录:
tokscale cursor login运行这个命令,它会提示你粘贴刚才复制的令牌。你还可以通过
--name参数给这个账户起个名字(比如work或personal),方便管理多个账户。验证与状态检查:
# 检查当前登录状态和会话有效性 tokscale cursor status # 列出所有已保存的Cursor账户 tokscale cursor accounts
工作原理与数据缓存:Tokscale登录后,会将你的凭证安全地存储在~/.config/tokscale/cursor-credentials.json中。当你运行tokscale命令时,它会调用Cursor的API来获取用量数据。为了提高性能并减少API调用,Tokscale会将获取到的数据缓存到本地~/.config/tokscale/cursor-cache/目录下(主账户用usage.csv,其他命名账户用usage.<account>.csv)。默认情况下,它会聚合所有已保存账户的缓存数据。
账户管理:
# 切换到另一个已保存的账户(控制哪个账户的数据同步到主缓存) tokscale cursor switch personal # 登出一个账户(将其从聚合中排除,但保留历史缓存) tokscale cursor logout --name work # 登出并删除该账户的所有缓存数据 tokscale cursor logout --name work --purge-cache # 登出所有账户 tokscale cursor logout --all登出操作并不会删除你的Cursor账户,只是让Tokscale不再使用那个令牌。被登出的账户,其缓存文件会被移动到cursor-cache/archive/文件夹,这样它们就不会被计入总用量了。
6.2 加入社交平台:与全球开发者同台竞技
Tokscale不仅仅是一个本地工具,它还有一个在线的社交平台(https://tokscale.ai)。在这里,你可以选择匿名分享你的用量数据,参与全球排行榜,并拥有一个展示你AI编码旅程的公开主页。
如何参与?
- 登录:运行
tokscale login。这会打开你的默认浏览器,引导你通过GitHub OAuth进行授权。整个过程是安全、标准的OAuth流程,Tokscale只会获取你GitHub账户的基本公开信息(如用户名、头像)。 - 提交数据:运行
tokscale submit。这会将你本地聚合的、经过匿名化处理(不包含任何代码或会话内容,只有用量元数据)的数据上传到Tokscale的服务器。 - 查看你的档案:访问 https://tokscale.ai/u/你的GitHub用户名,你就能看到一个漂亮的个人主页,上面有你的贡献图、常用模型、消费趋势等。
数据验证与隐私:提交的数据会经过L1级别的验证:检查数学一致性(总和是否匹配、没有负数)、日期是否在未来、必填字段是否存在、以及重复提交检测。平台设计以隐私为先,它不收集你的代码、对话内容或任何个人身份信息,只收集聚合后的用量统计。
在GitHub个人主页展示:你甚至可以将你的Tokscale数据卡片嵌入到GitHub Profile的README中,就像展示你的编程语言统计或贡献图一样。
[](https://tokscale.ai/u/你的GitHub用户名)你还可以通过URL参数自定义这个卡片:
?theme=light使用浅色主题。?sort=cost按成本排序(默认按token数)。?compact=1使用紧凑的数字格式(如1.2K, $3.4M)。
7. 可视化前端:你的3D贡献图
除了CLI,Tokscale还提供了一个现代化的Web前端,用于数据可视化。它最大的亮点是一个3D等距投影的GitHub风格贡献图。
运行前端:
# 在项目根目录下 cd packages/frontend bun install bun run dev然后在浏览器中打开 http://localhost:3000。
前端核心功能:
- 2D/3D视图切换:经典的2D日历热力图和更具视觉冲击力的3D图表,方块的高度代表那天的用量强度。
- 主题跟随系统:自动检测你的操作系统主题(亮色/暗色),也可以手动切换。
- 交互式提示:鼠标悬停在日历的某一天上,会弹出该天的详细用量 breakdown。
- 多维度筛选:可以按年份、按AI客户端进行筛选,聚焦你想看的数据。
- 数据面板:显示总成本、总Token数、活跃天数、最长连续使用 streak 等统计信息。
这个前端不仅可以用来看自己的数据,在登录社交平台后,也可以查看其他公开用户的贡献图,有一种“参观别人花园”的趣味性。
8. 生成你的“年度总结”:Wrapped 2025
受到Spotify Wrapped的启发,Tokscale也提供了一个wrapped命令,可以为你的AI编码生涯生成一张精美的年度总结图片。
# 生成当前年度的总结图 tokscale wrapped # 图片会自动保存,通常在当前目录下,文件名类似 `wrapped-2025-<你的用户名>.png` # 生成指定年份的总结图 tokscale wrapped --year 2024这张图里有什么?
- 年度总览:消耗的总Token数、总成本。
- Top 3 模型:按成本排序,你今年最烧钱的三个AI模型是谁?
- Top 3 客户端:你在哪个工具上花的时间(和金钱)最多?
- 互动统计:总消息数、有AI交互的天数。
- 最长连续使用 streak:你最长连续多少天都在使用AI编程助手?
- 贡献图:一个缩略版的年度热力图,直观展示你的活跃周期。
生成的图片尺寸和样式都优化过,非常适合分享到社交媒体(如Twitter、微博)或者团队内部,作为一次有趣的年终回顾。
9. 疑难解答与最佳实践
在实际使用中,你可能会遇到一些问题。以下是我总结的一些常见情况和解决方案。
9.1 常见问题速查表
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
运行tokscale命令无反应或报错Native module not found | Rust原生模块未正确构建或下载。 | 1. 如果是从源码运行,确保执行了bun run build:core。2. 如果通过 npx运行,可能是网络问题导致模块下载失败,尝试清除npm缓存npm cache clean -f后重试。3. 检查系统架构是否支持(主流macOS/linux/Windows均支持)。 |
| 扫描不到某个客户端(如Cursor)的数据 | 1. 该客户端未安装或从未使用过。 2. 该客户端的数据存储路径非默认。 3. (Cursor) 未进行 tokscale cursor login登录。 | 1. 确认该客户端已安装并有使用记录。 2. 使用 tokscale sources检查扫描路径。对于非标准路径,在settings.json的scanner.extraScanPaths中添加。3. 对于Cursor,必须执行登录流程。 |
| 成本计算为0或明显不正确 | 1. 模型不在LiteLLM价格表中,且无后备价格。 2. 会话数据中缺少模型名称或Provider信息。 3. 时区处理导致日期过滤错误。 | 1. 使用tokscale pricing <模型名>检查是否有定价。若无,可尝试在GitHub上为LiteLLM项目提交PR添加该模型。2. 检查原始会话文件格式是否被支持。可提交issue到Tokscale仓库。 3. 确认 --since/--until参数日期是否正确,或尝试不使用日期过滤。 |
| TUI界面显示乱码或错位 | 终端模拟器不支持全宽字符或Ratatui库。 | 1. 尝试使用更现代的终端,如 iTerm2 (macOS), Windows Terminal, 或 Alacritty。 2. 确保终端字体包含完整的Unicode字符集。 3. 尝试使用 tokscale --light模式绕过TUI。 |
tokscale submit失败 | 1. 网络连接问题。 2. 未登录 ( tokscale login)。3. 数据验证失败。 | 1. 检查网络。 2. 运行 tokscale whoami确认登录状态。3. 先运行 tokscale submit --dry-run预览数据,看是否有错误提示。 |
| 扫描速度慢,特别是首次运行 | 1. 会话历史文件非常多(例如积累了多年的Codex数据)。 2. 磁盘IO速度慢。 | 1. 这是正常现象,首次扫描后会有缓存,后续运行会快很多。 2. 可以考虑定期归档或清理旧的会话文件,特别是那些不常用的客户端。 |
9.2 性能优化建议
- 定期清理旧会话:AI客户端(尤其是Codex CLI)可能会积累海量的历史会话文件(每个对话一个JSONL文件)。Tokscale每次都会扫描它们。如果你不需要追溯太早的历史数据,可以考虑定期将
~/.codex/sessions/目录下的旧文件移动到备份位置,或者直接删除。这能极大提升扫描速度。 - 善用
scanner.extraScanPaths:如果你有多个项目目录都包含.codex文件夹,不要每次用TOKSCALE_EXTRA_DIRS环境变量,而是把它们永久添加到配置文件中。这样Tokscale启动时就知道要去哪里找,不需要每次重新解析路径。 - 对于CI/CD,使用无头模式:在自动化脚本中,务必使用
tokscale headless命令或手动重定向到headless目录。这能确保CI中的用量被准确追踪,且不会干扰你本地的主要会话数据扫描。 - Cursor数据缓存:Tokscale会缓存Cursor的API响应。如果发现Cursor数据不是最新的,可以手动删除
~/.config/tokscale/cursor-cache/下的usage.csv文件,然后重新运行tokscale命令强制刷新。
9.3 数据准确性质疑与核对
有时你可能会怀疑Tokscale算出来的总成本和你从AI服务商官方账单看到的不一致。这是正常的,原因可能有以下几点:
- 定价数据延迟:LiteLLM的价格表更新可能有几小时到一天的延迟。而像Anthropic、OpenAI这样的服务商可能会随时调整价格。
- 促销与折扣:你可能享有企业折扣、批量折扣或免费额度,这些是Tokscale无法知道的。
- 缓存Token:一些模型(如Claude 3.5 Sonnet with Cache)对缓存读写有单独的、更便宜的计价。Tokscale虽然支持识别缓存token,但前提是原始会话日志中必须正确标记了这些token类型。
- API调用与UI使用的差异:你通过官方网页版(如platform.openai.com)使用的token,不会被本地的Codex CLI或OpenCode等客户端记录,因此Tokscale也追踪不到。
建议的核对方式:将Tokscale的报告视为一个高度近似的、趋势性的参考,而不是精确到分的会计账单。它的核心价值在于帮你比较(哪个模型/客户端更烧钱?)和发现趋势(我这个月的用量比上个月增长了多少?),而不是替代官方账单。
10. 扩展与贡献:让Tokscale变得更好
Tokscale是一个开源项目,它的强大离不开社区的支持。如果你发现它不支持你正在使用的某个AI客户端,或者某个模型的定价缺失,非常欢迎你贡献代码。
贡献流程大致如下:
- Fork仓库:在GitHub上fork
junhoyeo/tokscale项目。 - 添加新的客户端解析器:大部分工作集中在
packages/core/src/目录下的Rust代码中。你需要为新的客户端实现一个Scannertrait,定义如何找到它的数据文件以及如何解析文件格式。 - 添加新的模型定价:模型定价主要在
packages/core/src/pricing模块中维护。如果LiteLLM已经支持该模型,通常无需修改。如果是一个全新的模型,可以在代码中添加一个硬编码的后备价格,并建议同时向LiteLLM项目提交价格更新。 - 测试:在
packages/core目录下运行bun run test:all确保你的修改没有破坏现有功能。 - 提交Pull Request:描述你的变更,并附上相关的测试数据或截图。
一个简单的例子:假设你想添加对“DeepSeek Coder” CLI的支持。
- 首先,你需要找到它的数据存储在哪里(比如
~/.deepseek/sessions/)。 - 然后,研究它的会话文件格式(可能是JSON、SQLite等)。
- 接着,在Rust代码中创建一个新的
scanner/deepseek.rs模块,实现Scannertrait。 - 最后,在
scanner/mod.rs中注册这个新的扫描器。
这个过程需要对Rust有基本的了解,但项目结构清晰,有大量现有客户端的代码可以作为参考。
我个人在使用Tokscale近半年后,最大的体会是:对资源的可见性是控制成本的第一步。在没用它之前,我对AI助手的消费是一种“盲用”状态,月底看到账单才心头一紧。用了它之后,我养成了每周一早上花5分钟运行一下tokscale --week的习惯。它能立刻告诉我上周哪几天超支了,是不是因为尝试了一个特别贵的新模型。这种即时反馈让我能主动调整使用策略,比如在非关键任务上切换到更便宜的模型,或者减少一些不必要的、冗长的对话轮次。它从一个单纯的监控工具,变成了我优化开发工作流、提升“AI能效比”的得力助手。