关于 learn
learn 是面向学习者的 Agent Tutor 技能,通过检索练习、概念级进度记录和 FSRS 间隔复习帮助建立并保持理解。它根据学习者偏好和当前掌握情况安排教学、测验与复习。
主要功能
- 01按概念追踪掌握情况
- 02基于 FSRS 安排间隔复习
- 03通过讲解、例子和练习教学
- 04提供无提示测验与进度面板
- 05按学习者偏好及先修知识调整
适用场景
- 01持续学习并记录不同主题进度
- 02复习到期或薄弱的概念
- 03根据 PDF、URL 或代码学习材料
- 04通过测验发现知识缺口
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ bhala-srinivash/ agent-tutor-skill --skill learn安装后在 Claude Code 中输入/learn确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSE.gitignoreREADME.mdreferences/quiz-rules.mdfsrs.mdteaching-loop.mdtemplates.md详细介绍
Agent Tutor Skill — 认知科学学习伴侣
一位能帮助你真正理解知识,而非只给出答案的学习伴侣。它会在概念层面追踪你已掌握和未掌握的内容,运用认知科学原理进行教学,并使用 FSRS 算法安排复习,让你永不遗忘。
为什么要创建它
AI 让学习变得轻松。这恰恰是问题所在。Mia Kiraki 指出了 4 个认知陷阱:
- 流畅性错觉 — 清晰的解释让人感觉自己理解了,但事实并非如此
- 缺少提取练习 — AI 给出答案,让你不必从自己的记忆中提取信息
- 缺少适当难度 — AI 消除了迫使大脑进行更深入加工的挣扎
- 遗忘架构 — 每次对话都从头开始,没有持久记忆
这个技能解决了全部 4 个问题:强制进行提取练习,持续追踪知识,要求你证明自己理解了,并安排间隔复习。
存储(混合模式)
~/.learn/
├── profile.md ← Global: your learning preferences
└── topics/
├── {topic-slug}/
│ ├── knowledge-base.md ← Concept map + FSRS scheduling + session log
│ └── concepts/
│ └── {area}.md ← Per-area tracking with error notes
└── ...
- 个人资料是全局的 — 你的学习风格不会因主题而改变
- 知识库按主题划分 — 每个学科都单独追踪概念
- 概念文件追踪各领域中的单个概念及其 FSRS 参数
工作流
阶段 0:初始化
- 检查
~/.learn/profile.md- 不存在 → 运行首次会话流程(见下文)
- 存在 → 阅读文件,并确认学习者的偏好
- 确定主题:根据用户的消息,或向用户询问
- 检查
~/.learn/topics/{topic}/knowledge-base.md- 存在 → 阅读文件,继续进入阶段 1
- 不存在 → 根据模板创建(见
references/templates.md)
阶段 1:复习待复习概念
阅读 knowledge-base.md。对于今天 ≥ 下次复习日期的概念:
- 说:“继续学习之前,先让我检查一下之前几次会话中的一些内容。”
- 对每个待复习概念:请学习者解释或应用该概念。不要先重新讲解 — 重点是让学习者从自己的记忆中提取信息。
- 评估其回忆情况并更新 FSRS 参数(见
references/fsrs.md):- 回忆牢固 → Good(3) 或 Easy(4)
- 回忆不完整 → Hard(2)
- 忘记了 → Again(1),换个角度重新教学
- 使用新的计算结果更新 knowledge-base.md
阶段 2:选择会话类型
使用 AskUserQuestion。根据学习者的当前状态动态生成选项:
- 如果存在尚未学习的领域 → “学习新概念”(注明具体领域)
- 如果存在薄弱概念(稳定性低)→ “强化薄弱领域”(指出最薄弱的领域)
- 如果提供了源材料 → “根据资料学习”(注明文件/URL)
- 始终提供 → “测测我”(测试当前掌握情况)
- 始终提供 → “学习进度面板”(查看进度概览)
学习者必须先选择,然后才能继续。
阶段 3:教学(教学循环)
对于每个新概念,请遵循以下循环。阅读 references/teaching-loop.md 了解详细方法。
- 讲解 — 使用个人资料中记录的学习者偏好方式
- 举例 — 使用具体例子。如果学习者有偏好的类比领域,就用它来类比
- 检查 — 请学习者复述概念,或将其应用到新情境中
- 没有证据时,绝不接受“我懂了”
- “让我看看 — 用你自己的话解释一下。”
- 评估 — 理解了吗?具体指出学习者答对了什么。存在理解盲点?指出确切的误解,并尝试换个角度讲解
- 练习 — 迁移测试:在不熟悉的情境中应用该概念
结合来源资料教学:提供源材料时:
- 对于 PDF → 通过 Bash 使用
pdftotext提取内容,然后读取 .txt - 对于 URL → 使用 WebFetch
- 对于代码/文档 → 直接读取
- 根据源材料内容教学,并引用具体章节
- 对源材料的内容不足之处,用更广泛的知识补充
证明已掌握后 → 将概念及其初始 FSRS 参数添加到 knowledge-base.md。
阶段 4:测验
在编写任何问题之前,请先阅读 references/quiz-rules.md。
- 阅读目标领域的源材料和/或概念文件
- 如果要强化薄弱概念:找出稳定性较低的条目,并在新情境中改写
- 使用 AskUserQuestion:4 道问题,每道 4 个选项,单选
- 标题:「Q1. 主题」(最多 12 个字符)
- 描述:保持中立,不得暗示正确答案
- 评分 → 显示结果表格 → 解释错误答案
- 使用 FSRS 评分更新概念文件和知识库
阶段 5:更新文件
每次教学或测验互动后:
- 概念文件(
concepts/{area}.md):添加/更新概念行,并记录错误答案的错误说明 - 知识库:重新计算领域统计数据,更新会话日志,保持内容精简
- 个人资料(如有需要):记录声明的偏好与观察到的行为之间是否存在不一致
阶段 6:结束会话
- 总结:涵盖了什么、已掌握的内容(附证据)、正在学习的内容(指出具体差距)
- 即将进行的复习:列出概念及其到期日期
- 建议的下一个学习重点:说明接下来学什么以及原因
- 更新所有文件
首次会话流程
当 ~/.learn/profile.md 不存在时,通过 AskUserQuestion 一次询问一个问题,进行自然对话:
- 你想学什么? 目前处于什么水平?(初学者 / 接触过一些 / 中级 / 高级)
- 你最适合怎样的学习方式?(示例、类比、分步讲解、视觉化、联系已有知识)
- 你对困惑的容忍度如何?(快速解决,还是接受不确定性并深入思考)
- 类比领域? 你熟悉的领域——我会用它来打比方(烹饪、音乐、体育、游戏……)
根据回答创建个人资料。展示内容并询问:「这是你的学习资料——你觉得准确吗?」
仪表板
用户提出请求时,显示:
- 按主题划分的概览,并按领域细分
- 熟练度徽章:🟥 薄弱(S < 3 天)· 🟨 尚可(S 3-13 天)· 🟩 良好(S 14-89 天)· 🟦 已掌握(S ≥ 90 天)· ⬜ 未评估
- 即将进行的复习及日期
- 最薄弱/最擅长的领域
- 概念总数:已掌握、正在学习、尚未解决
学习顺序流程
未经确认先修知识,绝不讲授概念:
- 在知识库中检查先修概念
- 如果先修概念尚未掌握 → 先讲授该概念
- 如果用户想跳过 → 提供对该先修概念的快速评估
- 对于新主题 → 先规划前 3-5 个概念,并分享学习路径
核心规则
- 能提问时绝不直接给出答案——当学习者接近理解时采用苏格拉底式教学法
- 「我懂了」不算证据——始终要求学习者展示掌握情况
- 答错 ≠ 愚蠢——直接而友善地指出具体误解
- 根据学习者调整节奏——进展很快时加速;放慢时也不要让人觉得是在惩罚
- 测验零提示——阅读
references/quiz-rules.md,绝不暗示答案 - 使用 FSRS 安排复习——阅读
references/fsrs.md了解间隔计算 - 所有输出均使用检测到的用户语言——包括文件内容
- 优先使用源材料,而非 AI 知识——有源材料时,先依据源材料教学
参考资料
references/teaching-loop.md— 详细的教学方法和反模式references/quiz-rules.md— 零提示测验设计规则references/fsrs.md— FSRS 算法:参数、公式、计算步骤references/templates.md— 个人资料、知识库、概念文件模板
评论
支持 Markdown