| name | deliberate-practice |
|---|---|
| description | Use when the user wants to learn any topic or skill through hands-on practice — programming, math, physics, finance, language, or any academic/professional subject. Triggered by phrases like "我想学", "帮我练", "练习", "复习", "刷题", "学习", "deliberate practice", or explicit /deliberate-practice invocation. Use this skill even when the user just mentions wanting to review or prepare for exams on a specific topic. |
通过刻意练习框架引导 output-style learning:自动拆分子技能、出题、等用户作答、展示参考解答、对比分析、追踪进度。适用于任何学科和技能领域。
用户通过自己动手解题/作答来学习,而不是看讲解。Skill 的职责是构建反馈循环:出题 → 用户作答 → 参考对比 → 修正心理表征。
领域自适应:根据学科特点选择合适的练习形式:
- 编程 → 编码任务,写可运行代码
- 数学/物理 → 推导证明、计算题、建模题
- 概念性学科 → 概念辨析、简答、案例分析
- 语言 → 翻译、写作、语法改错
- 工程/专业 → 设计题、分析题、方案对比
digraph deliberate_practice {
"触发" -> "检查进度文件";
"检查进度文件" -> "有进度" [label="存在"];
"检查进度文件" -> "拆分子技能" [label="不存在"];
"有进度" -> "继续/重来?";
"继续/重来?" -> "取当前子技能" [label="继续"];
"继续/重来?" -> "拆分子技能" [label="重来"];
"拆分子技能" -> "用户确认列表";
"用户确认列表" -> "写入memory";
"写入memory" -> "取当前子技能";
"取当前子技能" -> "概念引导/源码指引";
"概念引导/源码指引" -> "出题(+脚手架)";
"出题(+脚手架)" -> "用户作答(支持增量review)";
"用户作答" -> "展示参考解答";
"展示参考解答" -> "对比分析";
"对比分析" -> "差距大?" [label="评估"];
"差距大?" -> "标记[~]再来一题" [label="是"];
"差距大?" -> "标记[x]下一个" [label="否"];
"标记[~]再来一题" -> "超过3次?" [label="检查"];
"超过3次?" -> "强制标记[~]下一个" [label="是"];
"超过3次?" -> "出题" [label="否"];
"标记[x]下一个" -> "全部完成?";
"强制标记[~]下一个" -> "全部完成?";
"全部完成?" -> "总结回顾" [label="是"];
"全部完成?" -> "取当前子技能" [label="否"];
}检查 memory/practice/<topic>.md 是否存在:
- 有 → 读取文件,展示当前进度,问用户"继续上次 / 重新开始?"
- 无 → 进入 Step 2
同时检查 memory/practice/_index.md,保持主题索引更新。
- 将用户给出的主题拆解为 5-8 个由浅入深的子技能点
- 展示列表,格式如:
主题:随机过程
1. [ ] 概率空间与随机变量基础回顾
2. [ ] 随机过程的定义与分类
3. [ ] Poisson 过程
4. [ ] 马尔可夫链(离散时间)
5. [ ] 连续时间马尔可夫链
6. [ ] 平稳过程与遍历性
7. [ ] 维纳过程与布朗运动
- 用户可调整顺序、删减、补充
- 确认后写入
memory/practice/<topic>.md
状态标记:[ ] 待练 / [~] 薄弱 / [x] 已掌握
对当前子技能点执行:
根据学科领域选择:
非编程类 → 概念引导(必做): 出题之前,始终先带用户过一遍该子技能的核心概念,不要问"需要先过概念吗",直接讲。用户可能学过但长期不用需要唤醒记忆。
- 简洁结构化,抓核心定义、公式、直觉
- 结合用户工作场景给例子
- 讲完后直接出题,不需要用户确认
编程/源码类 → 源码阅读指引: 如果练习需要参考真实代码库,先指出参考入口,而非讲概念。
- 给出具体的文件路径和行号范围(如
src/runtime/proc.go:4144-4200) - 简述该代码段做了什么,但不展开讲实现细节
- 用户先读源码再动手,遇到不理解的自行提问
根据学科领域设计合适的练习任务:
- 编程 → 小型编码任务,明确输入/输出
- 数学 → 计算题、推导题、证明题(给出条件和要求证/求的结论)
- 理论/概念 → "请解释 X"、"X 和 Y 的区别"、"给定场景判断适用什么"
- 应用 → 给定实际场景,要求建模或分析
通用规则:
- 给出明确的题目条件和要求
- 禁止给任何提示或解题方向(保护用户独立思考)
- 如果该技能有
[~]薄弱记录,参考薄弱点针对性出题
编程类附加:脚手架步骤
出题后,主动创建以下文件:
- 测试文件 — 验收标准,覆盖正常路径和关键边界条件。用户跑
go test(或等价命令)即可验证 - 骨架代码 — 包含类型定义、函数签名和
TODO(human)标记,用户只需填充实现 - 确保编译通过 — 骨架 + 测试应能编译(函数体用
panic("not implemented")),用户填完后跑测试验证
出题格式(编程类):
## 子技能 N:标题
**编码任务:** ...
**要求:** 1. ... 2. ...
**参考源码:** `path/to/file.go:100-150`(如适用)
**验收:** `go test` 通过
- 用户自己解题(写代码 / 手写推导 / 文字作答)
- 不主动提供帮助,除非用户明确求助
- 用户完成后说"写好了"、"做完了"或类似表达
- 支持增量 review:用户可以逐个函数提交("看下我的 X"),不必一次性提交全部。逐个 review 时只检查该函数的正确性,不展示参考实现。全部完成后再做完整对比
- 展示一个严谨、清晰的参考解答
- 这不是唯一的"标准答案",而是"一个扎实掌握的人会怎么回答"
- 编程题:代码可运行、有关键注释
- 数学题:完整推导步骤、关键公式标注
- 概念题:结构化的要点阐述
聚焦该子技能点相关的差异,不纠结表述偏好:
- 亮点:用户做得好的地方(强化正确的心理表征)
- 差距:关键差异(概念理解偏差、推导遗漏、方法欠妥等)
- 为什么:参考解答那样处理背后的思维模型
- 差距小 → 标记
[x]已掌握,进入下一个子技能 - 差距明显 → 标记
[~]薄弱,再出一道同类题巩固 - 薄弱项最多连续练 3 次,之后强制标记
[~]继续前进 - 立即更新 memory 文件
全部子技能完成后:
- 展示掌握/薄弱一览
- 薄弱项给出后续自学建议
- 更新
memory/practice/_index.md
# 学习进度索引
| 主题 | 状态 | 掌握 | 薄弱 | 最近会话 |
|------|------|------|------|----------|
| rust-ownership | 进行中 | 2/6 | 1 | 2026-02-24 |# 随机过程
started: 2026-03-13
last_session: 2026-03-13
## 子技能
1. [x] 概率空间与随机变量基础回顾
2. [~] Poisson 过程 — 合并拆分定理推导不熟
3. [ ] 马尔可夫链(离散时间)
## 薄弱点记录
- Poisson 过程:对非齐次 Poisson 过程的强度函数理解有偏差
## 会话日志
- 2026-03-13: 完成 1, 2 薄弱需巩固- 出题不给提示 — 独立思考是刻意练习的前提
- 对比只聚焦当前技能点 — 不展开讨论无关差异
- 薄弱项最多 3 次 — 避免卡死,标记后继续
- 每次决策后立即更新 memory — 进度不丢失
- 领域适配而非硬套 — 不要把所有学科都强行变成"写代码",数学就出数学题,概念就考概念