course-helper
课程学习资料整理与习题解答方法:把讲义、课件、PDF 整理成复习大纲,解答习题,生成公式速查表与易错辨析;并维护跨会话的教学交接文档(学习进度)、管理项目提示词库、按模块拆分项目资料档案(B 层)。
当用户在课程学习类项目中要求整理讲义或课件、编写或续写复习大纲、讲解课程概念、解答作业题(HW/习题)、续写学习进度或教学交接文档、登记常用提示词时使用。不适用于纯代码工程项目。
中文简介正在准备中。当前显示原文说明。
实测评分 未实测
查看安装方法包含的文件(7)
- SKILL.md21.6 KB
- .gitattributes101 B
- .gitignore243 B
- AGENTS.md1.3 KB
- LICENSE1.0 KB
- README.md5.0 KB
- 提示词.md9.2 KB
SKILL.md(原文)
安装前可以查看交给 AI 代理的指令内容。
课程资料整理与习题解答方法(A 层 · 通用)
本 skill 只含可迁移的方法。项目事实(资料在哪、编号怎么定、什么不考、提示词库内容) 一律放在
<当前会话工作区根目录>/.dsh/skills/course-notes-profile/(下称 B 层)。 B 层的「取舍特例」优先级高于本文件的通用判据。 不要再把 B 层写成平铺文件<工作区根目录>/.dsh/course-notes-profile.md: 那个位置 DSH 不扫描,skill-manager 插件还会报「缺少完整 YAML frontmatter」。
0 开工规程(每次任务都要执行)
- 读
<工作区根目录>/.dsh/skills/course-notes-profile/SKILL.md。它是 B 层索引,含模块路由表。 - 按需加载模块:只读与本次任务相关的模块文件,不要一次读完整个 B 层。常见对应:
- 整理大纲 / 讲概念 →
资料源.md+取舍.md+ 定位与记号模块 - 解答习题 / 定位原题 →
定位.md - 续写进度 / 交接 →
产物.md(进度文档位置与模板)+ 第 11 节 - 进度文档不存在(或用户说「不知道学到哪」)→ 按第 11.2 节的三轮访谈重建,不得凭一句话直接生成
- 调用或登记提示词 →
提示词.md+ 第 12 节
- 整理大纲 / 讲概念 →
- 不存在 → 先执行第 1 节「初始化 B 层」,生成后交用户确认,再开始正题。
- 只找得到旧路径
<工作区根目录>/.dsh/course-notes-profile.md→ 先按第 15 节迁移成标准目录包,删掉旧文件,再继续。 - 是单文件 B 层,但已触发第 13 节的拆分阈值 → 按第 13 节拆分,内容不丢。
- 存在,但资料源可能已变 → 只重扫资料源模块里的清单,其余不动。
- B 层与本文件冲突时,以 B 层为准。
- B 层声明的产物缺失时,要主动报:若
产物.md写了某产物的落盘位置而文件不存在(典型是进度文档),任何任务开工时都必须主动告知并提议初始化,不得等用户专门要求。
1 初始化 B 层(新项目首次使用)
B 层落盘位置固定为技能目录包,不是单个散落的 md:
<工作区根目录>/.dsh/skills/course-notes-profile/
├── SKILL.md ← 唯一带 frontmatter 的索引
├── 资料源.md
├── 定位.md
├── 取舍.md
├── 产物.md
└── 提示词.md
勘查,不要凭空写:
- 列出项目根目录结构,识别资料源(讲义 / 课件 / 教材 / 作业 / 数据 / 既有笔记 / 既有进度文档)
- 统计每个资料目录的文件数与类型;会新增文件的目录只记通配符,不记清单
- 打开 1–2 个既有产物,反推用户已认可的规范;没有产物就跳过,不要编
- 抽 1 份 PDF 试提取文字,记录可读性(正常 / 乱码 / 无文本层)
- 抽查特殊文件:CSV 是否带 BOM、PPTX 能否解析、
.venv里是否缺 pymupdf 之类 - 按第 10 节模板写出 B 层,索引开头必须带 frontmatter(
name+description),正文逐条标注证据来源;查不到的一律留空并写「待确认」 - 小项目可先写单文件(第 13 节阈值内),大项目直接按模块拆
- 交用户确认后才算完成
写完后在 skill-manager 面板核对:应出现在「项目技能 → Project DSH」下且可启用/停用。 若提示「缺少完整 YAML frontmatter」,是 frontmatter 没写对,见第 15 节。
2 资料清单:现场扫描,永不写死
- 写死清单 = 新增文件永远不会被看到。凡是「以后还会加文件」的目录,B 层只记通配符 + 刷新规则。
- 每次任务开始时重新扫描并现场生成对照表,旧表作废。
3 内容取舍(本文件最重要的一条)
判据:这段内容会不会出现在任何一道题的题干或解答里?不会,就不进正文。
| 写进正文 | 不进正文(或压成一行) |
|---|---|
| 定义、判定条件、计算公式 | 软件/编程实现(除非 B 层声明本课程考它) |
| 定理及其成立前提 | 人物生平、学派故事 |
| 典型题型与解题模板 | 发展史叙事、与考点无关的工程背景 |
| 易错点、反例、概念辨析 | 示例性代码与输出截图 |
- 资料里写了但明显不考的 → 剔除,最多留一句「另附 ××,略」
- 拿不准 → 保留但压成一行,不展开推导
- 一致性服从取舍:旧产物里已有的不考内容,不要为了「保持一致」继续复制
4 忠实与纠错
- 按资料原有目录结构与编号组织,不重排、不合并、不擅自「优化」编号
- 资料自身编号冲突 → 原样保留,开头加
> ⚠️ **编号说明** - 发现笔误或条件自相矛盾 → 不改原意,收进「勘误」节并在正文对应处提示;若该错题本身有教学价值,写明可复用的检验方法
- 手写批注不作为内容来源,只收录印刷体正文与例题解答
- 不编造资料里没有的定理、例题、数据;确需补充课外内容,标注「补充」并说明理由
5 输出骨架(整理大纲时)
- 标题
# <课程名> · <文档名> - 三行前置说明:资料来源 / 覆盖范围 / 整理原则
- 资料清单表(现场扫描结果)
- 核心知识脉络速览:放进围栏代码块(语言标记
text),两空格缩进,└表示从属 - 正文层级:
# 第X章→## X.Y→### X.Y.Z - 附录:A 公式速查表 / B 概念辨析与记忆表 / C 常见题型与解题模板(以上必写);D 勘误与提示 / E 图表说明(可选)
- 末尾一行
> **复习建议**:…,指出重点与使用路径
6 每节微格式
- 标题下紧跟溯源行:
> 对应 `文件名` 第 a–b 页 - 用
**一、定义**、**二、…**中文序号分块,块名点明该块作用 - 独立公式
$$…$$单独成行;行内符号用 Unicode(Ω、σ²、Φ、λ、≤、∪、∩、Ā、⌊⌋) - 记号全文统一,以 B 层记号表为准
- 例题给完整解答,不只给答案;定理证明分写「证明(充分性)」「证明(必要性)」
- 节末固定
**📌 补充与易错提醒**,条目式,然后---
7 习题解答规范
- 先给答案,再给步骤;开头一行写
**考查点**:…(对应 X.Y) - 按 B 层的编号约定回查原题,确认题干与已知条件,不凭记忆改写
- 判类型 → 套模板(见附录 C)→ 完整推导 → 回代检验(单调性 / 归一性 / 端点 / 量纲)
- 多小问分别作答,标明 (1)(2)
- 条件不足或自相矛盾要指出来,不硬凑答案
- 不省略中间步骤,不写「显然」「易得」
- 有典型坑时,末尾补一句「易错点」
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 的文件)
---
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 轮 · 客观边界(只问事实,不问掌握度)
- 课程名 / 教材 / 班次;老师现在讲到哪一章哪一节(用 B 层
定位.md的编号写法,不写「第三章」) - 已讲完的章节清单(逐条列出,允许用户说「从 1.0 到 2.6 都讲了」)。
- 作业 / 实验布置到哪个(编号 + 是否已交)。
- 下次课大概讲什么(有教学日历直接要)。
→ 产出「已讲 / 正在讲 / 未讲」三条线。后续出题只考已讲范围。
第 2 轮 · 掌握度自评(按第 1 轮的已讲块分块,每块一问)
- 不要问「学会了吗」,要问可判定的行为:「这块能不能不看书把公式写出来」「这块的题你大概能不能独立做完」。
- 让用户对每块从五档图例里挑一档;挑不出就记
⬜ 尚未学习。 - 明确告诉用户:这一轮的自评会被第 3 轮校准,偏差会被写进文档。
第 3 轮 · 知识检验(实测,3–5 题)
出题规则:
| 维度 | 要求 |
|---|---|
| 范围 | 只从第 1 轮确认的已讲范围里出;考未讲内容只会得到假缺口 |
| 取材 | 只用 B 层资料源里的原题、原定理、原例子,不编题 |
| 配比 | 基础 2 题(复述定义 / 写出公式)、中等 2 题(小计算、判断对错并说明理由)、区分 1 题(解释为什么 / 指出前提条件) |
| 优先级 | 优先考「自评 🟡 的块」与「老师反复讲的点」,不随机抽 |
判分后:实测与自评不一致时以实测为准,并在状态总表备注「自评偏高/偏低」。用户答「不知道」直接记 ❌ 明确缺口,不追问。
第 4 步 · 落盘
- 按 11.3 九段骨架填;查不到的一律写「待确认」或
⬜ 尚未学习,不编造已学内容。 - 「更新记录」第 1 行写:
初始化(访谈 3 轮 + 检验 N 题)。 - 薄弱点必须落到具体知识点(「向量形式求导」「Softmax 梯度」),不写「基础较差」。
第 5 步 · 交付确认
把「已讲清单 + 状态总表 + 后续路线」三块摘要给用户过目,确认后才算建立;之后转入 11.4 的增量更新。
反模式:一次抛十问;只问感受不问能力;考到未讲内容;边问边写(应全部收齐再写,否则反复改);把用户随口一句估算写成结论。
11.3 九段骨架(顺序即模板,续写时不得重排)
- 学习目标与教学约定 —— 教学口味(要不要推导、要不要先给结论)、补充内容的标注规则
- 已有基础与薄弱点 —— 决定后面讲多细
- 已学内容 —— 按知识块分节,每块给关键公式与结论,不重复大纲的完整推导
- 当前专题 —— 正在学的那一块要展开到能直接接着讲
- 当前学习位置 —— 原文定位 → 暴露的问题 → 局限 → 能力分解
- 学习状态记录 —— 状态总表 + 当前正在学 + 逐轮检验与纠正
- 后续路线 —— 分阶段,标出依赖关系
- 教学方式约定 —— 提问方式、判分方式、纠错方式
- 更新记录 —— 表格:第几次 / 改了什么 / 结果
11.4 硬规则
- 状态图例固定五档,不改不增:
✅ 已掌握、🟡 基本掌握、需练习、🔵 当前正在学、⬜ 尚未学习、❌ 明确缺口 - 每次教学结束必须:① 追加「更新记录」一行 ② 同步改状态总表 ③ 改「当前正在学」
- 自己的推导或判分有错 → 必须显式写「勘误」并给出验算,不得静默修改历史记录
- 只记录已确认的事实;待确认的标「待确认」,不写成结论
- 检验仪式:每轮抛 2–3 个问题 → 书面判分 → 把纠正写回文档(不是只在对话里说)
11.5 迁移到其他项目时的检查项
- 是否真有「跨会话持续推进」的性质(一次性作业项目不需要这个文档)
- 新建时走过 11.2 的三轮访谈,而不是凭「我学到第几章」直接生成
- 状态总表里「自评」与「实测」的偏差已标出
- 状态图例与本文件一致
- 更新记录记到「第几次」,可反推节奏
- 薄弱点段落到具体知识点,而非「数学不太好」这类空话
12 提示词库
用途:把反复使用的提示词固化,避免每次重新组织措辞。
12.1 存放
- 项目级:B 层
提示词.md(只在当前项目有效的,如本课程特有的题型模板) - 通用级:确属跨项目可复用的,收进 A 层同目录的
提示词.md,并在 B 层留一行指针 - 两边都不许散落在正文段落里
12.2 单条格式
### P-03 <一句话名称>
- **场景**:什么时候用它(触发条件,不是「很好用」这类评价)
- **变量**:`{课程名}`、`{章号}`、`{页范围}`
- **提示词**:
```
原文照抄,一个字都不改
```
- **备注**:效果、禁忌、配套注意事项
12.3 规则
- 原文照抄,不改写、不「优化」措辞——用户写的提示词是资产,改写会改变行为
- 可变部分一律抽成
{变量},并在「变量」行列出;不抽变量的提示词等于只能用一次 - 一条一个用途。复合提示词拆成多条并用编号引用,不要堆在一条里
- 编号
P-NN只增不改,删掉的留~~P-07~~ 已废弃:原因,便于回溯 - 新提示词入册前先查重;语义重复的合并,并在旧条目标注「已并入 P-11」
- 用户后续提供的提示词原样入册:不替他润色,只在「备注」里写观察到的问题
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 拆分原则
- 索引只做路由:一句话项目定位 + 模块路由表 + 最小公共约定,不超过 100 行
- 一个模块一个关注点,模块名直接用中文短语(
资料源.md、取舍.md),不加编号前缀 - 模块之间不重复:同一事实只写一处,别处写
见 <模块>.md §N - 模块内不写 A 层方法,只写本项目的具体值
- 拆分后回归验证:面板仍能看到该技能且可启用/停用,索引里每个模块名都真实存在
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;面板中该技能应显示为可加载、可切换。
评价
还没有评价。欢迎分享你的使用感受。
评论
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。