# PE-bishi-daily

> 自动化生成「每天一个体育笔试知识点」小红书帖子 docx，并可同步上传到 ima 知识库「A-0 每日一个知识点（笔试）」。基于「体育笔试每日一练」固定模板 + python-docx 脚本，从「讲义库举一反三讲稿」取知识点，自动套版式：封面大标题+单选题引出知识点，中间 2 页考点解析，最后一页考法提醒，保留引流段与品牌页眉页脚。触发词：每天一个体育笔试知识点、体育笔试每日一练、出一期体育笔试知识点。

- Skill: `rshawn0307-maker/pe-bishi-daily` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add rshawn0307-maker/pe-bishi-daily`
- Raw SKILL.md: https://api.skillmd.com/api/skills/rshawn0307-maker/pe-bishi-daily/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: rshawn0307-maker (https://skillmd.com/u/rshawn0307-maker)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/rshawn0307-maker/pe-bishi-daily

---


# 每天一个体育笔试知识点 · 自动出帖

## 适用场景

把「讲义库举一反三讲稿」（128 篇）里的知识点，每天出一篇小红书帖子 docx：

- 第 1 页封面：大标题「每天一个体育笔试知识点」+ 【模块】标签 + 一道单选题（题干+ABCD），不给答案
- 第 2 页：今日考点标题 + 答案揭晓 + 考点解析引导句 + 表格 1（表格后紧跟下一段文字，连排不留空白）
- 第 3 页起：考点解析引导句 + 表格 2 自然续排
- 最后一页（新起一页）：考法提醒 5 条 + 话题标签 + 固定引流段

内容形式铁律：图表优先。讲稿里现成的对比表/汇总表/分类表（如三/四/五要素说、5 大规律、7 大原则、评价分类），一律整理成表格放进帖子，正文只留简短引导句和结论句，不用大段纯文字罗列。

表格版式铁律：列宽列高必须随内容自适应（脚本已按 WPS 调校效果固化：autofit 自适应、单元格垂直居中、表头重复、单元格上下边距 0 左右 108）。表格和后续文字必须连排，正文不许有强制分页，只有考法提醒页保留分页。

视觉沿用领导指定的体育教师编底版：封面深蓝底图、浅青标题字、页眉「体师备考知识库」、页脚装饰，全部不许改。

## 关键路径（Pre-flight 必查）

| 路径 | 说明 |
|------|------|
| `/Users/shawn/Desktop/AI工作区/02-Areas/教师编体育学科培训/笔试/01_备课资料/讲义与笔记/讲义库举一反三讲稿/` | 讲稿源（只读，18 模块、128 篇，不含 _INDEX.md） |
| `/Users/shawn/Desktop/AI工作区/01-Projects/自媒体内容库-持续项目/体育教师编/模板文件/1 体育笔试每日一练-帖子内容编辑模板.docx` | 源模板（只读） |
| `/Users/shawn/Desktop/AI工作区/01-Projects/自媒体内容库-持续项目/体育教师编/desktop-attachments/1 体育笔试每日一练-帖子内容编辑模板.docx` | 脚本写入目标 |
| `/Users/shawn/Desktop/AI工作区/01-Projects/自媒体内容库-持续项目/体育教师编/scripts/fill_sports_daily_post.py` | 填充脚本（项目镜像） |
| 本 skill 的 `scripts/fill_sports_daily_post.py` | 填充脚本（自带源，随 skill 分发） |
| `/Users/shawn/Desktop/AI工作区/01-Projects/自媒体内容库-持续项目/体育教师编/scripts/progress_sports.json` | 选题进度 |
| `/Users/shawn/Desktop/AI工作区/01-Projects/自媒体内容库-持续项目/体育教师编/scripts/_snapshots_sports/` | 快照（回退用） |

> 项目镜像与 skill 自带脚本逐字节一致，二选一运行皆可。若使用 skill 自带脚本，需先设置 `SPORTS_DAILY_WORKSPACE` 指向真实项目根（`体育教师编` 的父目录，即 `.../01-Projects/自媒体内容库-持续项目`）；脚本会据此定位模板、进度与输出目录。未设置时默认取脚本所在目录的父目录，通常只适用于 skill 自带脚本的隔离自测。

Python：优先用当前会话提供的捆绑 Python（已装 python-docx 1.2.0）；若运行时缺失，可临时装到 /tmp 环境（`python3 -m venv /tmp/tyt_venv && /tmp/tyt_venv/bin/python -m pip install python-docx`，需要联网授权），只用临时环境，不许改系统。系统 python3 默认没有 docx，别直接用它。

开始前只读检查关键路径，允许工作副本、快照目录不存在。源模板须有正文 17 段、图片 2 张、封面文本框 2 个；`今日考点｜{TITLE}`、`{ANSWER}`、`{POINT_1}` 至 `{POINT_4}`、`{TIP_1}` 至 `{TIP_5}`、`{HASHTAGS}` 与固定引流段各 1 处；唯一强制分页位于考法提醒标题。任一项不符，报告期望值和路径后 🔴 STOP，不运行脚本。

## 工作流（6 步）

### 步骤 1：选题

1. 先读 `scripts/progress_sports.json`。确认它是合法 JSON，`done` 是无重复的相对路径列表，`last_done` 为空或存在于 `done`，且记录的源文件均能找到。任一项不满足，执行下文的 🔴 STOP，不得选题或写文件。
2. 领导指定某篇时，按模块、文件名或篇号定位。若命中 0 篇或多篇，列出候选并 🔴 STOP；若唯一命中但路径已在 `done`，报告已完成路径并 🔴 STOP，不得重复出帖。仅当该路径等于 `last_done` 时附上 `last_date`，否则注明历史完成日期未记录。
3. 领导没指定时，扫描数字开头的模块目录，先按目录名前导数字升序，再按讲稿文件名前导数字升序、完整文件名升序排列，排除 `_INDEX.md`，选择第一篇相对路径不在 `done` 的讲稿。`last_done` 只用于审计记录，**不作为顺延起点**。
4. `done` 是自动选题的唯一完成记录。领导说明进度有漏记时，先补齐记录再选题；不得根据 `last_done`、文件修改时间或猜测补做历史。
5. 没有未完成讲稿时，报告 128 篇全部完成并 🔴 STOP。

讲稿源始终只读，不得为方便选题而重命名、移动或修改。

### 步骤 2：从讲稿抽核心知识点

- 通读 frontmatter + 「一、考点前瞻」+ 「二、考点解析」。
- 先定本篇唯一考点，一句话写进 `title`。领导已指定子考点时直接采用；否则依次优先选择讲稿明确标记为高频/易错/考法提醒、能用 1-2 张表完整呈现的考点，同优先级时取正文中最先出现者。没有任何考点能满足表格规格时，说明原因并 🔴 STOP，不得把无关内容拼成表格。
- 题干、答案、引导句、表格、考法提醒必须全部围绕这同一个考点，不许题干考 A、解析讲 B。
- 核心事实（数字、年份、人名、名称、分类）必须与讲稿一致，禁止编造；讲稿没写的，不补。
- 同一事实在讲稿内出现互相冲突的数字、名称或分类时，引用冲突位置并 🔴 STOP，请领导裁决；不得静默任选一处、擅自纠正或联网补答案。
- 引用讲稿内容时直接写引号，禁止加「讲义原文：」「原文：」「教材：」之类前缀。

### 步骤 3：出题 + 写内容

按下面 schema 生成 `scripts/pending_sports_daily.json`：

```json
{
  "title": "本篇知识点标题（≤20 字）",
  "module": "模块名（如：运动解剖学）",
  "question": "单选题题干，≤60 字，紧扣本篇知识点",
  "options": ["选项A", "选项B", "选项C", "选项D"],
  "answer": "答案：X。一句解析（忠于讲稿）",
  "points": ["引导句1（≤120字）", "引导句2（≤120字）", "引导句3（≤120字）", "引导句4（≤120字）"],
  "tables": [
    {"header": ["列1", "列2", "列3"], "rows": [["单元格", "单元格", "单元格"], ["单元格", "单元格", "单元格"]]},
    {"header": ["列1", "列2"], "rows": [["单元格", "单元格"]]}
  ],
  "exam_tips": ["考法提醒1", "考法提醒2", "考法提醒3", "考法提醒4", "考法提醒5"],
  "cta": "关注我，每天一个体育笔试知识点，帮你一次上岸",
  "hashtags": "#教师编 #体育教师 #体育笔试 #每天一个知识点 #一次上岸"
}
```

硬性要求：

- `question` ≤60 字（超了脚本会拒绝）。
- `points` 恰好 4 段，每段 ≤120 字，只写引导句/结论句，不写「第一/第二/第三」机械开头；核心知识全部放进表格。
- `tables` 1-2 张：每张含 `header`（2-5 列）和 `rows`（1-8 行），单元格全部非空。表格内容必须来自讲稿的表格、对比或分类，第一张放第 2 页（点在 points 第 2 段后），第二张放第 3 页（点在 points 第 4 段后）。
- `exam_tips` 恰好 5 条：优先取讲稿里「🔥 考法提醒/易错/高频」原文要点；讲稿没有「考法提醒」字样的，从考点前瞻+考点解析中的高频/易错标注提炼，不许凭空编。
- `cta` 必须与固定引流文案一字不差（脚本会校验）。
- `hashtags` 默认用上面 5 个标签；领导另有要求才改。
- 答案放正文开头揭晓（封面只出题，不放答案）。

### 步骤 4：去 AI 味儿（必跑）

触发 human-writing skill，对 `points`、`exam_tips` 及 `answer` 中固定答案前缀之后的解析句重写。若 human-writing 不可用，🔴 STOP，不得静默降级。硬禁令：

- `answer` 必须保留 `答案：X。` 固定前缀；这个冒号是唯一例外。其余正文中的冒号、破折号（——）清零，改逗号或句号。
- 禁「体现/彰显/凸显/值得注意的是/此外/综上所述」等 AI 腔。
- 禁三段式机械排比；读起来像人话、像老师在讲。

### 步骤 5：跑脚本 + 验证 + 收尾

```bash
cd "/Users/shawn/Desktop/AI工作区/01-Projects/自媒体内容库-持续项目"
python3 体育教师编/scripts/fill_sports_daily_post.py
```

只有输出同时出现 `✅ 全部通过` 和 `✅ pending_sports_daily.json 已删除`，才算生成成功。

成功后再更新 `scripts/progress_sports.json`：把本篇相对路径追加进 `done`，将同一路径写入 `last_done`，将上海时区当天日期按 `YYYY-MM-DD` 写入 `last_date`。重新读取 JSON，确认三处均命中。脚本失败时不得更新进度；DOCX 已成功但进度写入失败时，只修进度并复核，不得重跑填充脚本。

向领导报告：题目、模块、知识点标题、输出 docx 路径、验证通过项（段数 17 / 图片 2 / 文本框镜像 2 / 分页符 / 占位符零残留 / 引流段未动）。

### 步骤 6：上传到 ima 知识库（领导要求时执行）

生成 DOCX 后，如需同步到 ima 知识库「A-0 每日一个知识点（笔试）」，按以下流程（调用 ima-skill，凭证在 `~/.config/ima/`）：

1. 生成 md 版：把本期内容整理成 markdown（标题、模块、题目、答案、考点解析表格、考法提醒、话题标签），保存到 `体育教师编/每日知识点md/YYYY-MM-DD-标题.md`。
2. 定位知识库：`search_knowledge_base`（query "SHTr"）→ 取「SHTr | 体师知识库」的 `kb_id`。
3. 定位文件夹：`get_knowledge_list` 逐级进入「1 笔试（学科知识 教综知识）持续更新...」→「A-0 每日一个知识点（笔试）」，取目标 `folder_id`。
4. 创建笔记：notes 模块 `import_doc`（`content_format=1`，content 为 md 全文）→ 得 `note_id`。
5. 加入知识库：`add_knowledge`（`media_type=11`，`note_info.content_id=note_id`，`knowledge_base_id`，`folder_id`）。
6. 校验：`add_knowledge` 返回 `code=0` 即成功；向领导报告笔记标题与所在文件夹。

> 笔记写入前必须校验 content 为合法 UTF-8；`title` 用「每天一个体育笔试知识点｜{知识点标题}」。

## 失败恢复


| 触发条件 | 一线处理 | 仍失败时的兜底 |
|---|---|---|
| 任一关键路径缺失、源模板契约不符或 Python 不能导入 `docx` | 🔴 STOP，报告缺失路径、实际数量或原始报错，不开始写入 | Python 缺包时仅在获准后使用 `/tmp/tyt_venv` 安装；模板不符时交由模板维护者恢复，不改脚本绕过 |
| `progress_sports.json` 缺失、损坏或记录自相矛盾 | 🔴 STOP，依据已确认的发布记录修复进度 | 无权威记录时请领导确认；不得新建空进度后继续 |
| 指定讲稿重复、定位不唯一或全库已完成 | 🔴 STOP，报告已完成项或列出候选 | 请领导改选；不得覆盖、重复追加或自行换题 |
| 讲稿事实冲突，或找不到能满足表格规格的单一考点 | 🔴 STOP，引用具体冲突或缺口 | 等领导裁决；不得凭外部知识补齐 |
| JSON 字段、字数或表格校验失败 | 根据原始错误只修 `pending_sports_daily.json`，再重跑 | 不改脚本阈值，不删字段，不用 `|| true` 绕过 |
| 提示“表格锚点未唯一命中” | 让 `points[1]`、`points[3]` 分别成为正文中的唯一文本；即使只有 1 张表，两处也都要唯一 | 若源模板占位符异常，🔴 STOP 并报告；不得修改源模板 |
| 写入或自动验证失败 | 先确认终端是否打印“已回滚工作副本到快照”；已回滚则不要再手工复制 | 自动回滚失败时复制本次日志明确指出的快照；首次运行无快照时，用只读源模板重置工作副本 |
| 失败后找不到 `pending_sports_daily.json` | 🔴 STOP，保留现场并核对完整日志 | 不从半成品 DOCX 反推 JSON，不继续更新进度 |
| DOCX 成功但进度写入失败 | 保留成功 DOCX，只修复并复核进度 JSON | 不重跑填充脚本，避免重复覆盖和制造误导快照 |

`[KEEP]` 只是终端提示，表示 JSON 未删除；它不会写进 JSON 文件。

## 🔴 STOP 与反例黑名单

- 不把 `last_done` 当自动续题游标；默认始终补 `done` 中全库第一篇缺口。
- 不在进度缺失、重复选题、定位不唯一、源材料冲突或 human-writing 不可用时继续写文件。
- 不修改讲稿源、源模板、品牌底版、固定引流段或脚本校验阈值。
- 不把脚本已完成的自动回滚再覆盖成目录里笼统的“最新快照”。
- 不在脚本成功前更新进度，也不为补写进度而重跑成功的填充脚本。
- 不绕过校验、不静默降级、不用外部常识修补讲稿没有给出的事实。

## 模板与脚本铁律

- 源模板、底版、讲稿源只读；只允许新增/覆盖 `desktop-attachments/` 工作副本与 `scripts/` 下自己的文件。
- 脚本每次跑前自动快照到 `_snapshots_sports/`（保留最近 10），写入或验证失败时会自动恢复本轮快照。仅当日志显示自动恢复失败时，才按“失败恢复”表手工处理。
- 固定引流段、封面大标题、页眉页脚、封面背景不许改；脚本验证发现改动会失败。
- 脚本验证失败时 JSON 会原样保留，终端打印 `[KEEP]` 提示；按错误修 JSON 重跑，不许绕过校验、不许 `|| true`、不许改脚本阈值。
- 同篇讲稿不许重复出帖；重复会破坏「每天一个」的连续感。

## 验证清单（每次跑完必查）

```
□ 段数 = 17
□ 图片 = 2（封面底图 + 文本框）
□ 封面文本框 2 处镜像内容一致
□ 封面 = 大标题 + 【模块】 + 题干 + ABCD，无答案
□ 强制分页仅 1 处（考法提醒页），表格与后续文字连排、第 3 段引导句无分页
□ 占位符零残留
□ 表格数 = JSON.tables 数量（1-2 张），表头与单元格全部命中
□ 每张表 tblLayout=autofit、tblW=auto（列宽列高自适应）
□ points 每段 ≤120 字，核心信息在表格里
□ 固定引流段原样保留
□ 答案、4 段解析、5 条考法提醒、话题标签全部命中
□ 脚本两条成功提示均出现后，progress_sports.json 才更新且回读通过
□ 已完成讲稿未重复，讲稿内部无待裁决事实冲突
□ human-writing 已实际执行，无静默降级
□ （若上传）ima 笔记已创建并加入「A-0 每日一个知识点（笔试）」，add_knowledge 返回 code=0
```


