再学 AI
第 37 课 / scaffold-exercises
专项工具阅读 → 对照 → 问答 → 场景

为课程建立问题、答案与讲解目录

这是 Matt 自己课程工具链的练习骨架生成器,不能直接当作任何项目通用的课程平台。

还不清楚 Skill、Agent、安装和调用?先读 从零开始的6节入门课

在关系图中查看 scaffold-exercises 与其他技能的关联 →

先把必要的概念讲清楚

这课围绕作者自己的课程目录约定。它展示怎样把大量重复的结构工作交给 Agent,同时用检查器确认目录没有遗漏;结构正确仍不等于课程教得好。

下面是老师补充的入门说明;原作者的要求保留在中英对照正文中。所有例子均为帮助理解而构造的教学情境。

CLI|命令行界面

通过输入文字命令操作程序,例如运行测试或检查 Git 状态。它与点按钮一样是操作入口,只是参数更容易记录、重复执行。读命令时先分清程序名、子命令、选项和目标路径;看懂命令不等于已执行它。

fixture / harness|测试样本与运行装置

fixture 是为复现或测试准备的已知输入和初始数据,例如固定课程清单。harness 是把代码、输入和检查串起来的运行装置,例如一次命令启动最小服务并断言结果。它们帮助每次在相同条件下比较,而不是凭上次页面看起来怎样判断。

Git、commit、branch|版本与分支

Git 记录项目随时间的变化;commit 是一次有标识的修改记录;branch 是一条可继续发展的工作线。你可在功能分支试做收藏能力,验证后再合入主分支。保存了文件不等于已提交,提交了也不等于已推到服务器或已上线。

读原文,理解每一步为什么这样做

左右内容按小节对应;窄屏先中文、后英文。两种语言均完整展示,对应讲解紧接在小节之后。译文传达原文要求;老师讲解补充概念、原因、例子与适用边界。

中文译文English · 英文原文
中文译文
name: scaffold-exercises
description: "创建包含章节、题目、答案和讲解且通过 lint 的练习目录结构。用户想搭建练习、创建占位练习或新课程章节时使用。"
English · 英文原文
name: scaffold-exercises
description: Create exercise directory structures with sections, problems, solutions, and explainers that pass linting. Use when user wants to scaffold exercises, create exercise stubs, or set up a new course section.
中文译文

为练习建立目录和起始文件

创建课程练习的目录结构,使其通过 pnpm ai-hero-cli internal lint,然后使用 Git 提交。

English · 英文原文

Scaffold Exercises

Create exercise directory structures that pass pnpm ai-hero-cli internal lint, then commit with git commit.

中文译文

目录命名

章节放在 exercises 下,以 XX-section-name/ 命名,例如 01-retrieval-skill-building

每节中的练习采用 XX.YY-exercise-name/,例如 01.03-retrieval-with-bm25。XX 是章节编号,XX.YY 是练习编号。名称使用小写单词和连字符。

English · 英文原文

Directory naming

  • Sections: XX-section-name/ inside exercises/ (e.g., 01-retrieval-skill-building)
  • Exercises: XX.YY-exercise-name/ inside a section (e.g., 01.03-retrieval-with-bm25)
  • Section number = XX, exercise number = XX.YY
  • Names are dash-case (lowercase, hyphens)
老师讲解 · 对应上方原文 · 含教学举例

编号表示顺序,目录表示不同用途

章节编号与练习编号让内容可排序。problem 是学生要完成的工作区,solution 是参考答案,explainer 是概念讲解;三者的读者和作用不同。

例如“理解测试入口”可以先只有 explainer;真正练习补一条测试时,再有 problem 和 solution。原文默认占位用 explainer,不是要求每课都填满所有变体。

目录名使用小写连字符是项目约定,有助于统一命令和链接。它不是软件工程的普遍唯一命名方式。

中文译文

练习的不同版本

每项练习至少有以下一种子目录:problem 是学生写代码的地方,包含 TODO;solution 保存参考实现;explainer 是概念说明,不包含待完成任务。

只搭起始结构时,计划没有另行规定就默认创建 explainer。

English · 英文原文

Exercise variants

Each exercise needs at least one of these subfolders:

  • problem/ - student workspace with TODOs
  • solution/ - reference implementation
  • explainer/ - conceptual material, no TODOs

When stubbing, default to explainer/ unless the plan specifies otherwise.

