---
name: sp-02-safety-training
description: 生成××项目部一整套「安全教育培训」材料——培训通知单、培训记录表、培训效果评估表、签到表四份制式表单，外加一份不少于10页的培训PPT和一套15题的配套试卷。当用户提到做/搞/organize 教育培训、专项培训、安全培训、三级教育、季节性培训、事故警示教育、培训课件、培训试卷、培训通知单、培训记录时，务必使用本技能，即使用户没说「技能」两个字。用户只需说明培训主题，其余全部自动生成。
---

# 安全教育培训成套材料生成器（v1.0）

一次生成六份文件：4 份制式表单（Word）+ 1 份培训 PPT（≥10页）+ 1 份试卷（Word，15题带答案）。

用户只提「做一个什么什么培训」，其余由本技能补全。

## 路径规则

盘符可能变化，**所有读写以本 SKILL.md 所在目录为基准的相对路径**，不要写死盘符。

### 模板查找顺序（两级，命中即停）

```
1. 专用  <本技能目录>\templates\              ← 优先
2. 通用  Z_Skills\template\03-培训\           ← 兜底
```

同一个模板两处都有 → 用专用那份。专用目录没有 → 自动回落通用库，不报错。
同名多版本并存 → 自动取版本号最高的（v1.2 胜过 v1.0）。

三份模板的基名固定，版本号可变：

```
TPL-培训-培训通知单-v<版本>.docx
TPL-培训-培训记录和效果评估表-v<版本>.docx
TPL-培训-培训签到表-v<版本>.docx
```

用户要微调占位符时：从通用库复制到 `templates\`，版本号加一位，在专用目录里改。
**通用库那份保持不动**——它是干净底本。详见 `templates\说明.md`。

产出目录（不存在就建）：

```
I:\××\2026年\Z_claude\<YYYY-MM>\<YYYY-MM-DD>-<培训主题>培训\03-成品\
```

---

## 第一步：问清楚这 4 件事

用户说了培训主题之后，**一次性**把下面 4 项列出来问。除第 1 项外都有默认值，用户说「按默认」就直接用：

1. **培训主题**（必填）—— 用户通常已经给了，没给才问
2. **培训时间** —— 默认今天
3. **应培训人数** —— 默认留空由用户手填
4. **培训主持 / 授课人** —— 默认「项目部安全环保部」

不要问超过这 4 项。人数、地点这些留空比瞎填强。

固定值（不用问）：
- 组织部门：安全环保部
- 培训地点：项目部会议室
- 通知单编号：`安培{{年}}-{{月}}-{{日}}`，如 `安培2026-08-10`

## 第二步：先写内容大纲，再生成文件

**顺序不能反。** 先定出这份大纲，六份文件全部由它派生，这样通知单、记录表、PPT、试卷的口径才能对上：

```
培训主题：
培训目的：       ≥200字，5条以上
培训议题：       5~6条，每条一句话（= PPT 的章节）
章节1 标题：
  ├ 要点1 标题 + 3~5句说明
  ├ 要点2 ...
章节2 ...
（共 4~5 个章节，每章节 2~3 个要点）
```

内容要求：

- **落到××光伏项目的实际场景**——本项目的实际作业类型。不要写成放之四海皆准的通用安全课
- 涉及具体数值（温度阈值、高度、电压、间距、时限）时必须准确；拿不准就写定性描述，**不要编造数字**
- 引用法规标准要写全称和文号；记不清就不引用

## 第三步：生成四份表单

用 `scripts/fill_forms.py`，它按上面的两级顺序找模板，复制后替换 `{{}}` 占位符，原格式（字体、边框、公文版式）完整保留。

```bash
python scripts/fill_forms.py --config <配置json路径> --out <成品目录>
```

配置 JSON 的字段见 `references/字段说明.md`。运行后会打印每份表单实际用的是 `[专用]` 还是 `[通用]` 模板——**核对一遍**，用户改过专用模板却显示 `[通用]`，说明文件名基名对不上。

四份表单的填写差异：

| 表单 | 填什么 | 留空什么 |
|---|---|---|
| 培训通知单 | 编号、名称、时间、地点、主持、议题、目的、通知日期 | 签发人 |
| 培训记录表 | 内容、授课人员、时间、地点、主要内容 | 应培训/实培训人数（除非用户给了） |
| 培训效果评估表 | 课程名称、授课人、时间 | 其余是现场打勾项，全部留空 |
| 签到表 | **只填培训地点、培训内容** | **时间栏留空**，姓名单位全部留空，现场手填 |

签到表这条是用户明确要求的，不要自作主张填时间或预填人员名单。

## 第四步：生成 PPT

用 `scripts/build_pptx.py`，从头搭建 16:9 版式，**不少于 10 页**。

页面结构：

```
第1页    封面      主题 + 副标题 + 单位 + 日期
第2页    目录      列出全部章节
第3页    章节页    01 + 章节标题
第4-N页  正文页    每个要点一页：标题 + 2~4 个要点块
...      章节页/正文页交替
倒数第2页 要点回顾  全篇核心要点浓缩
最后1页  结束页    「安全无小事，责任重于山」类收尾 + 单位
```

设计约束（`scripts/build_pptx.py` 里已实现，改内容不要改这些）：

- 16:9（13.33in × 7.5in）
- 正文页标题 28pt、要点标题 18pt 加粗、说明文字 14pt
- 每页正文块不超过 4 个，每块说明不超过 60 字——**宁可多分一页，也不要挤**
- 配色：深蓝 `#1F3864` 主色、橙 `#ED7D31` 强调色、灰 `#595959` 正文
- 中文字体统一「微软雅黑」

