Back to skills
SKILL.md
Report Generator Pro
ASecurity一句话完成日/周/月/季/年报全流程:上传文件或口述工作内容 → AI 抽取整理 → 生成结构化报告 → 导出 Word/Excel/PPT/PDF
- 2 stars
- 0 votes
- 0 copies
- 1 view
- Added September 12, 2026
Security analysis
92/100- Installs packages at runtime which could introduce malicious dependencies
Pro scans all 14 files and shows the line behind each finding
npx -y skills add whyzsm/tiny-agents --skill report-generator-pro --agent claude-codeAre you the author of Report Generator Pro?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/whyzsm-report-generator-pro)---
name: report-generator-pro
description: 一句话完成日/周/月/季/年报全流程:上传文件或口述工作内容 → AI 抽取整理 → 生成结构化报告 → 导出 Word/Excel/PPT/PDF
→ HTML 美化邮件发送(内置 15+ 主流邮箱预设,自动识别 SMTP 配置, 支持授权码/应用密码引导)→ Markdown 归档。适用场景:个人日报周报、团队工作汇报、管理层月报季报年报、
项目进度报告。触发词:日报、周报、月报、季报、年报、工作报告、生成报告、发送报告、汇报、report、 工作总结、进度报告、帮我写报告、把报告发给领导。
---
# 智能报告生成助手 v3.1
## 新手30秒入门
**这个 Skill 干什么?** 一句话生成报告,一步发送邮件。
**直接复制使用:**
```
"帮我生成今天的日报:完成了用户模块,修复3个BUG,明天写测试"
"生成这周周报,从这份Excel里提取工作内容,用163发给我领导"
"把这份工作记录整理成月报PPT,发给张总zhang@company.com"
"帮我补写昨天的日报,昨天做了:..."
```
**使用前准备**(首次使用才需要):
1. 告诉我你的姓名和部门(自动记住,以后不用再说)
2. 如果要发邮件,告诉我邮箱地址(会引导你配置SMTP,约2分钟)
---
## 能力边界说明
### ✅ 擅长处理(开箱即用)
| 能力 | 示例 |
|------|------|
| 日报生成 | "生成今天的日报" → 口述或上传工作内容,自动输出结构化日报 |
| 周报生成 | "生成这周周报" → 汇总本周工作,带数据图表 |
| 月/季/年报 | "生成本月月报" → 长篇结构化报告,含趋势分析和总结 |
| 文件解析 | 上传 Word/Excel/PDF → 自动提取工作内容索引 |
| 多格式导出 | 一次生成 Word + Markdown(默认),可选 Excel/PPT/PDF |
| 邮件发送 | 163/QQ/Outlook/Gmail 等 18 种邮箱,自动识别 SMTP 配置 |
| 历史归档 | 所有报告按年月归档,随时查询"上月第三周的周报" |
| 多账户切换 | 同时配置工作邮箱和个人邮箱,根据语境自动选择 |
### ⚠️ 需要素材才能做
| 能力 | 需要的素材 |
|------|----------|
| 生成特定格式报告 | 提供公司模板文件(存入 `templates/custom/`) |
| 发送给多人/群组 | 提供收件人列表(存入 `recipients/xxx.md`) |
| 含图表的 PPT 报告 | 提供原始数据表格(Excel/CSV),AI 自动生成图表 |
| 中英双语报告 | 提供英文翻译参考(部分专业术语需要确认) |
### ❌ 超出范围(附替代方案)
| 需求 | 替代方案 |
|------|----------|
| 创作型文字(如广告文案、新闻稿) | 使用其他写作类 Skill 或直接对话 |
| 数据分析与挖掘(如求增长率、预测) | 单独用 Python 或 Pandas 计算后,把结论喂给本 Skill |
| 飞书/钉钉消息推送 | v3.1 仅支持邮件;v5.0 计划实现;当前可导出文件手动上传 |
| 在线协作文档直出 | 导出 Markdown 后复制到腾讯文档/Notion/语雀 |
| 修改已发出的邮件内容 | 邮件协议不支持撤回/修改,请先确认后再发送 |
| 接收并自动处理他人发来的工作汇报 | 本 Skill 只生成和发送,不处理收件 |
---
## 核心能力
- **全类型报告**:日报 / 周报 / 月报 / 季报 / 年报,自动识别意图
- **多源输入**:口述工作内容 / 上传文件(Word/Excel/PDF/TXT)/ 混合输入
- **多格式导出**:Word(.docx)/ Excel(.xlsx)/ PPT(.pptx)/ PDF / Markdown
- **邮件发送**:内置 18 种主流邮箱 SMTP 预设,自动识别配置,引导授权码
- **持久化归档**:所有报告以 Markdown 存储,支持历史查询和二次编辑
---
## 安全与数据隐私
### 隐私保护原则
1. **不存储明文密码**:邮箱授权码/密码通过 `cryptography.fernet` 加密存储,KEY 文件单独存放于 `config/.fernet_key`
2. **不泄露报告内容**:所有生成的报告保存在本地 `skill_data/` 目录,不自动上传到任何云端
3. **发送前确认**:发送邮件前总会展示收件人和报告摘要,用户确认后才实际发送
4. **收件人级别控制**:根据收件人类型(领导/团队/全员)自动调整报告详细度和保密级别
- **直属领导**:完整版(含全部数据和分析)
- **团队成员**:协作版(侧重协作事项和进度同步)
- **全员公告**:公开版(去除敏感数据和内部评估术语)
### 安全注意事项
- ⚠️ 不要在工作内容中包含核心机密数据(如数据库密码、客户身份证号),这些内容会被写入报告
- ⚠️ 邮箱密码/授权码只在首次配置时输入一次,不要在对话正文中发送密码
- ⚠️ 使用第三方邮箱(Gmail/Outlook)发送时,邮件内容走对应服务商的 SMTP 协议传输
- ⚠️ 如果公司有 DLP(数据防泄漏)策略,请确认发送含工作内容的邮件是否符合合规要求
### 禁止行为
- 🚫 不在未获用户明确指令时主动发送邮件
- 🚫 不伪造发件人身份(From 地址必须与 SMTP 登录账号一致)
- 🚫 不向未验证的地址批量发送邮件(防止被标记为垃圾邮件)
- 🚫 不将用户报告内容用于训练或日志分析之外的任何用途
---
## 触发与意图识别
### 各功能精确触发条件
| 你想要什么 | 怎么触发 | AI 识别逻辑 |
|-----------|---------|------------|
| 生成日报 | 说"日报" / "今天的工作汇报" / "daily report" | 自动取今日日期,生成 300~500 字日报 |
| 生成周报 | 说"周报" / "本周总结" / "weekly report" | 自动取本周一~周日,生成 500~800 字周报 |
| 生成月报 | 说"月报" / "本月报告" / "monthly report" | 自动取本月1日~月末,生成 800~1500 字月报 |
| 生成季报 | 说"季报" / "Q2报告" / "quarterly report" | 自动取本季度范围,生成 1500~2500 字季报 |
| 生成年报 | 说"年报" / "年度总结" / "yearly report" | 自动取本年数据,生成 2000~3500 字年报 |
| 发送邮件 | 说"发给" / "发送给" / "用xx邮箱发" + 收件人 | 进入邮件发送流程,自动匹配 SMTP |
| 从文件生成 | 上传文件 + "帮我写报告" | 先调用 `extract_content.py` 解析,再生成 |
| 补写历史报告 | 说"补写昨天的日报" / "生成上周周报" | 日期自动调整到指定日期 |
| 配置邮箱 | 说"配置邮箱" / "设置发件邮箱" / "添加邮箱" | 进入 `setup_email.py` 交互式向导 |
### 意图识别规则
当用户一句话同时包含多个意图时,按以下优先级处理:
1. 检测报告类型(日/周/月/季/年)
2. 检测输出格式(Word/PPT/Excel/PDF 或默认 Word+Markdown)
3. 检测发送意图(有收件人 → 邮件发送流程)
4. 检测内容来源(文件上传 / 口述 / 两者兼有)
5. 检测特殊操作(补写/配置/查询历史报告)
---
## 运行时行为约束
### 输出准确性规则
- **禁止在不确定领域胡编**:如果工作内容不足,先给出一个"假设示例版本"(标注"以下为示例内容,请确认后替换"),并列出需要补充的具体信息
- **每个关键数据注明来源**:如从文件抽取,标注"数据来源:工作记录.xlsx · Sheet: 本周任务"
- **区分事实和建议**:工作内容是事实(如实呈现),下阶段计划是建议(标注为"拟定计划")
### 降级与兜底策略
当输入信息不足时,按以下策略降级处理,不挂起也不给空回复:
| 场景 | 降级方式 |
|------|---------|
| 用户说"生成日报"但没给内容 | 回复"请告诉我今天的工作内容(可口述或上传文件),或者我为你生成一个空白模板你先填写?" |
| 文件解析失败 | 先报告"XX 文件解析失败(原因:文件加密/损坏),已跳过。报告基于其余内容生成,缺少的部分已标注",不中断流程 |
| 缺少邮箱配置 | 自动进入首次配置向导,同时展示当前生成好的报告预览(用户可先看报告,配置完邮箱后再发送) |
| 报告模板文件缺失 | 自动创建默认模板,告知用户"已自动生成默认模板:templates/xxx.md",不中断生成 |
| 多个功能并行请求 | 按"生成→展示→用户确认→发送"的顺序排队处理,每次只推进一个阶段 |
| 超出范围的能力请求 | 直接给出替代方案(参考"能力边界说明 → ❌超出范围"),不假装自己能做 |
| 网络问题导致发送失败 | 报告已生成并保存,展示本地路径,提示"邮件发送失败但报告已保存,可稍后重新发送或手动发送" |
### 错误提示规范
所有面向用户的错误提示必须满足:
- **不暴露技术细节**:不说 `ImportError: No module named docx`,而说"生成 Word 需要安装依赖,正在自动安装中..."
- **格式为"缺少[具体项]+如何补充"**:不说"参数错误",而说"缺少收件人邮箱,请提供收件人地址,例如 zhang@company.com"
- **提供下一步操作**:每条错误信息后紧跟一个明确的可执行操作
---
## 主工作流
### 阶段 0:初始化检查
```
检查 skill_data/report_generator/config/user_profile.md 是否存在
├─ 不存在 → 引导用户完成首次配置(姓名/部门/职位/常用收件人)
└─ 存在 → 读取用户档案,个性化报告
```
### 阶段 1:内容输入与抽取
**输入来源处理**:
| 来源 | 处理方式 |
|------|---------|
| 口述文本 | 直接提取工作事项,按优先级归类 |
| .docx / .doc | 调用 `scripts/extract_content.py` 解析正文 |
| .xlsx / .csv | 调用 `scripts/extract_content.py` 读取表格数据 |
| .pdf | 调用 `scripts/extract_content.py` 提取文本 |
| .txt / .md | 直接读取 |
| 混合 | 合并所有来源,去重后归类 |
**抽取结构**(标准化输出):
```yaml
extracted_content:
completed_tasks: # 已完成工作(带成果描述)
in_progress_tasks: # 进行中工作(带进度百分比)
blocked_items: # 待解决问题/障碍
key_metrics: # 关键数据指标
next_plans: # 下阶段计划
highlights: # 亮点/成就(用于标题摘要)
```
### 阶段 2:报告生成
加载 `references/report_templates.md` 获取模板规范。
**自动填充规则**:
- 标题:`[用户姓名][部门] YYYY年MM月DD日 [报告类型]`
- 周期标注:日报=当日,周报=本周一~周日,月报=本月1日~月末
- 字数控制:日报 300-500 字,周报 500-800 字,月报 800-1500 字,季/年报 1500-3000 字
- 数据亮点:自动加粗关键数字和成果
- 问题标注:用 ⚠️ 标记障碍项
### 阶段 3:文件导出
根据用户指定格式或默认 Word+Markdown 双格式导出:
```
调用 scripts/generate_report.py
参数: report_type, content_dict, output_format, template_name, output_path
输出: 生成文件路径列表
```
存储路径:`skill_data/report_generator/reports/YYYY/MM/{report_type}/YYYYMMDD_{report_type}.{ext}`
### 阶段 4:邮件发送(含邮箱配置)
**4.1 读取邮箱配置**:
```
读取 config/email_settings.md
├─ 无配置 → 进入"首次配置向导"(见邮箱配置模块)
├─ 有单账户 → 直接使用
└─ 有多账户 → 根据语境选择("工作"→company,"个人"→personal)
```
**4.2 SMTP 自动识别**:
```
提取发件邮箱后缀 → 查询 references/smtp_presets.md
├─ 命中预设 → 自动填充 host/port/ssl/auth_type
├─ 腾讯/阿里/网易企业邮箱 → 询问具体服务商
└─ 未命中 → 进入自定义 SMTP 配置
```
**4.3 发送流程**:
```
调用 scripts/send_email.py
参数: from_account, to, cc, bcc, subject, report_path, html_template
返回: success/error + 日志写入 logs/email_send_log.md
```
**4.4 失败重试**:自动重试 3 次(2s → 4s → 8s 指数退避),仍失败则保留草稿并告知用户。
### 阶段 5:归档
将最终 Markdown 版报告追加写入 `reports/YYYY/MM/{type}/index.md`(月度汇总索引)。
---
## 邮箱配置模块
### 首次配置向导
```
1. 询问发件邮箱地址
2. 自动识别服务商 → 显示 SMTP 配置(host/port/ssl)
3. 根据 auth_type 给出授权码获取指引(见下表)
4. 测试发送(发至自身验证)
5. 保存至 config/email_settings.md
```
### 授权码获取指引
| 邮箱 | 步骤 |
|------|------|
| 163/126/yeah | 登录网页版 → 设置 → POP3/SMTP/IMAP → 开启 SMTP → 短信验证获取授权码 |
| QQ邮箱 | 登录网页版 → 设置 → 账户 → 开启 IMAP/SMTP → 安全验证生成授权码 |
| Foxmail | 同 QQ邮箱(使用 smtp.qq.com) |
| 腾讯企业邮箱 | 直接使用邮箱登录密码,无需授权码 |
| Outlook/Hotmail | 微软账户 → 安全 → 两步验证 → 应用密码(生成16位密码) |
| Gmail | Google账户 → 安全 → 两步验证 → 应用专用密码(16位,无空格) |
| iCloud | appleid.apple.com → 登录和安全 → 应用专用密码 → 生成密码 |
| 阿里云邮箱 | 邮箱网页版 → 设置 → 客户端授权密码 → 开启并生成 |
| 阿里企业邮箱 | 直接使用邮箱密码 |
| 新浪/搜狐/189/139 | 各自邮箱设置页面开启 SMTP 并生成授权码 |
### 多账户切换规则
| 用户语境 | 选择账户 |
|---------|---------|
| "发给领导"/"工作邮件"/"公司" | company_* 账户 |
| "个人"/"私人" | personal_* 账户 |
| "备用"/"另一个" | backup_* 账户 |
| 无特殊语境 | 使用 is_default: true 的账户 |
---
## 异常处理
| 异常情况 | 处理策略 |
|---------|---------|
| 邮箱后缀未匹配预设 | 提示用户选择"自定义SMTP",引导填写 host/port/ssl |
| 授权码错误(SMTP 535) | 提示"密码或授权码错误",显示重新获取授权码的步骤 |
| 网络超时/连接失败 | 重试3次,仍失败则:保存草稿、提示检查网络、询问是否稍后重试 |
| Gmail/iCloud 在国内无法连接 | 提示:"Gmail 在中国大陆需配置代理,可切换至其他邮箱发送" |
| 附件超过 20MB | 自动转为本地路径链接,邮件正文末尾添加手动下载说明 |
| 收件人地址格式错误 | 正则校验 `^[\w.+-]+@[\w-]+\.[\w.]+$`,提示修正后重试 |
| SSL 证书错误 | 尝试降级至 STARTTLS,失败则提示用户手动配置 |
| 无工作内容输入 | 提示用户提供今日/本周工作内容,可口述或上传文件 |
| 文件格式不支持 | 列出支持格式(docx/xlsx/pdf/txt/md),提示转换方案 |
| 依赖库缺失 | 自动执行 `pip install -r scripts/requirements.txt`,展示安装进度 |
---
## 文件存储结构
```
skill_data/report_generator/
├── config/
│ ├── user_profile.md # 用户信息(姓名/部门/职位)
│ ├── email_settings.md # 多账户邮箱配置(加密密码)
│ └── skill_settings.md # 全局设置(默认报告类型/格式/语言)
├── templates/
│ ├── daily_default.md # 日报模板
│ ├── weekly_default.md # 周报模板
│ ├── monthly_default.md # 月报模板
│ ├── quarterly_default.md # 季报模板
│ ├── yearly_default.md # 年报模板
│ ├── email_html_default.html # HTML 邮件模板
│ └── custom/ # 用户自定义模板
├── recipients/
│ ├── leaders.md # 领导收件人列表
│ ├── team.md # 团队成员列表
│ └── all_company.md # 全公司发送列表
├── reports/
│ └── YYYY/MM/{type}/ # 按年/月/类型归档
├── logs/
│ ├── YYYY-MM-DD_actions.md # 操作日志
│ └── email_send_log.md # 邮件发送记录
└── outputs/
└── YYYY-MM-DD/ # 当日所有导出文件
```
---
## 交互示例
**示例1 - 快速日报**:
> 用户:"帮我生成今天的日报:完成了用户模块开发,修复了3个BUG,明天继续写测试用例"
> → AI 自动抽取 → 生成日报 Word 文件 → 询问是否发送
**示例2 - 上传文件生成周报**:
> 用户:上传工作记录.xlsx → "帮我生成本周周报并发给张总"
> → 解析文件 → 生成周报 → 读取收件人配置(张总) → 发送邮件
**示例3 - 首次使用 Gmail**:
> 用户:"用我的 Gmail 发送报告"
> → 识别 Gmail → 提示需要应用专用密码 → 给出 Google 账户设置链接和步骤 → 引导输入16位密码 → 测试发送 → 保存配置
**示例4 - 多账户切换**:
> 用户:"用工作邮箱发给部门群"
> → 自动选择 company_exmail 账户 → 查询 team.md 获取收件人 → 发送
---
## 调用脚本说明
所有脚本位于 `scripts/` 目录,调用前确认 Python 依赖已安装(见 `scripts/requirements.txt`):
| 脚本 | 用途 | 关键参数 |
|------|------|---------|
| `extract_content.py` | 从文件抽取工作内容 | `--file <路径> --type <docx/xlsx/pdf/txt>` |
| `generate_report.py` | 生成报告文件 | `--type <日报/周报> --format <word/excel/ppt/pdf> --output <路径>` |
| `send_email.py` | 发送邮件 | `--from <账户名> --to <收件人> --subject <主题> --attach <附件路径>` |
| `setup_email.py` | 邮箱配置向导 | 交互式引导,无需参数 |
---
## FAQ
### Q1:工作内容太少/太杂,AI 帮我总结得不好怎么办?
**答**:垃圾进垃圾出。提供工作内容时尽量包含"具体事项+量化数据+做了什么"。示例对比:
- ❌ "开发了功能"
- ✅ "完成了用户登录模块:实现了手机号+验证码登录,前端 React Hooks,后端 Node.js + Redis,测试覆盖率 90%"
如果实在没时间整理,直接说"先给我一个假设版本",AI 会填入示例内容并标注待确认。
### Q2:我的公司有固定报告格式,可以适配吗?
**答**:把公司模板 Markdown 文件放入 `templates/custom/` 目录。使用时说"用我的 XX 模板生成周报"。HTML 邮件模板也可自定义(`templates/custom/email_日报.html`)。
### Q3:生成的文件打开乱码怎么办?
**答**:用 WPS 或 Office 2016+ 打开(UTF-8 编码)。Excel 用"数据 → 自文本/CSV → UTF-8"导入。纯文本用 VS Code 查看。
### Q4:能用 QQ 邮箱发送给多人吗?
**答**:可以。说"发给张总和李经理",用逗号分隔。需要抄送/密送时说"抄送给xx"或"密送给xx"。QQ 邮箱的每日发信限额请参考 QQ 邮箱官方说明。
### Q5:报告自动保存在哪里?能查看上周的报告吗?
**答**:保存在 `skill_data/report_generator/reports/YYYY/MM/{type}/` 目录。说"查看上周的周报"或"打开上个月的月报汇总",AI 会定位并读取对应文件。
### Q6:可以设置每天自动生成日报吗?
**答**:可以。说"帮我设置每天18:00自动生成日报并发给张总"。WorkBuddy 的自动化机制会在指定时间触发 Skill。
### Q7:如果有多个项目并行,能按项目分别生成报告吗?
**答**:可以。说"按项目分组生成日报"或"单独生成项目A的进度报告"。AI 会从工作内容中识别项目标签并分组输出。
### Q8:手机收邮件排版会很乱吗?
**答**:不会。HTML 邮件模板采用响应式设计,在手机邮件客户端(QQ邮箱APP / 网易邮箱大师 / Gmail APP)上均会自适应缩放到合适的阅读尺寸。
> 更多 FAQ(工具兼容、定制化、故障排查)见 `references/faq-deep.md`
---
## 受众说明
| 用户类型 | 如何使用 |
|---------|---------|
| **个人上班族** | 直接说"生成日报",口述工作内容即可。默认 Word+Markdown 双格式输出 |
| **团队 Leader** | 使用周报/月报功能汇总团队进展,设置定时发送给上级 |
| **项目经理** | 上传多份工作日志 Excel,批量解析生成汇总报告 |
| **自由职业者** | 配置个人邮箱和签名档,用专业格式向客户汇报进度 |
| **HR/行政** | 生成部门级别周报/月报,汇总考勤、报销、招聘等数据 |
---
## 定制化使用指南
| 定制需求 | 操作方式 |
|---------|---------|
| 修改默认输出格式 | 在 `config/skill_settings.md` 中修改 `default_format: word` |
| 自定义报告署名 | 在 `config/user_profile.md` 中填写 `signature` 字段 |
| 添加公司 Logo | 将 logo 图片放入 `assets/`,在模板中引用 |
| 调整字数阈值 | 在 `config/skill_settings.md` 中修改 `word_count.*` 字段 |
| 常用收件人 | 在 `recipients/leaders.md` 或 `team.md` 中维护人员列表 |
| 固定发送时间 | 通过 WorkBuddy 自动化(automation)设置定时任务 |
---
## 参考资料
- `references/smtp_presets.md`:所有 18 种支持邮箱的 SMTP 完整配置
- `references/report_templates.md`:日/周/月/季/年报的 Markdown 模板规范
- `references/email_html_template.md`:HTML 邮件美化模板说明与 Jinja2 变量表
- `references/anti-patterns.md`:7 种常见错误用法 + 改进对比案例 + 禁忌清单
- `references/faq-deep.md`:18 道深度 FAQ(垂直领域/工具兼容/定制化/安全/故障排查)
- `scripts/requirements.txt`:Python 依赖清单(含可选依赖标注)
- `assets/email_html_default.html`:响应式 HTML 邮件默认模板
Files in this skill
- SKILL.md
- agents/openai.yaml
- assets/email_html_default.html
- references/anti-patterns.md
- references/email_html_template.md
- references/faq-deep.md
- references/report_templates.md
- references/smtp_presets.md
- scripts/extract_content.py
- scripts/generate_report.py
- scripts/requirements.txt
- scripts/send_email.py
- scripts/setup_email.py
- source.json
Attribution
Comments
Loading comments…