成本追踪与 Fast Mode Deep-Dive
May 22, 2026 · View on GitHub
用户如何了解 AI Agent 的实际花费?能否在速度和成本之间灵活切换?本文基于 Claude Code(v2.1.89 源码分析)和 Qwen Code(v0.16.0 开源)的源码分析,对比两者在成本追踪、Fast Mode 速度分级和并发会话管理方面的差异。
1. 架构总览
| 维度 | Claude Code | Qwen Code |
|---|---|---|
| 成本显示 | USD 金额 + 按模型分项 + cache 效率 | Token 计数 + 请求数 + cache 效率百分比;v0.16.0 起若配置 modelPricing 则显示 USD 估算 |
| 成本持久化 | 按 session ID 存储在项目配置中 | 无持久化 |
| Fast Mode | ✅ Opus 4.6 标准/快速切换($5→$30/Mtok) | ❌(仅 --fast 指定备用模型) |
| 并发 Session | ✅ PID 文件追踪 + 后台 Agent 脱附 | 无跨终端追踪 |
2. Claude Code:USD 成本追踪
2.1 成本累计
// 源码: cost-tracker.ts
// 每次 API 响应后调用:
addToTotalSessionCost(model, usage)
→ calculateUSDCost(model, usage) // 按定价表计算 USD
→ addToTotalModelUsage(model, usage) // 按模型分项累计
→ getCostCounter().add(cost) // OpenTelemetry 指标
2.2 /cost 命令输出
Total cost: \$1.25
Total duration (API): 2m 45s
Total duration (wall): 5m 30s
Total code changes: 25 lines added, 8 lines removed
Usage by model:
Opus 4.6: 100,000 input, 45,000 output, 5,000 cache read, 2,500 cache write (\$0.95)
Sonnet 4.6: 50,000 input, 12,000 output (\$0.30)
关键信息:
- USD 金额精确到分
- Cache read / write tokens 分开显示——用户可判断 prompt cache 效率
- 按模型分项——用户可识别哪个模型消耗最多
- API 时间 vs 总时间——区分网络延迟和工具执行时间
2.3 会话成本持久化
// 源码: cost-tracker.ts
// 保存到项目配置:
saveCurrentSessionCosts() → config.projects[projectPath] = {
lastSessionId, lastCost, lastAPIDuration, lastModelUsage, lastLinesChanged
}
// --resume 恢复时:
restoreCostStateForSession() → 检查 sessionId 匹配后恢复累积成本
2.4 Fast Mode
// 源码: utils/fastMode.ts
// 切换: /fast 命令 或 设置 fastMode: true
// 定价: Opus 4.6 Standard \$5/\$25 → Fast \$30/\$150 per Mtok
// 冷却机制:
type FastModeState =
| { status: 'active' }
| { status: 'cooldown'; resetAt: number; reason: 'rate_limit' | 'overloaded' }
// 429 错误 → triggerFastModeCooldown(resetTimestamp, reason)
// 冷却结束 → 自动恢复 active
与重试集成(源码: services/api/withRetry.ts):
- 短
retry-after(<20s):保持 Fast Mode 重试(保留 cache) - 长
retry-after:进入冷却,回退到 Standard - Overage rejection:永久禁用 Fast Mode
2.5 并发 Session 管理
// 源码: utils/concurrentSessions.ts
// PID 文件: ~/.claude/sessions/{pid}.json
{
pid: 12345,
sessionId: "abc-123",
cwd: "/path/to/project",
kind: "interactive" | "bg" | "daemon" | "daemon-worker",
name: "background-session-name",
startedAt: 1704067200000
}
// countConcurrentSessions() — 扫描 PID 文件,过滤已退出进程
// 自动清理: registerCleanup() 在退出时删除 PID 文件
3. Qwen Code:Token 统计
3.1 /stats 命令
// 源码: qwen-code/packages/cli/src/ui/components/StatsDisplay.tsx
// 显示内容:
// - Session ID、工具调用(成功/失败)、成功率
// - Wall time、Agent 活跃时间、API 时间占比
// - 按模型分项: 模型名、请求数、输入/输出 tokens
// - Cache 效率: "{cacheEfficiency.toFixed(1)}% of input from cache"
3.2 USD 成本估算(v0.16.0 新增,可选)
Qwen Code 的 /stats model 在 v0.16.0 中新增了 USD 成本估算能力。当用户在 settings 中配置 modelPricing(每百万 token 的输入/输出价格)时,/stats model 子命令会计算并显示估算成本:
// 源码: packages/cli/src/ui/commands/statsCommand.ts
const pricing = context.services.settings.merged.modelPricing;
const cost = calculateCost({
inputTokens: modelMetrics.tokens.prompt,
outputTokens: modelMetrics.tokens.candidates + modelMetrics.tokens.thoughts,
pricing: pricing?.[modelName],
});
if (cost != null) {
lines.push(` Estimated cost: $${cost.toFixed(4)}`);
}
// 源码: packages/cli/src/utils/costCalculator.ts
export function calculateCost({ inputTokens, outputTokens, pricing }) {
// 基于用户配置的 inputPerMillionTokens / outputPerMillionTokens 计算
// 未配置定价 → 返回 null(不显示)
}
未配置 modelPricing 时仍只显示 token 数量和 cache 效率百分比。这解决了多 Provider(Google/Qwen/Anthropic/OpenAI)定价差异大的问题——用户自行配置各模型定价,无需工具内置固定价格表。
3.3 /model --fast
// 源码: qwen-code/packages/cli/src/ui/commands/modelCommand.ts
// /model --fast <modelName> → 设置后台任务的备用快速模型
// 与 Claude Code 的 Fast Mode 不同:
// - Claude: 同一模型的不同推理速度(相同 Opus 4.6,不同 QPS/价格)
// - Qwen: 指定另一个更快的模型(如用 Haiku 替代 Opus)
4. 对比
| 维度 | Claude Code | Qwen Code |
|---|---|---|
| 成本单位 | USD 金额 | Token 数量;配置 modelPricing 后显示 USD 估算(v0.16.0) |
| 按模型分项 | ✅ 含 cache read/write 分项 | ✅ 含 cache 效率百分比 |
| 成本持久化 | ✅ 跨 --resume 累加 | ❌ |
| Fast Mode | ✅ 同模型速度切换 + 冷却 + 重试集成 | ⚠️ --fast 指定备用模型(非速度分级) |
| 并发追踪 | ✅ PID 文件 + 后台脱附 | ❌ |
| 代码变更统计 | ✅ lines added/removed | ❌ |
5. 关键源码文件
Claude Code
| 文件 | 职责 |
|---|---|
cost-tracker.ts | 成本累计、持久化、/cost 格式化 |
utils/modelCost.ts | 定价表(7 个价格档) |
utils/fastMode.ts | Fast Mode 状态机 + 冷却 |
commands/fast/fast.tsx | /fast 命令 UI |
commands/cost/cost.ts | /cost 命令 |
utils/concurrentSessions.ts | PID 追踪 + 并发计数 |
Qwen Code
| 文件 | 职责 |
|---|---|
packages/cli/src/ui/components/StatsDisplay.tsx | 统计 UI |
packages/cli/src/ui/commands/statsCommand.ts | /stats 命令(v0.16.0 新增 USD 估算) |
packages/cli/src/utils/costCalculator.ts | USD 成本计算函数(v0.16.0 新增) |
packages/cli/src/ui/commands/modelCommand.ts | /model --fast(v0.16.0 增加 auth-type 感知的模型切换) |
packages/core/src/telemetry/metrics.ts | OpenTelemetry 指标 |
免责声明: 以上分析基于 2026 年 Q1 初稿,2026-05-22 对照 v0.16.0 复核。