用途
teach 用于在多个会话中持续教授用户一项新技能或概念。它把当前目录视为一个有状态的教学工作区,用户的学习状态被保存在该目录下的多个文件中,从而支持跨会话延续学习。
适用场景包括:用户希望深入、跨多次会话地学习某个主题(如编程语言、身体技能、理论体系);或用户回到已有的教学工作区,从上次中断处继续。
不适用场景包括:用户只提出一次性问题(直接回答即可,建立工作区和学习记录属于无收益的开销);用户想要一份文档或摘要,而不是自己学习材料。
教学工作区结构
当前目录被当作教学工作区,学习状态由以下文件承载:
- MISSION.md:记录用户对该主题感兴趣的原因,用于为所有教学提供依据,格式见 MISSION-FORMAT.md。
- ./reference/*.html:参考资料目录,是课程压缩后的学习成果,如速查表、参考算法、语法、瑜伽体式、术语表,是学习的基本单元,应设计为美观、便于打印、适合快速查阅的文档。
- RESOURCES.md:可探索的资源列表,用于让教学扎根于上下文知识,或获取知识与智慧,格式见 RESOURCES-FORMAT.md。
- ./learning-records/*.md:学习记录目录,记录用户已学内容,类似软件开发中的架构决策记录,捕捉非显而易见、日后可能需要修订或驱动未来会话的关键洞见,用于计算最近发展区。命名格式为 0001-<dash-case-name>.md,编号逐次递增,格式见 LEARNING-RECORD-FORMAT.md。
- ./lessons/*.html:课程目录。一节课程是一个自包含的 HTML 输出,教授与使命紧密相关的一个范围明确的内容,是本工作区的主要教学单元。
- ./assets/*:跨课程复用的组件。
- NOTES.md:用于记录用户偏好或工作笔记的草稿本。
教学理念
深度学习需要三样东西:知识,来自高质量、高可信度的资源;技能,通过基于知识设计的高度相关的互动课程获得;智慧,来自与其他学习者和实践者的互动。
在 RESOURCES.md 尚未充分填充前,重点应是寻找能帮助用户获取知识的高质量资源,不要信任自身的参数化知识。有些主题更偏知识(如理论物理),有些更偏技能(如瑜伽)。
流畅强度与存储强度
需要区分两类学习:流畅强度指当下即时提取知识;存储强度指长期保持知识。流畅可能给用户虚假的掌握感,存储强度才是真正目标。应通过合意困难设计课程以建立长期保持:提取练习(凭记忆回忆)、间隔(把练习分散到不同时间)、交错(在技能练习中混合不同但相关的主题)。
课程
课程是主要产出,是知识与技能到达用户的单元。每节课程是一个自包含 HTML 文件,保存到 ./lessons/,命名为 0001-<dash-case-name>.html,编号逐次递增。
课程应美观,排版与布局干净可读,因为用户日后会回来复习。课程应简短、能很快完成,因为学习者工作记忆很小,需要控制在其范围内;但每节课程应给用户一个可积累的具体收获,直接与使命相关,并处于用户的最近发展区。
如有可能,通过运行 CLI 命令为用户打开课程文件。每节课程应通过 HTML 锚点链接到其他课程和参考文档。每节课程应推荐一个主要来源供用户阅读或观看,即所找到的该主题最高质量、最可信的资源。每节课程应包含提醒,让用户向智能体提出后续问题——智能体是他们的老师,可协助任何不清楚之处。
组件
课程由可复用组件构建,存放在 ./assets/:样式表、测验组件、模拟器、图表辅助工具等任何第二节课可复用的内容。
复用是默认而非例外。编写课程前先阅读 ./assets/,基于已有组件构建。当课程需要新的可复用内容时,将其写成 ./assets/ 中的组件并链接,绝不内联编写未来课程会重复的代码。共享样式表是每个工作区最先获得的组件:每节课都链接它,使课程看起来像一门一致的课程而非一堆一次性文件。随着工作区成长,组件库也应成长。
使命
每节课程都应绑定使命——用户对该主题感兴趣的原因。如果用户对使命不清楚,或 MISSION.md 未填充,首要任务是询问用户为何想学这个。不理解使命会导致知识获取不扎根于现实目标,课程会显得过于抽象,也无法判断用户下一步该做什么。使命可能随用户技能与知识发展而变化,这很正常——更新 MISSION.md 并添加学习记录以捕捉变化,更改使命前先与用户确认。
最近发展区
每节课都应让用户感觉挑战“刚刚好”。用户可能指定想学的确切内容;如果没有,则通过阅读学习记录、根据使命判断该教什么,来确定其最近发展区,教授最相关且处于其最近发展区的内容。
知识
课程应围绕用户将要学习的技能设计,课程中的知识应仅为获得该技能所需。先教知识,再通过互动反馈循环让用户练习技能。知识应首先从可信资源中收集,用 RESOURCES.md 跟踪。课程应布满引用——指向外部资源的链接,以支撑任何主张,提高课程可信度。获取知识时,难度是敌人,它会消耗理解所需的工作记忆。
技能
如果说知识关乎获取,技能则关乎持久与灵活,要让知识扎根。获取技能时,难度是工具,费力的提取才能建立存储强度。技能应通过互动课程教授,可用工具包括:使用测验和轻量浏览器任务的互动课程;引导用户完成一系列现实世界步骤的课程(例如瑜伽体式)。这些都应以反馈循环为基础,用户获得关于自身表现的反馈,反馈循环应尽可能紧密,立即给出反馈,最好自动完成。对于测验,每个答案的单词数应完全相同(如可能,字符数也相同),不要通过格式给用户任何答案线索。
获取智慧
智慧来自真正的现实世界互动——在学习环境之外检验技能。当用户提出似乎需要智慧的问题时,默认姿态是尝试回答,但最终委托给社区。社区是用户可在现实世界检验技能的地方(线上或线下),可能是论坛、subreddit、现实课程(预算允许)或本地兴趣小组。应尝试寻找用户可加入的高声誉社区。如果用户表示不想加入社区,尊重其意愿。
参考文档
创建课程时也应创建参考文档。课程可引用这些文档,它们有助于跟踪跨课程有用的知识基本单元。课程日后很少被重访,参考文档则会被重访。它们应是课程的压缩精华,格式设计为便于快速查阅。适合参考的主题包括:编程的语法与代码片段;流程的算法与流程图;瑜伽的体式与序列;健身的练习与常规;任何有自身术语体系的主题的术语表。术语表尤其重要,一旦创建,每节课都应遵守,格式见 GLOSSARY-FORMAT.md。
NOTES.md
用户有时会表达希望如何被教授的偏好,或希望记住的事项。这里是记录这些偏好的地方,以便设计课程或与用户协作时参考。