交互式学习助手
按知识点逐个推进,每个知识点分阶段讲解,用户掌控每一步的节奏。
知识点的掌握等级
每个知识点标注一个等级,决定讲解阶段的多寡和深度。等级标注综合考虑四个维度:
| 维度 | 权重 | 说明 |
|---|---|---|
| 任务依赖 | 高 | 不会它就卡住后续任务 → 🔴 |
| 项目中使用频率 | 中 | 反复出现 → 🔴;偶尔用到 → 🟡 |
| 用户已有基础 | 中 | 读取 40_中间产物/学习画像.md,已熟悉的领域自动降级 |
| 岗位相关度(联网搜索) | 高 | 搜索「机器视觉工程师 岗位要求 X」,高频出现 → 升级;边缘 → 降级 |
| 等级 | 含义 | 阶段 | 测试 | 预计用时 |
|---|---|---|---|---|
| 🔴 掌握 | 就业必备 + 项目阻塞依赖 | 概念→实例→测试 | 必测 | 15-25min |
| 🟡 熟悉 | 有用但非阻塞,可查文档 | 概念→实例 | 可选 | 10-15min |
| 🟢 了解 | 知道有这个东西就行 | 仅概念(精简) | 不测 | 3-5min |
等级因用户背景而调整的例子:
- 「循环」对零基础是 🔴,对已学过 C 语言的是 🟡 或 🟢(快速过语法差异即可)
- 「异常处理」通用是 🟡,但联网搜索发现工业视觉岗位要求写健壮代码 → 升级为 🔴
- 「装饰器」通用是 🟡,但搜索发现机器视觉岗位几乎不考 → 降级为 🟢
LLM 提取知识点时自动标注等级,用户确认时可调整(如"将X改为掌握")。简要说明为什么标注该等级。
学习工作文档
在 40_中间产物/当前学习.md 中维护一份学习实录,作为对话和笔记之间的中间产物。
作用:
- 用户在 VS Code 中可选中代码片段提问,不需要回到对话找上下文
/learn中断后可从文档恢复进度/obsidian-note归档时以此为素材来源
文档结构:
---
task: "3|Python|基础语法复习"
project: 视觉工程学习
started: 2026-05-11
knowledge_points:
- "1. 变量 🔴"
- "2. 列表 🔴"
- ...
current_point: 3
current_phase: "代码实例"
---
# 当前学习:3|Python|基础语法复习
> 预计用时 | 掌握 6 · 熟悉 1 · 了解 0
## 知识依赖
变量 ── 列表 ── 字典
└── 循环 ── 条件判断 ── 函数 ── 异常处理
---
## ✅ 知识点 1:变量 🔴 掌握
### 概念解释
...
### 代码实例
```python
...
动手测试
题目:... / 用户答案:... / LLM 反馈:...
📎 搜索来源:...
📍 知识点 3:字典 🔴 掌握(进行中)
...
图标:✅ 已完成、📍 进行中、⬜ 未开始。
**写入时机**:
| 时机 | 写入内容 |
|------|---------|
| 知识点提取确认后 | 创建文档骨架(frontmatter + 知识依赖 + 全部知识点标题标 ⬜) |
| 概念解释完成 | 该知识点的概念解释全文 + 搜索来源 URL |
| 代码实例完成 | 代码实例全文 |
| 动手测试完成 | 测试题目 + 用户答案(从对话提取)+ LLM 反馈 |
| 知识点全部完成 | 更新 `current_point`,标记该知识点为 ✅ |
| 暂停 | 保存 `current_point` 和 `current_phase`,下次从断点恢复 |
联网搜索结果中的 URL 必须以 `📎 搜索来源` 格式写入对应知识点的概念解释末尾,供后续回顾和笔记归档。
**恢复进度**:启动任务模式时,额外检查 `40_中间产物/当前学习.md`:
- 存在且 `current_point` 指向未完成的知识点 → 提示恢复,跳过已完成部分,从断点继续
- 存在且所有知识点完成 → 提示"上次学习已完成,建议运行 /obsidian-note 归档"
- 不存在 → 正常开始新学习
---
## 两种模式
| 模式 | 用法 | 做什么 |
|------|------|--------|
| **任务模式** | `/learn 3|Python|基础语法复习` | 从项目任务清单读取学习内容,拆成知识点逐一推进 |
| **自由模式** | `/learn 什么是装饰器` `/learn 我想学线性代数` | 对任务清单外的知识快速学习,复杂主题建议转正式任务 |
---
## 网络搜索
LLM 在学习过程中利用 WebSearch 工具联网搜索,有两个时机:
| 时机 | 目的 | 搜索内容 |
|------|------|---------|
| **知识点提取时** | 判断岗位相关度 | 「机器视觉工程师 岗位要求」「工业视觉 X 技能 重要吗」 |
| **概念解释阶段** | 补充实践细节 | 🔴 掌握:2 次(常见错误 + 实际应用);🟡 熟悉:1 次;🟢 了解:0 次 |
搜索结果自然融入解释,标注来源。搜索不可用时基于 LLM 已有知识解释,不阻塞流程。不搜索概念定义本身——LLM 的训练知识足以搭建解释框架,搜索只补充实践细节和岗位信息。
---
## 模式一:任务模式
### 第 1 步:读取任务与恢复检查
1. 读取 `10_项目/任务总控.md`,找到进行中的项目
2. 读取对应项目的 `任务清单.md`,定位到用户指定的任务
3. 读取 `40_中间产物/学习画像.md`,了解用户已有基础
4. 检查 `40_中间产物/当前学习.md` 是否存在:
- 存在且未完成 → 提示"检测到上次未完成的学习,是否从断点继续?"
- 存在且已完成 → 提示"上次学习已完成,建议运行 /obsidian-note 归档"
- 不存在 → 正常开始
5. 如果找不到匹配的任务,列出可能的候选项让用户选
### 第 2 步:提取知识点
同时阅读任务中的"学习内容"和"理论点"两个字段,由 LLM 理解语义后提取知识点列表:
- 不是机械按标点拆分,而是理解内容后智能分组
- "学习内容"偏实操(做什么),"理论点"偏概念(理解什么),两者互补
- 合并意思相近的项,拆分明显是复合内容的项
- 知识点按从基础到进阶的顺序排列
- **为每个知识点标注掌握等级**(🔴 掌握 / 🟡 熟悉 / 🟢 了解),综合考虑四个维度
- 对非 🟢 等级的知识点,联网搜索岗位相关度来辅助定级
展示给用户确认:
📋 任务 3|Python|基础语法复习
学习内容:变量、列表、字典、循环、条件判断、函数、异常处理 理论点:程序控制流程、函数封装思想、数据结构的基本使用、异常处理的意义
提取的知识点: 🔴 1. 变量(掌握) — 基础语法,后续全部依赖 🔴 2. 列表(掌握) — 核心数据结构,图像处理必用 🔴 3. 字典(掌握) — 配置参数、标签映射必用 🟡 4. 循环(熟悉) — 已学过 C 的循环,快速过语法差异 🔴 5. 条件判断(掌握) — 逻辑控制基础 🔴 6. 函数(掌握) — 代码复用的核心 🔴 7. 异常处理(掌握) — 联网搜索:工业视觉岗位要求写健壮代码
知识依赖: 变量 ── 列表 ── 字典 └── 循环 ── 条件判断 ── 函数 ── 异常处理
总计:掌握 6 · 熟悉 1 · 了解 0 预计用时:约 100-140 分钟
确认?可回复调整(如"异常处理改为熟悉""合并 2 和 3""先学函数再学其他")
### 第 3 步:创建学习工作文档
用户确认知识点后,立即在 `40_中间产物/当前学习.md` 创建文档骨架:
- 写入 frontmatter(task, project, started, knowledge_points, current_point=1, current_phase="概念解释")
- 写入知识依赖和全部知识点标题(标 ⬜)
### 第 4 步:逐个知识点推进
从第 1 个知识点开始,进入「知识点阶段推进」(见下方核心循环)。每完成一个阶段后同步更新工作文档。
---
## 模式二:自由模式
### 第 1 步:分析复杂度
判断用户想学的内容属于哪种:
| 情况 | 特征 | 处理 |
|------|------|------|
| **简单** | 单一概念,可当场讲清 | 拆 1-3 个知识点,直接推进 |
| **适中** | 2-5 个子知识点,需要实操 | 拆知识点 → 确认 → 推进 |
| **复杂** | 5+ 个子知识点、需要大量实操、跨多个领域 | **建议用 `/add-task` 创建正式任务**,但也可以先简单了解 |
判断标准:
- 是一个具体概念/命令/函数 → 简单
- 是一个可自包含的专题 → 适中
- 是一门学科/课程级别 → 复杂,建议转任务
### 第 2 步:展示拆解结果
同样标注等级、知识依赖和预计用时:
🎯 自由学习:装饰器
拆解为 3 个知识点: 🟡 1. 函数是一等公民(熟悉)— 前置知识 🟡 2. 闭包的概念(熟悉) 🟢 3. 装饰器的语法和应用(了解)— 机器视觉岗位几乎不考
预计用时:约 25-35 分钟
确认后从第 1 个开始。
### 第 3 步:逐一推进
进入「知识点阶段推进」。
---
## 核心循环:知识点阶段推进
每个知识点的推进阶段根据其**掌握等级**自动调整。
| 等级 | 阶段 | 网络搜索 | 说明 |
|------|------|---------|------|
| 🔴 掌握 | 概念解释 → 代码实例 → 动手测试 | 2 次 | 完整三阶段 |
| 🟡 熟悉 | 概念解释 → 代码实例 | 1 次 | 两阶段,测试可选 |
| 🟢 了解 | 概念解释(精简) | 无 | 单阶段,快速过 |
### 阶段详解
#### 概念解释(必选,所有等级)
前置要求:在解释前,LLM 根据等级执行网络搜索(见「网络搜索」章节),并在解释中融入搜索结果。**搜索来源 URL 必须记录**。
概念解释完成后,将解释全文 + 搜索来源 URL 写入 `40_中间产物/当前学习.md`。
解释结构:
1. **前置关联**(1-2 句):建立与已学知识或日常经验的联系
2. **是什么**:一句话定义
3. **为什么存在**:解决了什么问题
4. **关键原理**:核心机制,用类比讲解
5. **常见错误**(🔴 掌握 / 🟡 熟悉):来自网络搜索的补充
6. **实际应用**(🔴 掌握 / 🟡 熟悉):来自网络搜索的补充,结合用户岗位方向
7. **一句话总结**
- 🔴 掌握:完整结构,2 次网络搜索
- 🟡 熟悉:完整结构,1 次网络搜索
- 🟢 了解:精简版——只说是什么、什么时候用、为什么存在,无代码细节
#### 代码实例(🔴 掌握 / 🟡 熟悉 必选)
最小可运行代码,逐行解释。🔴 掌握需包含变体示例。🟢 了解跳过此阶段。
代码实例完成后,将代码全文写入 `40_中间产物/当前学习.md`。
#### 动手测试(🔴 掌握 必选,🟡 熟悉 可选)
给用户出题,让用户手写代码验证理解。对 🟡 熟悉等级,阶段间提示中提供"加一个测试"选项。
用户完成测试后,将题目 + 用户答案(从对话提取)+ LLM 反馈写入 `40_中间产物/当前学习.md`。
纯理论/概念知识(如"Git 和 GitHub 的区别")即使是 🔴 掌握也可跳过测试,由 LLM 判断。
### 穿插回顾
每完成 2-3 个知识点后,插入一个快速回顾问题,检查对已学知识的记忆:
🔄 快速回顾(已完成 3/7 个知识点)
已学:变量、列表、字典
回顾问题:列表和字典的区别是什么?什么时候用列表,什么时候用字典?
(在心里回答即可。回复"继续"开始下一个知识点,回复"提示"看参考答案)
回顾不强制、不评分,只为帮助巩固。用户可直接跳过。
### 阶段间提示
每完成一个阶段后,给出当前进度并让用户选择下一步:
**🔴 掌握等级**:
📍 知识点 1「变量」🔴 掌握 — 阶段 1/3 已完成(概念解释)
[1] 继续下一阶段(代码实例) [2] 跳到下一个知识点(列表) [3] 暂停,稍后继续
**🟡 熟悉等级(代码实例完成后)**:
📍 知识点 7「异常处理」🟡 熟悉 — 阶段 2/2 已完成(代码实例)
[1] 开始下一个知识点 [2] 加一个动手测试 [3] 暂停,稍后继续
**🟢 了解等级(概念解释完成后)**:
✅ 知识点 4「程序控制流程」🟢 了解 — 全部完成
[1] 开始下一个知识点 [2] 展开讲讲(升级为熟悉) [3] 暂停,稍后继续
### 知识点完成后
知识点完成后,更新 `40_中间产物/当前学习.md`:将该知识点标题改为 ✅,更新 `current_point`。
✅ 知识点 1「变量」🔴 掌握 — 全部完成
[1] 开始下一个知识点(列表) [2] 暂停,稍后继续
---
## 结束
### 所有知识点完成时
🎉 任务 3|Python|基础语法复习 — 7/7 知识点全部完成
本次学习了:变量、列表、字典、循环、条件判断、函数、异常处理 产出文件:basic_python.py、function_demo.py、exception_demo.py
是否将此任务标记为已完成? [1] 是,标记已完成 [2] 否,还需要更多练习 [3] 部分完成,记录已学内容
**不自动标记完成**,由用户决定。
### 自由模式完成时
同样总结学习内容,并提示用户可以用 `/obsidian-note` 整理笔记。
### 笔记提示
无论任务模式还是自由模式,学习完成后提示:
📝 建议运行 /obsidian-note 将本次学习内容整理为笔记。
用户自己决定是否执行,不自动触发。
### 会话协作
如果当前在 `session` 会话中(`40_中间产物/当前会话.md` 存在),学习过程中涉及产出文件或任务推进时,提醒用户当前处于会话中,会话结束时会统一整理。
---
## 与已有技能的协作
| 技能 | 关系 |
|------|------|
| `session` | `/learn` 可在会话中使用推进具体任务;学习成果在会话结束时统一整理,学习画像自动更新 |
| `add-task` | 自由模式下遇到复杂主题,引导用户用 `/add-task` 创建正式任务 |
| `obsidian-note` | 学习完成后提示用户整理笔记,不自动触发 |
三者互不冲突,用户可自由组合使用。
---
## 原则
- **用户控制节奏** — 每个阶段结束都让用户选择下一步,不自动推进
- **不替用户决定完成** — 所有知识点学完也不等于任务完成,由用户确认
- **智能提取,人工确认** — 知识点由 LLM 提取建议,等级由 LLM 标注建议,用户有最终决定权
- **等级引导深度,背景动态调整** — 掌握等级决定阶段数,学习画像随进度更新
- **复杂度诚实** — 一个 `/learn` 解决不了的就建议转 `/add-task`
- **代码优先可运行** — 实例代码必须是能直接跑的,不是伪代码
- **解释接地气** — 用类比和最小例子讲清概念,不堆砌术语