Token Usage Tracking
Token Usage Tracking 是追踪每次 LLM 调用的输入和输出 token 消耗的机制。它是成本监控和优化的基础数据。
#type / concept
#status / evergreen
#tech / ai
#tech / ops
[!info] related notes
- 所属 MOC: Observability Engineering MOC
- 相关: Cost Tracking, Model Gateway
Token Usage Tracking
一句话定义
Token Usage Tracking 是追踪每次 LLM 调用的输入和输出 token 消耗的机制。不追踪 token,就不知道钱花在哪里。
核心原理
追踪维度
| 维度 | 说明 | 用途 |
|---|---|---|
| 每次调用 | 单次 LLM 调用的 token | 调试 |
| 每个 Run | 一次 Agent Run 的总 token | 任务成本 |
| 每个用户 | 用户累计 token | 计费 |
| 每个模型 | 不同模型的 token | 成本分析 |
Python 实现
class TokenTracker:
def __init__(self, db):
self.db = db
async def record(self, usage: TokenUsage):
await self.db.insert("token_usage", {
"run_id": usage.run_id,
"model": usage.model,
"input_tokens": usage.input_tokens,
"output_tokens": usage.output_tokens,
"timestamp": datetime.now(),
})
async def get_user_total(self, user_id: str, period: str = "month") -> dict:
return await self.db.query(f"""
SELECT SUM(input_tokens) as input, SUM(output_tokens) as output
FROM token_usage
WHERE user_id = ? AND timestamp > NOW() - INTERVAL '{period}'
""", user_id)
LLM 响应中的 token
# OpenAI
response.usage.prompt_tokens # 输入 token
response.usage.completion_tokens # 输出 token
# Anthropic
response.usage.input_tokens
response.usage.output_tokens
常见坑
- 不追踪: 不知道钱花在哪里
- 只追踪总量: 不知道哪个模型、哪个用户消耗最多
- 不归因: 不知道 token 消耗在哪个步骤