老师讲解 · 对应上方原文 · 含教学举例

搭好目录,不等于课程已经写完

假设一课讲收藏去重。explainer 解释为什么重复请求会造成重复记录;problem 给出待修代码和 TODO;solution 展示一种参考实现。它们是同一练习的不同用途。

scaffold 主要是把这些位置和起始说明建好。文件通过检查,证明结构符合作者工具的规则,不证明讲解质量或练习设计已经合格。

原文一处说至少包含任一版本,但实际检查又要求 problem 或 explainer 一类,因此只有 solution 未必通过,应以真实校验规则核对。

pnpm ai-hero-cli internal lint 属于作者课程项目的工具,普通仓库不一定有它。技能文本写出命令,不会自动安装该项目环境。git mv 也主要是方便记录移动;Git 是否识别重命名并非只由这一命令决定。

中文译文

必需文件

每个版本目录都需要 readme.md,必须非空且链接有效。初始文件可以只有真实标题和简短说明:

# 练习标题

这里说明练习内容。

有代码时,还需超过一行的 main.ts。仅有 readme 的讲解起始文件也可以。

English · 英文原文

Required files

Each subfolder (problem/, solution/, explainer/) needs a readme.md that:

  • Is not empty (must have real content, even a single title line works)
  • Has no broken links

When stubbing, create a minimal readme with a title and a description:

# Exercise Title

Description here

If the subfolder has code, it also needs a main.ts (>1 line). But for stubs, a readme-only exercise is fine.

老师讲解 · 对应上方原文 · 含教学举例

最低结构检查只保证材料存在

readme 不能为空、链接不能失效、有代码时需要 main.ts,都是可自动检查的形式规则。一行标题能通过最低检查,却远不足以成为你要求的教学内容。

这正好区分“骨架完成”和“教材完成”。骨架阶段允许最小占位,正式课程阶段还需要解释、案例、练习和反馈。

作者专用 ai-hero-cli 命令不一定在你的项目可用。阅读本课要理解约定如何被执行,而不是把原命令视为任何课程仓库都自带。

中文译文

工作流程

读计划,提取章节名、练习名和版本类型;用 mkdir -p 创建目录;每个版本添加带标题的 readme;运行 pnpm ai-hero-cli internal lint;发现错误后修复,直到通过。

English · 英文原文

Workflow

  1. Parse the plan - extract section names, exercise names, and variant types
  2. Create directories - mkdir -p for each path
  3. Create stub readmes - one readme.md per variant folder with a title
  4. Run lint - pnpm ai-hero-cli internal lint to validate
  5. Fix any errors - iterate until lint passes
中文译文

检查规则摘要

工具会检查练习的 problem、solution、explainer 等子目录;至少有 problem、explainer 或 explainer.1 之一;主要目录的 readme 存在且非空。

还禁止 .gitkeep、speaker-notes.md,以及 readme 中的 pnpm run exercise 命令;检查链接是否有效;有代码的版本需要 main.ts,仅文档版本例外。

English · 英文原文

Lint rules summary

The linter (pnpm ai-hero-cli internal lint) checks:

  • Each exercise has subfolders (problem/, solution/, explainer/)
  • At least one of problem/, explainer/, or explainer.1/ exists
  • readme.md exists and is non-empty in the primary subfolder
  • No .gitkeep files
  • No speaker-notes.md files
  • No broken links in readmes
  • No pnpm run exercise commands in readmes
  • main.ts required per subfolder unless it's readme-only
中文译文

移动或重新编号

使用 git mv 记录目录移动,更新编号保持顺序,再运行检查。

git mv exercises/01-retrieval/01.03-embeddings exercises/01-retrieval/01.04-embeddings
English · 英文原文

Moving/renaming exercises

When renumbering or moving exercises:

  1. Use git mv (not mv) to rename directories - preserves git history
  2. Update the numeric prefix to maintain order
  3. Re-run lint after moves

Example:

git mv exercises/01-retrieval/01.03-embeddings exercises/01-retrieval/01.04-embeddings
老师讲解 · 对应上方原文 · 含教学举例

移动练习还要维护顺序和引用

git mv 同时移动文件并让 Git 跟踪变化,适合在已有版本记录的仓库中重排。它并不是唯一定能保存历史的方式,Git 也会识别一些普通移动,但遵循作者约定更一致。