章节数 × 每章要点数要凑够 10 页以上。4 章 × 2 要点 = 8 正文页 + 封面 + 目录 + 4 章节页 + 回顾 + 结束 = 15 页，够用。

## 第五步：生成试卷

用 `scripts/build_exam.py`。

**固定格式**（用户已确认，不要改）：

| 题型 | 题数 | 每题分值 | 小计 |
|---|---|---|---|
| 单项选择题 | 6 | 5 分 | 30 分 |
| 多项选择题 | 4 | 10 分 | 40 分 |
| 判断题 | 5 | 6 分 | 30 分 |
| **合计** | **15** | | **100 分** |

- 单选 4 个选项（A-D），多选 5 个选项（A-E）、正确项 2~3 个
- 判断题用「正确的打√，错误的打×」
- 试卷抬头：主题 + 「姓名：____ 得分：____」
- **答案附在试卷末尾**，标题写「参考答案」，含每题答案；答案区前加一行 `———— 以下为参考答案，发给学员前请删除 ————`
- 题目必须能从本次培训内容里找到依据，不考没讲过的东西

### 答案布局随机（重点）

**正确选项的位置必须打散。** 具体要求：

- 单选 6 题的正确答案里，A/B/C/D 每个字母出现 1~2 次，**不允许某个字母出现 3 次以上**
- 判断 5 题里，「正确」和「错误」的数量差不超过 1（即 3:2 或 2:3）
- 多选 4 题的正确项组合不要重复（不要 4 题答案都是 ABD）

`scripts/build_exam.py` 里的 `check_answer_spread()` 会自动校验，不满足会报错。生成后必须跑一遍校验，不通过就调整选项顺序重新生成。

## 第六步：成稿检查（不能跳过）

生成完六份文件后，逐份检查：

1. **无 AI 痕迹**——搜索并清除 `</think>`、「好的，这是一份」、「希望这份材料对您有帮助」、「作为AI」等字样。项目部现有的《夏季防高温试卷.docx》就混进过一段 `</think>好的，这是一份专门为...`，夹在多选题和判断题中间，一直没人发现
2. **无残留占位符**——搜索 `{{`，确认表单里没有没替换掉的
3. **数字对得上**——试卷总分 100、题号连续、PPT 页数 ≥10
4. **口径一致**——通知单的议题、记录表的主要内容、PPT 的章节标题，三者说的是同一件事

检查通过后，告诉用户每份文件的保存路径和页数/题数。

---

## 输出文件命名

放在 `Z_claude\<YYYY-MM>\<YYYY-MM-DD>-<主题>培训\03-成品\`：

```
1-培训通知单-<主题>-YYYYMMDD.docx
2-培训记录和效果评估表-<主题>-YYYYMMDD.docx
3-培训签到表-<主题>-YYYYMMDD.docx
4-培训课件-<主题>-YYYYMMDD.pptx
5-培训试卷-<主题>-YYYYMMDD.docx
```

序号前缀让文件按使用顺序排列（通知→记录→签到→讲课→考试）。

## 注意事项

- 模板库里的 `TPL-*` 文件**只读不改**。要改模板结构，改完记得升版本号、旧版移进 `template\_历史版本\`
- 用户如果说「只要试卷」「只要PPT」，就只生成那一份，不要强行出全套
- 表单里拿不准的信息一律留空，让用户手填，**不要编造人数、姓名、具体日期**
- 生成完不要把内容全文贴回对话，只报路径 + 关键数字（PPT几页、试卷几题几分）
