ByteNoteByteNote

字节笔记本

2026年7月12日

model-usage:一键统计所有 AI 工具的 Token 用量与费用

API中转
¥120

本文介绍 model-usage,一个零配置的命令行工具,帮你统计和分析 pi、Claude Code、Codex、Gemini CLI、OpenCode、Grok CLI 等本地 TUI 工具的模型用量和成本。一键安装,自动检测,所有数据只在本地处理。

项目简介

model-usage 是一个开源的命令行工具,由 Evan Long 开发维护,用于分析本地所有 TUI AI 工具的模型使用情况和费用。截至目前,该项目在 GitHub 上已获得 15 stars,主要使用 TypeScript 编写。

如果你同时在用 pi、Claude Code、Codex、Gemini CLI 等多个 AI 编程工具,往往不清楚每个工具到底花了多少 token、花了多少钱。model-usage 就是来解决这个问题的——它自动读取各个工具的本地数据,一条命令汇总所有用量。

核心特性

  • 🪄 零配置:自动检测 pi、Claude Code、Codex、Gemini CLI、OpenCode、Grok CLI 的数据
  • 🔒 100% 本地安全:无需 API Key,只读取本地数据
  • ⚡ 快速分析:一个 mu 命令查看所有用量
  • 💰 成本追踪:精确费用计算(预计算价格或 LiteLLM 定价)
  • 🎛️ 交互式数据源选择:TUI 复选框选择要查询的工具
  • 🎯 智能项目检测:在项目目录下自动识别当前项目
  • 📊 多种视图模式:按日聚合、逐条消息详情、按日期统计
  • 🔍 智能过滤:按时间范围、项目名、模型过滤
  • 📈 灵活排序:按费用、时间、token 数或项目名排序
  • 🧩 可扩展:一个文件即可添加新的 TUI 工具支持

支持的 TUI 工具

所有工具均自动检测,无需配置文件:

工具数据来源已知模型
pi~/.pi/agent/sessions/deepseek-v4-pro 等
Claude Code~/.claude/projects/claude-sonnet-4-5 等
Codex CLI~/.codex/sessions/gpt-5 等
Gemini CLI~/.gemini/tmp/<hash>/chats/gemini-3-pro-preview 等
OpenCode~/.local/share/opencode/opencode.dbdeepseek-v4-pro 等
Grok CLI~/.grok/grok.dbgrok-4.3 等

安装指南

前置要求

  • Node.js >= 22.0.0(使用内置的 node:sqlite
  • 至少一个支持的 TUI 工具且有对话历史

安装步骤

bash
# 全局安装(推荐)
npm install -g model-usage

# 或一次性使用(不安装)
npx model-usage

# 或本地项目安装
npm install model-usage
npx model-usage

快速开始

安装后直接运行,无需任何配置:

bash
mu

首次运行时,会出现一个交互式复选框让你选择要查询的 TUI 工具,随后用量统计就会显示出来。

使用示例

数据源选择

bash
mu                        # 交互式选择数据源(在终端中)
mu --sources pi,opencode  # 只查询 pi 和 OpenCode
mu --sources all          # 查询所有可用数据源(跳过提示)

在非交互环境(管道、定时任务等)下,所有数据源会自动全选,不弹出提示。

基本命令

bash
mu                        # 自动检测项目的用量(终端中弹出数据源选择)
mu -a, --all-projects     # 所有项目的用量
mu -P, --projects         # 列出所有项目
mu -M, --models           # 列出所有模型(含 LiteLLM 定价)
mu -v, --version          # 版本
mu -h, --help             # 帮助

时间过滤

bash
mu -t 7d                  # 最近 7 天
mu -t 2h                  # 最近 2 小时
mu -t 2024-07-01T14:30,2024-07-01T16:45  # 日期范围(ISO 8601)

项目和模型过滤(支持部分匹配)

bash
mu -p myproject           # 项目名包含 "myproject"
mu -m sonnet              # 模型名包含 "sonnet"
mu -m gpt-4               # 模型名包含 "gpt-4"

组合过滤

bash
mu -t 7d -m sonnet -p myproject

排序

bash
mu -k cost -o desc        # 费用最高优先
mu -k tokens -o desc      # token 最多优先
mu -k project -o asc      # 按项目名字母序
mu -k time -o desc        # 最新优先

视图模式

bash
mu                        # 按项目和日期聚合(默认)
mu -d                     # 详情模式:逐条消息
mu --by-date              # 仅按日期,合并所有项目

输出示例

运行 mu 后的典型输出:

text
🔍 Options applied:
  Project: my-website (auto-detected)
  Sort: cost ↓

┌──────────┬─────────────┬──────────┬────────┬────────┬──────────────┬────────────┬─────────────────┬──────────┬────────────┐
│ Time     │ Project     │ Messages │ Input  │ Output │ Cache Create │ Cache Read │ Model           │ Total    │ Cost (USD) │
├──────────┼─────────────┼──────────┼────────┼────────┼──────────────┼────────────┼─────────────────┼──────────┼────────────┤
│ 7/1/2026 │ my-website  │       15 │  1,200 │    400 │            0 │     20,000 │ gpt-4.1         │   21,600 │      $0.09 │
├──────────┼─────────────┼──────────┼────────┼────────┼──────────────┼────────────┼─────────────────┼──────────┼────────────┤
│ 6/30/2026│ my-website  │       20 │    800 │    300 │            0 │     15,000 │ gpt-4.1         │   16,100 │      $0.06 │
├──────────┼─────────────┼──────────┼────────┼────────┼──────────────┼────────────┼─────────────────┼──────────┼────────────┤
│ TOTAL    │             │       35 │  2,000 │    700 │            0 │     35,000 │                 │   37,700 │      $0.15 │
└──────────┴─────────────┴──────────┴────────┴────────┴──────────────┴────────────┴─────────────────┴──────────┴────────────┘

清晰展示每天的消息数、输入输出 token、缓存读写、模型和费用,底部汇总合计。

隐私与安全

  • 100% 本地:只从本地磁盘读取数据
  • 极简网络:仅从 LiteLLM 获取模型定价(缓存 1 小时)
  • 无 API Key:不需要任何认证
  • 隐私优先:你的数据永远不会离开本机

扩展:添加新的 TUI 工具支持

只需创建 src/sources/mytool.ts

typescript
export const name = 'mytool';

export function isAvailable(): boolean {
  // 同步检查是否可用
}

export async function readSessions(): Promise<UsageResult> {
  // return { messages, totals }
}

export async function getProjects(): Promise<ProjectsResult> {
  // return { projects, messageCount }
}

无需改动其他文件,自动发现机制会自动识别。共享工具函数见 src/sources/common.ts

项目链接

分享: