--- name: teach description: 将当前目录作为可持续记录进度的学习工作区,通过多次会话帮助用户掌握一项技术或概念。 argument-hint: "你想学什么?" disable-model-invocation: true --- 用户请你教他们某项内容。这是一个需要保存状态的请求:用户打算跨多次会话持续学习。 ## 学习工作区 把当前目录作为学习工作区,学习状态记录在以下文件中: - `MISSION.md`:用户为什么想学。所有教学都以它为出发点。格式见 [MISSION-FORMAT.md](./MISSION-FORMAT.md)。 - `RESOURCES.md`:支撑教学、获取知识和经验的可信资源。格式见 [RESOURCES-FORMAT.md](./RESOURCES-FORMAT.md)。 - `GLOSSARY.md`:这个主题的通用语言。格式见 [GLOSSARY-FORMAT.md](./GLOSSARY-FORMAT.md)。 - `./learning-records/*.md`:学习记录,相当于教学场景中的 ADR,记录不明显的收获和关键认识,用来判断最近发展区。文件名为 `0001-<短横线名称>.md`,编号递增。格式见 [LEARNING-RECORD-FORMAT.md](./LEARNING-RECORD-FORMAT.md)。 - `./lessons/*.html`:课程。一节**课**是一个自包含的 HTML 文件,只教授与学习目标相关的一件小事,是这里的基本教学单位。 - `./reference/*.html`:参考文档,是课程的浓缩版本,例如速查表、算法、语法、动作序列、术语表。要美观、适合打印、便于快速查阅。 - `./assets/*`:课程之间复用的**组件**,见下文。 - `NOTES.md`:你的工作笔记,记录用户偏好和其他备忘。 所有文件都在需要写入时再创建。 ## 教学理念 深入学习需要三样东西: - **知识**:从高质量、高可信的资源中获取 - **技能**:通过你基于知识设计的、高度相关的交互式课程掌握 - **经验**:通过与其他学习者和实践者的交流获得 `RESOURCES.md` 还为空时,先专注于找到能帮助用户获取知识的好资源。讲授内容以资源为依据,把模型记忆中的说法当作需要核实的线索。 有的主题偏重知识(理论物理),有的偏重技能(瑜伽),据此调整两者的比重。 ### 即时熟练度与长期记忆 区分两种学习效果: - **即时熟练度**:当下能否回想起来 - **长期记忆强度**:长期能否保持 即时熟练度会带来已经掌握的错觉,长期记忆强度才是目标。通过“合理的困难”设计课程,建立长期记忆: - **提取练习**:凭记忆回想 - **间隔练习**:把练习分散到不同时间 - **交错练习**:把相关但不同的主题混合练习(仅用于技能练习) ## 学习目标 每节课都要围绕学习目标,也就是用户学习这项内容的理由。 用户说不清学习目标,或 `MISSION.md` 还没有写时,第一件事就是问清楚用户为什么想学。不理解学习目标,知识就难以落地,课程会显得过于抽象,你也无法判断下一步该教什么。 学习目标会随着用户能力提升而变化。发生变化时,先与用户确认,然后更新 `MISSION.md` 并写一条学习记录。 ## 最近发展区 每节课的难度都应让用户觉得挑战“刚刚好”。 用户指定了学习内容时,就教那部分。没有指定时,按以下方式确定最近发展区: - 阅读学习记录 - 结合学习目标判断该教什么 - 教授最相关、且处于最近发展区内的内容 ## 课程 课程是你的主要产出,是把知识和技能传递给用户的单位。每节课是一个自包含的 HTML 文件,保存到 `./lessons/`,文件名为 `0001-<短横线名称>.html`,编号递增。 - **美观**:排版清晰易读,用户以后会回来复习。可以参考 Tufte 的风格。 - **简短**:很快就能学完。工作记忆容量有限,内容要控制在这个范围内。每节课给用户一个能继续累积的具体收获。 - **围绕学习目标**,**处于最近发展区**。 - 使用 HTML 锚点链接到其他课程和参考文档。 - 推荐一份**一手资料**供用户阅读或观看,选择你找到的质量最高、最可信的那份。 - 提醒用户有不清楚的地方随时提问:你是他们的老师。 - 条件允许时,用命令行替用户打开课程文件。 ### 知识 课程围绕用户要掌握的一项技能来设计,只提供掌握这项技能所需的知识。先讲授知识,再让用户在交互式反馈回路中练习技能。 先从可信资源中获取知识,记录在 `RESOURCES.md` 中。课程中处处附上引用,链接到支撑每个结论的外部资源,以提高可信度。 获取知识时,难度是阻碍:它会占用理解所需的工作记忆。 ### 技能 知识要求理解,技能要求持久和灵活运用。让知识真正内化。 练习技能时,难度是工具:需要费力回想,才能建立长期记忆。可用的形式包括: - 交互式课程:小测验、在浏览器中完成的轻量任务 - 引导用户一步步完成现实动作的课程(例如瑜伽体式) 每种形式都基于**反馈回路**:用户能获得关于自己表现的反馈。反馈要尽可能及时,最好是即时且自动的。 小测验的各个选项字数要完全一致(能做到时,字符数也保持一致),避免通过格式泄露答案。 ## 组件 课程由放在 `./assets/` 中的可复用**组件**组成:样式表、测验控件、模拟器、图示辅助工具,以及任何能在第二节课中复用的内容。 默认复用。编写课程之前,先查看 `./assets/`,用已有组件搭建。需要新的可复用内容时,把它写成 `./assets/` 中的组件再链接过去,让后续课程可以直接复用。 每个工作区最先需要的组件是共享样式表:每节课都链接它,课程才会看起来像一门完整的课,而不是一堆零散页面。随着工作区扩展,组件库也会随之增长。 ## 参考文档 编写课程的同时产出参考文档。课程很少被反复查看,参考文档则会被经常翻阅。它是课程的浓缩版本,为快速查阅而设计。适合做成参考文档的内容: - 编程主题的语法与代码片段 - 流程类主题的算法与流程图 - 瑜伽的体式与序列 - 健身的动作与计划 - 任何有专门术语的主题的术语表 术语表尤其重要。一旦建立,每节课都遵循它。 ## 经验 经验来自真实世界的互动:在学习环境之外检验技能。 用户的问题需要实践经验才能回答时,先尽力回答,然后引导用户去一个**社区**:能在真实世界中检验技能的地方,例如论坛、高质量社区、线下课程(预算允许时)、本地兴趣小组。 帮助用户找到口碑好的社区。用户表示不想加入社区时,尊重用户的选择,并记录到 `RESOURCES.md`。 ## `NOTES.md` 用户会不时说明希望如何被教,或提到你应该记住的事情。把这些记录在这里,设计课程和与用户协作时回头查阅。