Skip to content

feat(dashboard): 统计每个会话的「人工对话次数」与「token 用量」 #75

Closed

Description

@jeff-r2026

背景

PR #70(实现 #34 Human Intervention 指标)落地后,发现实际需求与实现方向有偏差:
当时实现聚焦在「人工干预」三类信号——interrupt(ESC 打断)/ toolReject(拒绝工具)/ correction(stop 后 60s 内的纠偏 re-prompt)。

但更想要的核心指标其实是更朴素的两个:

  1. 人工对话的次数:一个会话里人类到底发了几轮 prompt(衡量"让 agent 干完一件事需要人来回说几次")。
  2. token 用量:这个会话/这个人累计消耗了多少 token。

correction 这种"猜测用户是不是在纠偏"的启发式不是重点。

目标(已确认的范围)

  • 保留现有的「人工干预」指标(interrupt / toolReject / correction),本 issue 在其之上新增两个指标,不删除旧的。
  • 新增指标 1 —— 对话次数:统计每个会话的 UserPromptSubmit 事件数(= 人类对话轮数)。
  • 新增指标 2 —— token 用量:input / output / cache(cache_read + cache_creation)分桶统计,并给出总量。
    • 数据来源:Claude Code transcript 里的 message.usage。
    • ⚠️ 注意:同一条 assistant 消息(同一 message.id)会跨多行 JSONL 重复出现且 usage 相同,累加时必须按 message.id 去重,否则严重重复计数。
    • 拿不到 transcript 的工具(如 Cursor)优雅降级:token 显示 N/A,仅保留对话次数。

落地范围(三处贯通,沿用现有架构)

层 文件 改动
采集 src/dashboard-collector.ts Stop 时扫 transcript 同时汇总 token(按 message.id 去重);rebuildSessions 统计 promptCount 与 tokens;新增 aggregateSessionMetrics
类型 src/types.ts 新增 TokenUsage / SessionMetrics;扩展 DashboardEvent.tokens、DashboardSession.promptCount/tokens、UserStats.prompts/tokens
上报 src/team-push.ts 幂等快照 / delta / merge 扩展到 prompts + tokens(沿用 reported-interventions.json 幂等机制)
汇总 src/digest.ts digest 增加团队对话次数与 token 用量汇总/排行
展示 src/dashboard-html.ts 会话卡片展示对话次数与 token
文档 docs/usage-guide.md 补充两个新指标说明

验收标准

  • dashboard 会话卡片显示该会话的人类对话轮数与 token 用量(in/out/cache + 总量)。
  • teamai pull 幂等聚合 prompts/tokens 到 stats/<user>.yaml,重复 pull 不重复计数。
  • teamai digest 给出团队对话次数与 token 用量汇总。
  • Claude Code transcript 的 token 按 message.id 去重,无重复计数。
  • Cursor 等无 transcript 工具优雅降级(token N/A,对话次数仍统计)。
  • 隐私:只统计次数/数量,不落地任何 prompt 或 transcript 原文。
  • npx tsc --noEmit + npx vitest run 全绿,新增覆盖采集/聚合/上报/digest。

备注

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions