Back to skills
SKILL.md
course-helper
ASecurity课程学习资料整理与习题解答方法:把讲义、课件、PDF 整理成复习大纲,解答习题,生成公式速查表与易错辨析;并维护跨会话的教学交接文档(学习进度)、管理项目提示词库、按模块拆分项目资料档案(B 层)。当用户在课程学习类项目中要求整理讲义或课件、编写或续写复习大纲、讲解课程概念、解答作业题(HW/习题)、续写学习进度或教学交接文档、登记常用提示词时使用。不适用于纯代码工程项目。
- 2 stars
- 0 votes
- 0 copies
- 0 views
- Added October 22, 2026
Security analysis
100/100Pro scans all 3 files and shows the line behind each finding
npx -y skills add xxxhhhccc458/course-helper --agent claude-codeAre you the author of course-helper?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/xxxhhhccc458-course-helper)---
name: course-helper
description: 课程学习资料整理与习题解答方法:把讲义、课件、PDF 整理成复习大纲,解答习题,生成公式速查表与易错辨析;并维护跨会话的教学交接文档(学习进度)、管理项目提示词库、按模块拆分项目资料档案(B 层)。当用户在课程学习类项目中要求整理讲义或课件、编写或续写复习大纲、讲解课程概念、解答作业题(HW/习题)、续写学习进度或教学交接文档、登记常用提示词时使用。不适用于纯代码工程项目。
---
# 课程资料整理与习题解答方法(A 层 · 通用)
> 本 skill 只含**可迁移的方法**。项目事实(资料在哪、编号怎么定、什么不考、提示词库内容)
> 一律放在 `<当前会话工作区根目录>/.dsh/skills/course-notes-profile/`(下称 **B 层**)。
> B 层的「取舍特例」优先级高于本文件的通用判据。
> **不要**再把 B 层写成平铺文件 `<工作区根目录>/.dsh/course-notes-profile.md`:
> 那个位置 DSH 不扫描,skill-manager 插件还会报「缺少完整 YAML frontmatter」。
## 0 开工规程(每次任务都要执行)
1. 读 `<工作区根目录>/.dsh/skills/course-notes-profile/SKILL.md`。它是 **B 层索引**,含模块路由表。
2. **按需加载模块**:只读与本次任务相关的模块文件,**不要一次读完整个 B 层**。常见对应:
- 整理大纲 / 讲概念 → `资料源.md` + `取舍.md` + 定位与记号模块
- 解答习题 / 定位原题 → `定位.md`
- 续写进度 / 交接 → `产物.md`(进度文档位置与模板)+ 第 11 节
- **进度文档不存在**(或用户说「不知道学到哪」)→ 按第 11.2 节的三轮访谈重建,**不得凭一句话直接生成**
- 调用或登记提示词 → `提示词.md` + 第 12 节
3. **不存在** → 先执行第 1 节「初始化 B 层」,生成后交用户确认,再开始正题。
4. **只找得到旧路径** `<工作区根目录>/.dsh/course-notes-profile.md` → 先按第 15 节迁移成标准目录包,删掉旧文件,再继续。
5. **是单文件 B 层,但已触发第 13 节的拆分阈值** → 按第 13 节拆分,内容不丢。
6. **存在,但资料源可能已变** → 只重扫资料源模块里的清单,其余不动。
7. B 层与本文件冲突时,**以 B 层为准**。
8. **B 层声明的产物缺失时,要主动报**:若 `产物.md` 写了某产物的落盘位置而文件不存在(典型是进度文档),**任何任务**开工时都必须主动告知并提议初始化,**不得等用户专门要求**。
## 1 初始化 B 层(新项目首次使用)
B 层落盘位置固定为**技能目录包**,不是单个散落的 md:
```
<工作区根目录>/.dsh/skills/course-notes-profile/
├── SKILL.md ← 唯一带 frontmatter 的索引
├── 资料源.md
├── 定位.md
├── 取舍.md
├── 产物.md
└── 提示词.md
```
勘查,不要凭空写:
1. 列出项目根目录结构,识别资料源(讲义 / 课件 / 教材 / 作业 / 数据 / 既有笔记 / 既有进度文档)
2. 统计每个资料目录的文件数与类型;**会新增文件的目录只记通配符,不记清单**
3. 打开 1–2 个既有产物,反推用户已认可的规范;没有产物就跳过,不要编
4. 抽 1 份 PDF 试提取文字,记录可读性(正常 / 乱码 / 无文本层)
5. 抽查特殊文件:CSV 是否带 BOM、PPTX 能否解析、`.venv` 里是否缺 pymupdf 之类
6. 按第 10 节模板写出 B 层,索引**开头必须带 frontmatter**(`name` + `description`),正文**逐条标注证据来源**;查不到的一律留空并写「待确认」
7. 小项目可先写单文件(第 13 节阈值内),大项目直接按模块拆
8. 交用户确认后才算完成
写完后在 skill-manager 面板核对:应出现在「项目技能 → Project DSH」下且**可启用/停用**。
若提示「缺少完整 YAML frontmatter」,是 frontmatter 没写对,见第 15 节。
## 2 资料清单:现场扫描,永不写死
- 写死清单 = 新增文件永远不会被看到。凡是「以后还会加文件」的目录,B 层只记**通配符 + 刷新规则**。
- 每次任务开始时重新扫描并现场生成对照表,旧表作废。
## 3 内容取舍(本文件最重要的一条)
**判据:这段内容会不会出现在任何一道题的题干或解答里?不会,就不进正文。**
| 写进正文 | 不进正文(或压成一行) |
|---|---|
| 定义、判定条件、计算公式 | 软件/编程实现(除非 B 层声明本课程考它) |
| 定理及其成立前提 | 人物生平、学派故事 |
| 典型题型与解题模板 | 发展史叙事、与考点无关的工程背景 |
| 易错点、反例、概念辨析 | 示例性代码与输出截图 |
- 资料里写了但明显不考的 → **剔除**,最多留一句「另附 ××,略」
- 拿不准 → 保留但压成一行,不展开推导
- **一致性服从取舍**:旧产物里已有的不考内容,不要为了「保持一致」继续复制
## 4 忠实与纠错
1. 按资料原有目录结构与编号组织,不重排、不合并、不擅自「优化」编号
2. 资料自身编号冲突 → 原样保留,开头加 `> ⚠️ **编号说明**`
3. 发现笔误或条件自相矛盾 → 不改原意,收进「勘误」节并在正文对应处提示;若该错题本身有教学价值,写明可复用的检验方法
4. 手写批注不作为内容来源,只收录印刷体正文与例题解答
5. **不编造**资料里没有的定理、例题、数据;确需补充课外内容,标注「补充」并说明理由
## 5 输出骨架(整理大纲时)
1. 标题 `# <课程名> · <文档名>`
2. 三行前置说明:**资料来源** / **覆盖范围** / **整理原则**
3. 资料清单表(现场扫描结果)
4. 核心知识脉络速览:放进围栏代码块(语言标记 `text`),两空格缩进,`└` 表示从属
5. 正文层级:`# 第X章` → `## X.Y` → `### X.Y.Z`
6. 附录:**A** 公式速查表 / **B** 概念辨析与记忆表 / **C** 常见题型与解题模板(以上必写);**D** 勘误与提示 / **E** 图表说明(可选)
7. 末尾一行 `> **复习建议**:…`,指出重点与使用路径
## 6 每节微格式
- 标题下紧跟溯源行:`` > 对应 `文件名` 第 a–b 页 ``
- 用 `**一、定义**`、`**二、…**` 中文序号分块,块名点明该块作用
- 独立公式 `$$…$$` 单独成行;行内符号用 Unicode(Ω、σ²、Φ、λ、≤、∪、∩、Ā、⌊⌋)
- 记号全文统一,以 B 层记号表为准
- 例题给**完整解答**,不只给答案;定理证明分写「证明(充分性)」「证明(必要性)」
- 节末固定 `**📌 补充与易错提醒**`,条目式,然后 `---`
## 7 习题解答规范
1. **先给答案,再给步骤**;开头一行写 `**考查点**:…(对应 X.Y)`
2. 按 B 层的编号约定回查原题,确认题干与已知条件,不凭记忆改写
3. 判类型 → 套模板(见附录 C)→ 完整推导 → **回代检验**(单调性 / 归一性 / 端点 / 量纲)
4. 多小问分别作答,标明 (1)(2)
5. 条件不足或自相矛盾要**指出来**,不硬凑答案
6. 不省略中间步骤,不写「显然」「易得」
7. 有典型坑时,末尾补一句「易错点」
## 8 记号与排版
- 人名首次出现:外文原名(中文译名)
- 书名:*斜体原文* + **加粗中译名** + 年份
- 表格内公式含竖线必须转义为 `\|`(如 `P(A\|B)`)
- 概念辨析优先用「**A vs B**:前者…,后者…」句式
## 9 禁止
- 不整本读大部头教材,按需定位页码
- 不把旧产物当内容规范
- 不写考不到的内容
- 不省略解答步骤
- 不用「一般来说」「大致」代替精确公式
- 不新增资料里没有的编号
- **不把 B 层写成平铺的 `.dsh/course-notes-profile.md`**,也不要写没有 frontmatter 的 SKILL.md
- **不凭压缩摘要或记忆复述项目结构**:目录名、文件数一律现场 `ls` 核实后再写进产物
- 不在 B 层子模块里再放 frontmatter 或 `SKILL.md`(插件不递归扫描,等于失联)
## 10 B 层模板(初始化时照此生成)
### 10.1 索引 `SKILL.md`(唯一带 frontmatter 的文件)
```markdown
---
name: course-notes-profile
description: <项目名>课程项目的资料档案(B 层):记录资料源位置、编号定位约定、取舍范围、既有产物与进度文档位置、统一记号与常用提示词。在本项目整理讲义、续写大纲与学习进度、解答作业题时加载。
---
# <项目名> · 课程资料档案(B 层)
> 由 course-helper 生成。A 层方法见用户级 skill `course-helper`;本目录只记项目事实。
> B 层与 A 层冲突时以本文件为准。
> 生成日期:<YYYY-MM-DD> 资料源快照:<目录 → 文件数>
## 模块路由表
| 模块 | 负责什么 | 什么时候读 |
|---|---|---|
| `资料源.md` | 资料源地图、清单刷新命令、读取限制 | 每次开工(确认资料没变) |
| `定位.md` | 编号体系、页码口径、记号表 | 引用原文、写溯源行、统一符号 |
| `取舍.md` | 课程取舍特例、不考范围、勘误规则 | 决定某段进不进正文 |
| `产物.md` | 大纲/进度文档/习题解答的落盘位置与模板、既有产物地位 | 写任何产物之前 |
| `提示词.md` | 本项目常用提示词库 | 调用、登记、复用提示词 |
## 通用约定(模块外的最小公共集)
- 一句话项目定位:<课程名 / 性质 / 当前进度>
- 本课程「不考」的判定权归 `取舍.md`;无 `取舍.md` 时按 A 层通用判据
```
### 10.2 模块文件(无 frontmatter,标题即一级标题)
每个模块只写 A 层没写的**项目事实**,不复制 A 层方法:
- `资料源.md`:资料源地图(路径 / 类型 / 页数与文本层情况)、清单刷新命令、已知读取限制
- `定位.md`:编号约定(如 `1.24` = 讲义 1.24 节习题)、页码口径(PDF 页序 vs 印制页)、记号表
- `取舍.md`:只写与 A 层通用判据不同的例外(「本课程考 R 语言实现」「不考证明题」),以及勘误登记
- `产物.md`:各类产物写在哪、叫什么名、用哪个模板;哪些旧产物只作格式参考
- `提示词.md`:按第 12 节格式维护
## 11 进度与教学交接文档
适用于**跨多次会话持续推进**的项目。它不是复习大纲的替代品,而是「下一个接续者(人或 AI)能不能无损接手」的凭据。
### 11.1 定性与分工
| | 复习大纲 | 进度与交接文档 |
|---|---|---|
| 内容 | 知识本身(定义、定理、题型) | 状态与过程(学到哪、哪不会、怎么纠过错) |
| 读者 | 复习的人 | 下一次接手的人 / AI |
| 变化 | 随资料增补 | 每次教学都必须追加一行 |
- 落盘位置与文件名由 B 层 `产物.md` 钉死(示例:项目内 `课程ppt/学习进度.md`),A 层不规定具体路径。
- **一份项目只留一份**,不按版本分叉;历史靠「更新记录」段承载。
- 项目里**还没有**这份文档 → 不得凭印象直接写,按 11.2 的初始化访谈走完再落盘。
- **发现即报**:只要 B 层声明了该文档的位置而文件不存在,无论当前任务是写大纲、解答题还是维护档案,都要主动报一句并提议初始化。不要把「创建产物」当成用户必须单独下达的指令。
### 11.2 进度文档不存在时:初始化访谈协议
**触发**:按 B 层 `产物.md` 的路径找不到进度文档。**禁止**凭用户一句「我学到第三章了」就直接生成——那样得到的是自我感觉,不是可交接的状态。
走三轮访谈,**每轮 3–5 问,答完再进下一轮**(一次抛十几个问题,用户必然敷衍,数据就废了)。
**第 1 轮 · 客观边界**(只问事实,不问掌握度)
1. 课程名 / 教材 / 班次;老师现在讲到**哪一章哪一节**(用 B 层 `定位.md` 的编号写法,不写「第三章」)
2. 已讲完的章节清单(逐条列出,允许用户说「从 1.0 到 2.6 都讲了」)。
3. 作业 / 实验布置到哪个(编号 + 是否已交)。
4. 下次课大概讲什么(有教学日历直接要)。
→ 产出「**已讲 / 正在讲 / 未讲**」三条线。后续出题**只考已讲范围**。
**第 2 轮 · 掌握度自评**(按第 1 轮的已讲块分块,每块一问)
- 不要问「学会了吗」,要问**可判定的行为**:「这块能不能不看书把公式写出来」「这块的题你大概能不能独立做完」。
- 让用户对每块从五档图例里挑一档;挑不出就记 `⬜ 尚未学习`。
- 明确告诉用户:**这一轮的自评会被第 3 轮校准**,偏差会被写进文档。
**第 3 轮 · 知识检验(实测,3–5 题)**
出题规则:
| 维度 | 要求 |
|---|---|
| 范围 | 只从第 1 轮确认的**已讲范围**里出;考未讲内容只会得到假缺口 |
| 取材 | 只用 B 层资料源里的原题、原定理、原例子,**不编题** |
| 配比 | 基础 2 题(复述定义 / 写出公式)、中等 2 题(小计算、判断对错并说明理由)、区分 1 题(解释为什么 / 指出前提条件) |
| 优先级 | 优先考「自评 🟡 的块」与「老师反复讲的点」,不随机抽 |
判分后:**实测与自评不一致时以实测为准**,并在状态总表备注「自评偏高/偏低」。用户答「不知道」直接记 `❌ 明确缺口`,不追问。
**第 4 步 · 落盘**
- 按 11.3 九段骨架填;查不到的一律写「待确认」或 `⬜ 尚未学习`,**不编造已学内容**。
- 「更新记录」第 1 行写:`初始化(访谈 3 轮 + 检验 N 题)`。
- 薄弱点必须落到具体知识点(「向量形式求导」「Softmax 梯度」),不写「基础较差」。
**第 5 步 · 交付确认**
把「已讲清单 + 状态总表 + 后续路线」三块摘要给用户过目,**确认后才算建立**;之后转入 11.4 的增量更新。
**反模式**:一次抛十问;只问感受不问能力;考到未讲内容;边问边写(应全部收齐再写,否则反复改);把用户随口一句估算写成结论。
### 11.3 九段骨架(顺序即模板,续写时不得重排)
1. **学习目标与教学约定** —— 教学口味(要不要推导、要不要先给结论)、补充内容的标注规则
2. **已有基础与薄弱点** —— 决定后面讲多细
3. **已学内容** —— 按知识块分节,每块给关键公式与结论,不重复大纲的完整推导
4. **当前专题** —— 正在学的那一块要展开到能直接接着讲
5. **当前学习位置** —— 原文定位 → 暴露的问题 → 局限 → 能力分解
6. **学习状态记录** —— 状态总表 + 当前正在学 + 逐轮检验与纠正
7. **后续路线** —— 分阶段,标出依赖关系
8. **教学方式约定** —— 提问方式、判分方式、纠错方式
9. **更新记录** —— 表格:第几次 / 改了什么 / 结果
### 11.4 硬规则
1. 状态图例固定五档,**不改不增**:`✅ 已掌握`、`🟡 基本掌握、需练习`、`🔵 当前正在学`、`⬜ 尚未学习`、`❌ 明确缺口`
2. **每次教学结束必须**:① 追加「更新记录」一行 ② 同步改状态总表 ③ 改「当前正在学」
3. **自己的推导或判分有错 → 必须显式写「勘误」并给出验算**,不得静默修改历史记录
4. 只记录**已确认**的事实;待确认的标「待确认」,不写成结论
5. 检验仪式:每轮抛 2–3 个问题 → 书面判分 → 把纠正写回文档(不是只在对话里说)
### 11.5 迁移到其他项目时的检查项
- [ ] 是否真有「跨会话持续推进」的性质(一次性作业项目不需要这个文档)
- [ ] **新建时走过 11.2 的三轮访谈**,而不是凭「我学到第几章」直接生成
- [ ] 状态总表里「自评」与「实测」的偏差已标出
- [ ] 状态图例与本文件一致
- [ ] 更新记录记到「第几次」,可反推节奏
- [ ] 薄弱点段落到具体知识点,而非「数学不太好」这类空话
## 12 提示词库
用途:把反复使用的提示词固化,避免每次重新组织措辞。
### 12.1 存放
- **项目级**:B 层 `提示词.md`(只在当前项目有效的,如本课程特有的题型模板)
- **通用级**:确属跨项目可复用的,收进 A 层同目录的 `提示词.md`,并在 B 层留一行指针
- 两边都不许散落在正文段落里
### 12.2 单条格式
````markdown
### P-03 <一句话名称>
- **场景**:什么时候用它(触发条件,不是「很好用」这类评价)
- **变量**:`{课程名}`、`{章号}`、`{页范围}`
- **提示词**:
```
原文照抄,一个字都不改
```
- **备注**:效果、禁忌、配套注意事项
````
### 12.3 规则
1. **原文照抄,不改写、不「优化」措辞**——用户写的提示词是资产,改写会改变行为
2. **可变部分一律抽成 `{变量}`**,并在「变量」行列出;不抽变量的提示词等于只能用一次
3. **一条一个用途**。复合提示词拆成多条并用编号引用,不要堆在一条里
4. **编号 `P-NN` 只增不改**,删掉的留 `~~P-07~~ 已废弃:原因`,便于回溯
5. 新提示词入册前先查重;语义重复的合并,并在旧条目标注「已并入 P-11」
6. 用户后续提供的提示词**原样入册**:不替他润色,只在「备注」里写观察到的问题
## 13 B 层拆分规范
### 13.1 插件行为(决定拆分边界)
skill-manager 只扫描 `.dsh/skills/` 的**顶层**:每个含 `SKILL.md` 的子目录 = 一个技能,顶层的散装 `.md` = 一个平铺技能。它**不递归**子目录。
| 做法 | 结果 |
|---|---|
| `course-notes-profile/SKILL.md` + 同目录 `资料源.md` 等 | ✅ 正常,附加文件被忽略、不报错、不误判为新技能 |
| `course-notes-profile/sub/SKILL.md` | ❌ 不被发现(嵌套失联) |
| 给子模块文件也写 frontmatter | ❌ 无意义,子文件不参与解析 |
### 13.2 何时必须拆
满足任一条就拆,否则单文件可接受:
- 索引超过 **15 KB** 或 200 行
- 需要承载**提示词库**(会持续增长)
- 产物规则 ≥ 2 类(大纲 / 进度文档 / 习题解答分别有位置与模板)
- 出现 ≥ 2 套编号或定位体系
### 13.3 拆分原则
1. **索引只做路由**:一句话项目定位 + 模块路由表 + 最小公共约定,不超过 100 行
2. **一个模块一个关注点**,模块名直接用中文短语(`资料源.md`、`取舍.md`),不加编号前缀
3. **模块之间不重复**:同一事实只写一处,别处写 `见 <模块>.md §N`
4. **模块内不写 A 层方法**,只写本项目的具体值
5. 拆分后**回归验证**:面板仍能看到该技能且可启用/停用,索引里每个模块名都真实存在
## 14 交付前自检
- [ ] 已读/已生成 B 层索引,且按需加载了对应模块(没整包读)
- [ ] B 层位于 `.dsh/skills/course-notes-profile/`,索引第 1 行是 `---`,`name`/`description` 齐全
- [ ] 索引路由表列出的模块**都真实存在**,无死链
- [ ] 子模块无 frontmatter、无嵌套 `SKILL.md`
- [ ] 资料清单是**现场扫描**出来的,不是抄来的旧表
- [ ] 每节都有溯源行
- [ ] 编号与资料一致,冲突处有 ⚠️ 说明
- [ ] **没有考不到的内容混进正文**(复核:软件实现、生平、历史叙事)
- [ ] 例题/习题都有完整解答与考查点标注
- [ ] 新增概念已进速查表;发现的笔误已进勘误节
- [ ] 若本次涉及教学推进:进度文档的「更新记录 / 状态总表 / 当前正在学」三处已同步
- [ ] 若本次用到新提示词:已按第 12 节格式入册并查重
## 15 与 skill-manager 插件的兼容要求
插件(`@michengai/dsh-skills-manager`)按 **目录包 + frontmatter** 识别技能,任一不满足就会在面板报错、且**不能启用/停用**。
| 项 | 规则 | 违反时的表现 |
|---|---|---|
| 存放路径 | `<工作区根目录>/.dsh/skills/<skill-name>/SKILL.md` | 面板里看不到该技能 |
| 目录名 | 与 frontmatter `name` **完全一致**,本项目固定 `course-notes-profile` | 名称非法 / 详情对不上 |
| 首行 | 文件第 1 行必须是 `---`,**不能有 BOM**,约第 4 行闭合 `---` | 报「缺少完整 YAML frontmatter」 |
| `name` | 必填,kebab-case:`^[a-z0-9]+(?:-[a-z0-9]+)*$`(全小写、连字符分隔) | 名称缺失 / 名称非法 |
| `description` | 必填且非空,**≤ 500 字符**,写清「什么时候该用」 | 技能不可加载 |
| 可选字段 | `whenToUse`、`metadata`、`disable-model-invocation`、`user-invocable`;本 skill 一律不用 | 配置解析异常 |
| YAML 写法 | `description` 里含 `:`、`#`、引号或全角标点时,整行用双引号包裹(插件自身也用 JSON 字符串写该字段) | 解析出错 / 简介为空 |
| 正文体积 | ≤ 256 KB | 面板拒绝保存 |
| 附加文件 | 同目录下的 `.md` 允许存在,被忽略、不影响解析 | 无影响 |
| 反例 | 平铺文件 `.dsh/course-notes-profile.md`;嵌套在子目录深处的 `**/SKILL.md` | 不被发现 |
**迁移旧 B 层**:若存在旧文件 `<工作区根目录>/.dsh/course-notes-profile.md`,
新建目录 `.dsh/skills/course-notes-profile/`,把内容移动到其中的 `SKILL.md`,
在顶部补上第 10 节所示的 frontmatter,删除旧文件(避免两份档案分叉)。
若内容较多,同时按第 13 节拆成索引 + 模块。
**验证**:`head -c 3 <工作区>/.dsh/skills/course-notes-profile/SKILL.md | xxd` 应输出 `2d2d 2d`;面板中该技能应显示为可加载、可切换。
Files in this skill
- AGENTS.md
- SKILL.md
- 提示词.md
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.