report-automation-skill
Verifiedreport-automation-skill · v1.3.1 · UNLICENSED
Reusable report automation skill with target-template and AI-generated standard-report flows
Install
dsh plugin add report-automation-skill Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
report-automation
把「人工做报表」变成「AI 做报表」的一个可复制技能包。
新用户提供源数据样本和业务目标即可开始。有目标报表样本时按模板复刻;没有目标模板时,
在用户选择时间周期并确认数字口径后,自动生成第一版标准三 Sheet 报告。规则会固化成
profile.yaml(配方单);之后每次只给源文件,就能自动产出日报 / 时报 / 周报。
它解决什么问题
- 换产品、换平台就要重写一套报表脚本 → 现在换成改配置
- 客户改表头、加减列就要改代码 → 现在改配置 + 别名
- 口径随时间变化(字段改版)就要改代码 → 现在按日期分段配置
- 报表逻辑散落在脚本里,没人说得清 → 现在全部落在可读的 profile 里
安装
技能主体是 Markdown + Python 脚本,仓库根目录另外包含一个轻量 DSH 安装适配层。
推荐:一条命令安装到常用 AI 工具
npx [email protected] install
安装器会检测 Codex、WorkBuddy、Claude Code 和 DeepSeek Harness,并让用户选择安装一个、 多个或全部已检测工具。检测不会自动授权安装,写入前会显示真实目标路径并再次确认。
非交互环境或希望跳过选择时明确指定目标:
npx [email protected] install --target codex
npx [email protected] install --target codex --target claude
npx [email protected] install --target all
npx [email protected] install --target workbuddy --dry-run
支持目标:codex、workbuddy、claude、dsh。重复安装会原子替换 Skill 本体并清理
旧残留;失败时恢复旧版本。安装器不会搜索或修改任何项目中的 .report-automation 产品知识。
Python 依赖只检查、不静默安装;缺失时会打印对应的 pip install -r 命令。
DSH:从 npm 官方源安装
在 DSH 的「添加插件」中保持安装源为「npm 官方源」,输入:
report-automation-skill
DSH:从 Git 仓库安装
在 DSH 的「插件 → 从 Git 仓库安装」中填写:
https://github.com/adsstt/report-automation-skill
两种安装方式都会让 DSH 通过 pnpm 安装适配层;适配层启动后把技能文件同步到
~/.agents/skills/report-automation/。重新打开会话后即可调用。
手动安装:放到宿主的技能目录
| 宿主 | 目标目录 |
|---|---|
| DSH | ~/.agents/skills/report-automation/ |
| Codex CLI | ~/.codex/skills/report-automation/ |
| WorkBuddy | ~/.workbuddy/skills/report-automation/ |
| Claude Code | ~/.claude/skills/report-automation/ |
复制整个目录即可,不需要软链。DSH 用户使用上面的 Git 安装方式时不需要手动复制。
安装 Python 依赖
pip install openpyxl pyyaml jsonschema
也可以使用受版本范围约束的依赖清单:
pip install -r requirements.txt
要求 Python 3.10+。脚本缺依赖时会给出明确提示。
确认能被调用
新开一个会话说「帮我做日报,这是我的源数据和目标报表」——技能应该被触发。 没有被触发就显式说「用 report-automation 技能」。
第一次用(教它一遍)
有目标模板
# 1) 探源 + 探目标格式
python scripts/probe_sources.py --source-dir <源目录> --target <目标报表.xlsx> --out runtime/probe.json
# 2) 反推候选(只产候选,不落定)
python scripts/infer_mappings.py --probe runtime/probe.json --out runtime/profile.draft.yaml
# 3) 看还缺什么、哪些必须问人
python scripts/validate_profile.py runtime/profile.draft.yaml
# 4) 核对列是否都能对上目标表头(可从目标反推列定义草稿)
python scripts/verify_format.py --target <目标报表.xlsx> --emit-yaml
python scripts/verify_format.py --profile runtime/profile.draft.yaml --target <目标报表.xlsx>
把 validate_profile.py 报的 P0 问题逐条问清楚、写进 profile,再用样本跑一遍
影子对账(shadow_diff.py),差异归零后可定稿。
没有目标模板
先提供源数据与业务目标。AI 会根据日期覆盖和目标建议日报、周报、月报或自定义周期, 但必须由用户显式选择。未选择时所有工作簿生成都会被阻断。
# 1) 只探源
python scripts/probe_sources.py --source-dir <源目录> --out runtime/probe.json
# 2) 准备业务目标(示例)
# primary_goal: efficiency
# goal_description: 降低获客成本并保持安装规模
# period:
# type: weekly
# confirmed: true
# layout_confirmed: false
# 3) 生成候选 profile;如未选择 period,只输出建议并保持门禁
python scripts/infer_mappings.py --probe runtime/probe.json \
--business-goal runtime/business-goal.yaml --standard-output \
--out runtime/profile.draft.yaml
# 4) 周期已选但口径或版式未确认时,只能预览 DRAFT
python scripts/create_standard_template.py --profile runtime/profile.draft.yaml \
--out runtime/standard-report-template.xlsx --draft
# 5) 确认 P0 与版式后生成正式模板
python scripts/create_standard_template.py --profile runtime/profile.confirmed.yaml \
--out runtime/standard-report-template.xlsx
# 6) 用现有引擎填数
python scripts/render_workbook.py --profile runtime/profile.confirmed.yaml \
--report-type standard --date 2026-10-25 --source-file <id>=<源文件> \
--out runtime/标准报告_20261025.xlsx
标准报告固定包含 管理摘要、明细数据、趋势环比。管理摘要和趋势环比展示上期、
本期、绝对变化与变化率;多广告平台时同时展示“全部平台”合计和各平台分项。明细按
真实源日期、平台、账户及可用广告层级展开。源数据存在时会保留完整漏斗指标(安装、
注册、KYC、首充、交易、收入),并自动补充点击率、各层转化率、CPI、注册成本、首充
成本和 ROAS 等可计算指标;缺字段就不展示,不能用 0 冒充。缺少上期或分母为零时显示
N/A。
若从内置示例开始,先复制为项目草稿,不能直接用 examples/ 出正式报告:
python scripts/promote_example.py --example examples/minimal/profile.yaml \
--out <项目>/.report-automation/<产品>/profile.yaml
让它记住产品规则
首次定稿后,把 profile 注册到当前工作区。以后新会话可以用产品名或别名找到它,用户不必 反复说明同一套字段映射:
python scripts/register_product_profile.py --workspace . \
--profile runtime/profile.confirmed.yaml --alias "产品简称"
python scripts/resolve_product_profile.py --workspace . --product "产品简称" --json
用户可用截图、表格、文档或自然语言补充字段关系和产品规则。宿主 AI 会先把内容整理为
knowledge-update.yaml,保留附件引用和证据,然后预览变更。数字口径等 P0 规则必须得到用户
明确确认才能写入;写入会自动备份旧 profile 并保留审计历史。
# 预览,不修改文件
python scripts/update_product_knowledge.py --workspace . \
--profile .report-automation/products/<产品>/profile.yaml \
--update runtime/knowledge-update.yaml
# 确认后写入
python scripts/update_product_knowledge.py --workspace . \
--profile .report-automation/products/<产品>/profile.yaml \
--update runtime/knowledge-update.yaml --apply
知识保存在项目的 .report-automation/,不在 npm 安装目录内,因此升级或重装 skill 不会清空。
公共平台字典和客户产品知识彼此隔离。CLI 不自带 OCR;截图由正在使用该 skill 的多模态 AI
读取,截图内容先作为证据/候选,不能绕过 P0 确认门禁。
每个产品会自动生成两套可读知识:knowledge/business-rules.yaml 保存字段、指标、归因和业务
分类;knowledge/report-format.yaml 保存 Sheet、列、公式、样式和格式历史。profile.yaml 仍是唯一
正式运行配置,两套知识由工具自动同步,不能各自漂移。
旧产品第一次升级到该机制时先建立基线;这不会修改现有规则:
python scripts/migrate_product_knowledge.py --workspace . --product "产品名"
python scripts/migrate_product_knowledge.py --workspace . --product "产品名" --apply
一键导出当前产品或全部产品。ZIP 自带审计报告、文件清单和 SHA256:
python scripts/export_product_knowledge.py --workspace . --product "产品名" --out exports/
python scripts/export_product_knowledge.py --workspace . --all --out exports/
python scripts/audit_product_knowledge.py --package exports/<知识包>.zip
受管理的 profile.yaml 如果被直接修改,正式校验和出报会阻断,并提示通过知识更新流程登记;
备份、历史、知识视图和指纹都在后台自动完成,不增加日常出报步骤。
以后每次出报表
# CSV(审计用)
python scripts/generate_report.py --profile <profile.yaml> --report-type daily --date 2026-10-25 \
--source-file tt_ad=<tiktok.csv> --source-file af_ad=<af.csv> --out-dir runtime/out
# 客户 Excel 工作簿(追加历史 + 环比块)
python scripts/render_workbook.py --profile <profile.yaml> --report-type daily --date 2026-10-25 \
--source-file tt_ad=<tiktok.csv> --source-file af_ad=<af.csv> \
--compare-date 2026-10-24 --compare-source-file tt_ad=<前一日 tiktok.csv> --compare-source-file af_ad=<前一日 af.csv> \
--out runtime/out/客户工作簿_20261025.xlsx
# 出稿后自检
python scripts/verify_output.py --profile <profile.yaml> ...
python scripts/verify_workbook.py --template <模板.xlsx> --output <产物.xlsx> --report-date 2026-10-25
改格式怎么说
| 你说 | 它改哪里 |
|---|---|
| "注册成本那列标红" | 列的 colorize / 条件格式 |
| "加一列 KYC 率" | profile 的 derived + 目标 sheet 的 columns |
| "客户把表头改名了" | 该列的 aliases,旧写法继续兼容 |
| "这周开始收入列不要了" | format_history 记一笔 + 去掉对应列 |
| "这个指标计算口径变了" | metrics.<名>.effective 按日期分段 |
主要脚本各管一件事
| 脚本 | 管什么 | 什么时候用 |
|---|---|---|
probe_sources.py |
看源文件与目标格式长什么样 | 第一次接入 |
infer_mappings.py |
反推候选映射(不落定) | 第一次接入 |
create_standard_template.py |
无目标模板时创建标准三 Sheet 模板 | 第一次接入 / 版式调整 |
register_product_profile.py |
将定稿配置注册到工作区产品库 | 第一次 Freeze 后 |
resolve_product_profile.py |
按产品名/别名复用已确认配置 | 每个新会话开始 |
update_product_knowledge.py |
安全写入截图、表格或对话中确认的新知识 | 用户补充规则时 |
migrate_product_knowledge.py |
为没有历史的旧产品建立真实基线 | 旧产品首次升级时 |
export_product_knowledge.py |
导出当前产品或全部产品 ZIP 知识包 | 备份、迁移或交接时 |
audit_product_knowledge.py |
检查工作区或 ZIP 的完整性和规则状态 | 导出前后 / 排查篡改 |
validate_profile.py |
配方单结构与红线校验 | 每次改 profile 后 |
verify_format.py |
列能不能对上目标表头 | 客户改版后 / 接入时 |
generate_report.py |
出过程表/结果表 CSV | 每次 |
render_workbook.py |
写客户 Excel 工作簿 | 每次(需要 Excel 时) |
shadow_diff.py |
影子报表 vs 用户样例逐格对账 | 接入时 / 排查差异 |
verify_output.py |
数值层对账 | 每次 |
verify_workbook.py |
工作簿层断言(历史未破坏等) | 每次 |
三条硬规则
- 数字口径不许猜。 同一事件存在多个候选字段时必须问人,禁止按字段名后缀自动选。
- 校验失败不许出正式报表。 只能生成
_drafts/里的诊断草稿。 - 示例不能直接拿来出报表。
examples/是只读样板,必须复制到自己项目并重跑对账。
目录说明
report-automation/
├── SKILL.md # 给 AI 看的执行手册(含完整流程与红线)
├── README.md # 本文件:给人和新用户看
├── references/
│ ├── platforms/ # 各广告/归因平台字段字典(按需扩充)
│ ├── lookups/ # 三层国家码表(ISO / 业务聚合 / profile 覆盖)
│ ├── report-profile-schema.json # 配方单机器可校验格式
│ ├── knowledge-update-schema.json # 产品知识更新机器契约
│ ├── report-profile-schema.md # 配方单人读说明
│ └── ambiguity-protocol.md # 疑点分级与提问模板
├── examples/
│ └── minimal/ # 最小及格线示例
├── scripts/ # 生成、渲染、校验、示例转正等脚本
├── assets/templates/
└── evals/evals.json # 触发与效果评测用例
兼容性与边界
- 支持平台:TikTok / Meta / Google × AppsFlyer / Adjust(引擎不含任何平台分支,差异全在配置与字段字典)
- CLI 不内置 OCR;宿主多模态 AI 可读取截图并转为待确认的结构化知识更新
- 不做:飞书多维表同步、图形界面
- 客户工作簿只写副本,永不修改模板原件
回归测试
python -m unittest discover -s tests -v
测试覆盖公开 CLI 边界,包括通用 join/dedupe、缺源门禁、XLSX 输入、平台推断、 环比计算、低覆盖率、快照成熟度、示例只读和公式注入防护。
完整的新用户/新产品验收使用独立的 NovaFit(Meta Ads × Adjust)模拟数据:
python evals/fresh-product/run_acceptance.py
验收产物会写入 evals/fresh-product/runtime/,包括 probe、infer 草稿、CSV、影子 diff、
客户 Excel 和最终 acceptance_result.md。
另有三套“打包 → 隔离安装 → DSH 同步 → 交互门禁 → 出报表”的新用户实用性矩阵,覆盖:
- 有模板、熟悉字段:TikTok + AppsFlyer,并验证注册产品、补充知识、下一会话按别名复用
- 无模板、完全小白:Meta + Google + Adjust(标准三 Sheet 同时展示合计、平台分项和注册→KYC→首充漏斗)
- 有模板、不懂归因口径:Google + AppsFlyer(Activity/LTV 候选必须先确认)
python evals/usability-matrix/run_matrix.py
结果与工作簿写入 evals/usability-matrix/runtime/。该目录不会发布;矩阵脚本和说明会随 npm 包提供,
方便安装者在自己的环境复验。