编号变化后,其他文档的链接可能需要更新;重新运行 lint 能发现部分失效引用。目录移动成功不代表课程所有导航都正确。

示例中的 mkdir -p 建立所需目录,随后写 readme 再检查。不要把“创建了 50 个目录”当作“完成 50 节课”的成果。

中文译文

根据计划创建结构的例子

假设第 05 节是记忆能力训练,有 05.01 记忆介绍、05.02 短期记忆、05.03 长期记忆。其中短期记忆需要讲解、问题和答案三种版本,其余默认讲解。

原计划示例:

Section 05: Memory Skill Building
- 05.01 Introduction to Memory
- 05.02 Short-term Memory (explainer + problem + solution)
- 05.03 Long-term Memory

创建目录:

mkdir -p exercises/05-memory-skill-building/05.01-introduction-to-memory/explainer
mkdir -p exercises/05-memory-skill-building/05.02-short-term-memory/{explainer,problem,solution}
mkdir -p exercises/05-memory-skill-building/05.03-long-term-memory/explainer

随后在各 explainer、problem、solution 中分别创建 readme。原例列出的文件及标题如下:

exercises/05-memory-skill-building/05.01-introduction-to-memory/explainer/readme.md -> "# Introduction to Memory"
exercises/05-memory-skill-building/05.02-short-term-memory/explainer/readme.md -> "# Short-term Memory"
exercises/05-memory-skill-building/05.02-short-term-memory/problem/readme.md -> "# Short-term Memory"
exercises/05-memory-skill-building/05.02-short-term-memory/solution/readme.md -> "# Short-term Memory"
exercises/05-memory-skill-building/05.03-long-term-memory/explainer/readme.md -> "# Long-term Memory"
English · 英文原文

Example: stubbing from a plan

Given a plan like:

Section 05: Memory Skill Building
- 05.01 Introduction to Memory
- 05.02 Short-term Memory (explainer + problem + solution)
- 05.03 Long-term Memory

Create:

mkdir -p exercises/05-memory-skill-building/05.01-introduction-to-memory/explainer
mkdir -p exercises/05-memory-skill-building/05.02-short-term-memory/{explainer,problem,solution}
mkdir -p exercises/05-memory-skill-building/05.03-long-term-memory/explainer

Then create readme stubs:

exercises/05-memory-skill-building/05.01-introduction-to-memory/explainer/readme.md -> "# Introduction to Memory"
exercises/05-memory-skill-building/05.02-short-term-memory/explainer/readme.md -> "# Short-term Memory"
exercises/05-memory-skill-building/05.02-short-term-memory/problem/readme.md -> "# Short-term Memory"
exercises/05-memory-skill-building/05.02-short-term-memory/solution/readme.md -> "# Short-term Memory"
exercises/05-memory-skill-building/05.03-long-term-memory/explainer/readme.md -> "# Long-term Memory"

原作者:Matt Pocock · 中文翻译为非官方译本

来源:skills/misc/scaffold-exercises/SKILL.md ↗

固定版本:3cca18b368ae95cdbdebbff572ccafa662551015

先作答,再看参考思路

Q1 · 理解

用自己的话说明:它解决什么问题,完成后会留下什么?

请各用一句话回答。若它只做规划或解释,不要把“已开发”“已部署”写成产物。

Q2 · 判断

为什么这种目录脚手架不能替老师编写讲义?

我已思考,查看参考思路

它检查材料组织形式,不判断解释是否准确、例子是否适合读者。内容工作仍由教师完成。

Q3 · 追问

原文中哪条要求在你的环境下可能不成立?

说出具体一句及其前提,例如工具不可用、资料缺失、已有项目约定冲突,或它只是作者偏好。把你的答案带回课堂,我们据此继续讨论。

课堂回传格式:第 37 课 / 我的理解 / Q2 回答 / 仍不理解的原句。这里是阅读教材;实时问答在我们的对话中进行。

把方法放进一个具体情境

教学案例:tdd 一课的 problem 给一段有缺陷的测试,solution 解释为何预期值不独立,explainer 讲行为测试。只建空目录无法完成教学。

边界与容易误读的地方

通过课程目录检查不等于教材质量好。若环境没有作者内部工具,应保留教学结构思想并另做适当验证,不声称命令已运行。

讨论后再实践:先判断上述情境是否适用,再选择真实任务。现在无需安装、运行命令或修改现有项目。

关联阅读