AI 使用统计周报生成器(L2 汇总器)
触发词
- 生成 AI 使用报告
- 生成本周 AI 统计
- AI 周报
- 统计 AI 使用情况
- AI 使用周报
概述
本 skill 是两层架构的 L2 汇总层。每次运行都必须先完整执行 ai-usage-collector,然后读取它在本次运行中返回的 JSON 文件路径,合并后按统一模板生成周报。
用户选择平台 ──[ai-usage-collector]──> <Windows 实际桌面>/.ai-report/<platform>-<周号>.json
│
ai-usage-report ──> 只读取本次返回的 JSON 文件 ──> 汇总周报 Markdown
统计周期:本周一到今天(默认周五,也支持其他日期触发)。
交互:先完成 ai-usage-collector 规定的平台多选和姓名确认;采集完成后,根据会话明细归纳 3–8 个候选主题,让用户多选并可填写多个自定义主题。
产出:Markdown 文件名固定为 AI使用统计报告-<姓名>.md,存到本次采集 JSON 所在的同一个 .ai-report 目录,由用户自行提交。
工作流程(按顺序执行)
第一步:调用 ai-usage-collector
这是本 skill 启动后的第一个业务步骤,不得因为桌面已有 JSON 而跳过:
- 加载并完整执行
ai-usage-collectorskill,包括其平台多选、姓名确认、授权边界、采集和降级规则。 - 等待采集流程结束,记录它本次明确返回的每个平台 JSON 绝对路径为
collected_files。 - 不自行扫描未选择的平台;不把
config.json、旧周文件或本次未返回的历史文件加入collected_files。 - 用户未选择平台或采集没有产出任何 JSON 时停止,不生成空报告。
采集细节由 ai-usage-collector 维护,本 skill 不复制其平台读取规则。
第二步:校验本次采集输出
逐一读取 collected_files,确认文件可解析、符合统一 JSON 契约,并来自同一个 ISO 周:
- 统计周期以采集 JSON 的
period为准,不另行猜测。 - 降级 JSON 仍可进入报告,但必须保留其缺失或估算说明。
- 同一平台出现多个文件、周期不一致或文件无法解析时,先报告问题并停止生成,避免重复或跨周统计。
- 所有
collected_files必须位于同一个目录;目录不一致时停止生成,避免报告位置含糊。 - 报告姓名使用本次采集确认的姓名;不得写死,也不得用无关历史配置覆盖。
第三步:询问工作主题
采集完成后,先把 collected_files 中的会话按创建时间混合排序,形成报告第四部分“会话明细”的待用数据,再据此归纳主题。不得在没有查看会话明细的情况下让用户从空白开始填写。
- 根据会话标题、来源平台和时间关联,概括 3–8 个有区分度、能覆盖本周主要工作的候选主题。合并语义重复项;主题名称应描述工作内容,不要仅用平台名、模型名或“其他”充数。
- 每个候选主题可附一条简短依据或匹配会话数,帮助用户判断,但不要在选项中暴露不必要的完整会话内容。
- 向用户提问:“根据本周会话明细,我总结了以下工作主题,请选择本周实际涉及的主题(可多选),也可以补充我未总结到的主题。”
- 使用支持多选的交互控件时,列出 3–8 个候选主题,并启用自由输入;用户可以在选择候选项的同时输入多个自定义主题,自定义主题用逗号分隔。若界面没有多选控件,展示带编号的完整候选列表,请用户回复编号/主题名,并允许在同一回复中追加逗号分隔的自定义主题。
- 将候选项选择与自定义输入合并为
selected_themes:保留用户选择顺序,去除空项和同义重复项。不得丢弃用户自定义主题,也不得用自动分类名称替换它们。
边界情况:
- 会话明细为空时不虚构 3 个主题,跳过主题选择,并在第五部分说明本周没有可归类会话。
- 会话太少、确实无法形成 3 个有依据的不同主题时,列出实际可归纳的主题并保留自由输入入口,不为满足数量而杜撰。
- 用户不选择候选项但提供了自定义主题时,直接使用这些自定义主题。
- 用户拒绝选择或输入时,使用已归纳的候选主题自动分类,并在报告中注明主题未经用户确认。
第四步:汇总并生成报告
使用 references/generate-report.py 的显式文件模式,将 collected_files 原样传入:
python references/generate-report.py --files <本次文件1.json> <本次文件2.json> --themes "主题1,主题2" --name "姓名"
不得改用“扫描目录内本周全部文件”的方式替代显式文件列表。脚本按以下规则合并:
- 只加载
--files指定的本次采集文件。 - 合并规则:
- 总 Token / 总会话 / 总请求:各平台 summary 相加
- 分模型 Token:不跨平台合并,每个平台单独一张表
- 会话明细:各平台会话按created_at混合排序,每行标注来源平台 - 只有 1 个平台 JSON 时直接生成单平台报告。
脚本会生成基础统计、模型表、会话明细和主题分类草稿,并写到输入 JSON 的同一目录:AI使用统计报告-<姓名>.md。重复生成时覆盖该文件。旧的周号或单文件调用方式仅为兼容接口,不用于本 skill 的标准流程。
生成后必须核对并在必要时重写第五部分“工作内容总结”:
- 一级主题名称与顺序必须严格使用
selected_themes,不能退回脚本内置的硬编码分类名称。 - 依据第四部分会话明细做语义归类;每个会话最多进入一个主题,未能可靠归类的会话进入“其他”。
- 用户选择了但没有明确匹配会话的主题仍要保留,并标注“0 个可确认会话”,不得为填满主题而臆测。
- 自定义主题与候选主题同等处理。
- 最终校验第五部分各主题与“其他”的会话数之和等于第四部分会话数,且没有重复或遗漏。
报告含 5 部分:
1. AI 使用概况(总 token / 会话 / 请求 / 日均)
2. 各平台 Token 用量(分平台列,含合计)
3. 各模型 Token 分用量(按平台分列,独立占比)
4. 会话明细(混合排序,标注来源平台)
5. 工作内容总结(按主题分类)
第五步:告知用户
- 报告文件路径
- 汇总了哪些平台
- 若某平台数据缺失或 token 为估算,提示用户
降级策略
| 情况 | 处理方式 |
|---|---|
某平台 sessions 为空 |
会话明细表该平台行不显示 |
某平台 model_breakdown 为空 |
分模型表该平台下显示"本平台未提供分模型数据" |
某平台 total_tokens 为 null |
各平台表该平台 Token 列显示 N/A |
某平台 tokens_estimated: true |
该平台分模型表表头标注"估算" |
| 本次采集没有输出 JSON | 停止并说明采集结果,不读取历史文件补齐 |
| 本次文件周期不一致或平台重复 | 停止生成,列出冲突文件 |
| 会话明细为空 | 跳过主题选择;第五部分说明没有可归类会话 |
| 用户拒绝选择或输入主题 | 使用从会话明细归纳的候选主题自动分类,并注明未经用户确认 |
| 用户选择的主题无明确匹配会话 | 保留该主题,标注“0 个可确认会话”,不臆测归类 |
与 ai-usage-collector 的关系
| ai-usage-collector | ai-usage-report(本 skill) | |
|---|---|---|
| 角色 | L1 采集层 | L2 汇总层 |
| 运行位置 | 各平台均可 | WorkBuddy |
| 输入 | 本平台本地数据 | 本次采集返回的 JSON 文件列表 |
| 输出 | <platform>-<周号>.json |
AI使用统计报告-<姓名>.md(与 JSON 同目录) |
| 触发 | 采集 AI 使用数据 | 生成 AI 使用报告 |
完整周报流程:
1. 运行 ai-usage-report
2. ai-usage-report 立即调用 ai-usage-collector,让用户选择平台并生成各自的 JSON
3. ai-usage-report 只读取本次生成的 JSON,从会话明细归纳 3–8 个候选主题,供用户多选或补充多个自定义主题
4. 按用户最终选定的主题和顺序完成分类并生成周报
配置文件
<Windows 实际桌面>/.ai-report/config.json:
{ "user": "姓名" }
首次运行时创建,记录用户姓名。ai-usage-collector 与本 skill 共用此配置。