查出哪个 Claude Code 会话在一把 key 上吃掉了最多 USDC
本文介绍如何将 Claude Code 的本地会话记录与 LLM API 聚合站的请求日志对齐,从而按会话拆分 USDC 花费,找出消耗最多的会话。内容涵盖日志字段、对齐方法、常见问题与优化建议。
为什么需要按会话拆分花费
使用聚合站时,所有请求通过一个 API key 计费,账单上是总额。但实际开发中,你可能同时运行多个 Claude Code 会话(不同项目、不同任务)。想知道哪个会话消耗了最多 USDC,就需要将聚合站的请求日志与 Claude Code 的会话记录对齐。
理解两边的数据来源
聚合站请求日志
聚合站通常提供请求日志或用量明细,一般包含:
- 请求时间戳
- 使用的模型
- 输入/输出 token 数
- 本次请求扣费的 USDC 金额
- API key 标识(若你有多个 key)
注意:聚合站按官方价 ×1.3 扣费,日志中的金额已包含服务费。
Claude Code 会话记录
Claude Code 会在本地保存会话历史(通常位于 ~/.claude/projects/ 下,按项目分目录)。每个会话是一个 JSONL 文件,记录每轮对话的时间、消息内容、使用的模型等。关键字段包括:
timestamp:消息时间sessionId:会话唯一标识model:模型名称usage:token 用量(若记录)
对齐方法:时间窗口 + 模型匹配
由于聚合站日志不直接包含 Claude Code 的 sessionId,需要通过间接方式关联:
- 提取会话时间范围:解析每个 Claude Code 会话文件,得到该会话的第一条和最后一条消息时间。
- 筛选聚合站日志:对每个会话,筛选出时间落在该范围内的请求记录。
- 按模型过滤:只保留与 Claude Code 会话中使用的模型匹配的请求(例如 claude-sonnet-4-20250514)。
- 累加 USDC:将筛选出的请求的扣费金额相加,得到该会话的总花费。
注意:如果多个会话时间重叠,单纯按时间窗口可能混淆。此时可以结合请求的 token 数量与会话中记录的 usage 进行二次匹配,或为不同项目使用不同的 API key 来隔离。
实践步骤
步骤 1:导出聚合站日志
从聚合站控制台导出请求日志为 CSV 或 JSON,确保包含时间戳、模型、扣费金额字段。
步骤 2:解析 Claude Code 会话
用脚本遍历 ~/.claude/projects/ 下的 .jsonl 文件,提取每个会话的起止时间和模型。示例伪代码:
import json, os
from datetime import datetime
sessions = []
for root, dirs, files in os.walk(os.path.expanduser('~/.claude/projects')):
for f in files:
if f.endswith('.jsonl'):
path = os.path.join(root, f)
times = []
models = set()
with open(path) as fh:
for line in fh:
obj = json.loads(line)
if 'timestamp' in obj:
times.append(obj['timestamp'])
if 'model' in obj:
models.add(obj['model'])
if times:
sessions.append({
'file': path,
'start': min(times),
'end': max(times),
'models': models
})
步骤 3:匹配日志并汇总
读取聚合站日志,对每条请求检查是否属于某个会话的时间窗口和模型集合,然后累加金额。
# 假设 logs 是聚合站日志列表,每条含 timestamp, model, cost_usdc
for s in sessions:
total = 0
for log in logs:
if s['start'] <= log['timestamp'] <= s['end'] and log['model'] in s['models']:
total += log['cost_usdc']
s['total_cost'] = total
步骤 4:排序与展示
按 total_cost 降序排列,即可看出哪个会话消耗最多。
常见问题与注意事项
- 时间戳时区:确保两边时间戳使用同一时区(建议统一为 UTC)。
- 会话重叠:若多个会话同时活跃,时间窗口匹配会高估。可考虑在 Claude Code 中为不同项目使用不同 API key,从根本上隔离计费。
- 模型名称差异:聚合站可能使用简写(如 claude-sonnet-4),而 Claude Code 记录完整名称,需做映射。
- 流式请求:部分日志可能按流式分块记录,需合并同一请求的多个条目。
优化建议
- 定期导出日志并归档,避免聚合站日志保留期有限。
- 为长期运行的任务使用独立 API key,便于按 key 直接查看花费。
- 关注高消耗会话的提示词长度和模型选择,合理使用较小模型处理简单任务。
通过以上方法,你可以将聚合站的总账单拆解到每个 Claude Code 会话,识别出消耗最多的会话,从而更有针对性地优化使用习惯。