01

BigQuery · cc_logging.events

Claude
Code
遥测
解密

我们在 Claude Code 内部埋下探针,今天来看看 BigQuery events 表里记录了什么。

106
事件类型
6,218
总事件数
$14.04
今日成本

2026-04-03 · 单开发者会话 · patch 生效首日

02

数据结构

那串
"加密"
字符串

additional_metadata = Base64(JSON)

-- BQ SQL 解码模式
JSON_VALUE(
  CAST(FROM_BASE64(
    JSON_VALUE(event_data, "$.additional_metadata")
  ) AS STRING),
  "$.costUSD"
)
⚠ 路径陷阱:$.additional_metadata不是 $.properties.additional_metadata。全部 NULL = 路径写错了。
  • 解码后含:costUSD · durationMs · ttftMs · cachedInputTokens
  • thinkingContentLength · gateway · stop_reason · queryDepth
  • 几乎所有事件的详细数据都在这个字段里
03

API 成本

今天
花了
多少

$14.04
今日总费用
248
API 调用次数
  • 主力:sonnet-4-6,全部走 litellm 网关
  • 94/248 次触发了 thinking 扩展推理(37.9%)
  • 最长单次 202 秒(3.4 分钟),多次命中 8K output token 上限
  • 单次最贵 $1.07(msg_count 已达 302 条时的调用)

平均响应 14.69s · thinking 调用 94 次 · 09:00 后均值 61s

04

Prompt Caching

91.8%
走了
缓存

缓存命中率

Sonnet
91.8%
Haiku
78.7%
  • 策略:globalCacheStrategy = system_prompt
  • 多轮对话越往后,缓存命中率越高(到 96%)
  • 单轮(首次)会话命中率 0%,需先写入缓存
  • 约 92% 的 tokens 不重新计算 → 大幅省钱省时
05

会话分析

BQ 里
记录的
是我们

session_id: 22498ac0-1c66-4c61-b697-574742dbc5fd

280+
API 调用轮次
$15.2+
本次对话费用
96%
缓存命中率
cache_breakpoints 显示消息数从 第 47 条增长到第 253 条,共 202 个快照,全程缓存从未跳过。 first_msg=47 说明 patch 是中途才生效的,更早的消息未被记录。
  • Docker 测试会话:non-interactive,$0.09–$0.82,1–40 轮
  • 1 轮会话缓存命中 0%;40 轮会话命中 93%
06

工具使用

用了
哪些
工具

Bash
115次 · 5错
Read
18次 · 3错
Edit
12次 · 1错
Grep
10次 · 0错
Glob
8次 · 0错
Agent
1次 · 28s
  • Bash 占全部调用 75%+,最长单次 57 秒
  • Edit 最快(avg 13ms),Read 输出最大(avg 7 KB)
07

Bash · command_type

跑了
什么
命令

ls
31次
目录探索
bq
16次
avg 1.6KB 输出
docker
15次·1错
容器操作
find
10次
0 错误
grep
5次
max 29KB
python3
3次
avg 11KB
注:command_type = 命令首词(如 bqdocker),完整命令内容不记录(隐私保护)。
08

Auto Mode

分类器
全部
放行

64/64
决策全为 ALLOWED
0
拒绝次数
首次判断(无缓存)
$0.058 · 1.4s
写入 15,405 tokens 缓存
后续判断(命中缓存)
$0.005 · 1.3s
成本降 10 倍
  • 分类器模型:claude-sonnet-4-6 (fast stage)
  • 3 次触发 thinking stage → avg 17.9s · $0.028/次
  • Edit 工具不经过 classifier(11 次均无分类成本)
09

意外发现 #1

输入
没有
提示词

input_prompt 不含提示词文本

// 预期:用户说了什么
// 实际 additional_metadata:
{
  "is_negative": false,
  "is_keep_going": false
}
这是用户对 AI 回复的即时反馈信号(点踩 / 点继续),不是输入内容。 Anthropic 出于隐私保护未记录原始提示词。今日全部 20 条均为 false——没踩过任何回复。
10

新事件类型

今日
18 种
新发现

session_title_generated × 8
全部 success: false
LiteLLM proxy 下无法生成
max_tokens_reached × 4
→ escalate 到 64,000 tokens
conversation_rewind × 2
469 条消息 → 464 条,删 5 条
cancel × 5(source: escape)
→ api_error × 3 (aborted)
cost_threshold_reached × 1
成本告警触发
tool_use_denied × 3
WebFetch · Bash 被配置拒绝
  • write_append_used:写入 15,439 bytes(slides 生成)
  • 对话消息数已达 469 条,上下文规模持续扩张
11

时序分析

4 分钟
69 次
调用

04:48–05:30
零散测试
Docker 单次
06:36–06:40
69次 · $1.41
E2E 测试高峰
07:47–08:33
280次 · $15.2
当前会话
  • 06:36–06:40:T1–T15 全部 Docker 测试自动执行,每分钟 10–17 次
  • 08:10:一次 98.2 秒的调用,thinking stage 触发
  • 今日活跃时长约 3.5 小时(UTC 04:48–08:33)
12

数据隐私

记了
什么
没记什么

已记录 ✓
  • Token 用量、费用、延迟
  • 工具类型、成功/失败
  • 命令首词(ls/bq/docker)
  • 文件大小变化
  • 失败时的 diff 内容
  • 缓存命中率、消息数增长
未记录 ✗
  • 实际提示词文本
  • AI 回复内容
  • 完整 bash 命令
  • 文件具体内容
  • 剪贴板、截图
13

挖掘方法论

五步
摸清
陌生表

  • 摸底:GROUP BY event_name ORDER BY COUNT(*) DESC
  • 看结构:Python 解析一条原始记录,打印所有 key
  • 识别 Base64:长串 = FROM_BASE64() → JSON_VALUE()
  • 避免路径陷阱:从实际顶层 key 开始,不加 $.properties.
  • WITH 分层:CTE 解码字段,外层 SELECT 聚合

数据不会说谎——它记录了每一次操作、每一次失败、每一分成本。