MiniMind Learning Assistant
自动化学习笔记系统,静默记录你的 MiniMind 学习历程。
When to use
自动激活场景:
学习开始时:
- 用户说:"开始今天的学习"、"开始学习"、"今天学什么"
- 用户说:"继续学习"、"学习 MiniMind"
讨论 MiniMind 内容时:
- 提问包含:RMSNorm, LayerNorm, RoPE, YaRN, Attention, GQA, SwiGLU, Transformer, LoRA, DPO, PPO, GRPO, SFT, RLHF, RLAIF, MoE
- 问题词:什么是、如何、为什么、怎样、解释、原理
- 遇到问题:报错、错误、失败、Bug
显式记录请求:
- 用户说:"记录一下"、"保存笔记"、"写入笔记"
How to use
1. 初始化检查
首次激活时,确保笔记结构存在:
bash
# 检测 Git 仓库根目录
git rev-parse --show-toplevel
# 验证是 MiniMind 仓库(存在以下文件)
# - model/model_minimind.py
# - trainer/train_pretrain.py
# - README.md (包含 "MiniMind")
# 创建笔记目录(如不存在)
mkdir -p docs/learning_materials
# 从模板初始化文件(如不存在)
# - docs/notes.md
# - docs/learning_log.md
# - docs/knowledge_base.md
# - docs/learning_materials/README.md模板位置:~/.claude/skills/minimind-learning/templates/
2. 学习引导模式
当用户说"开始学习"时,主动引导:
markdown
👋 欢迎开始今天的 MiniMind 学习!
你想学习哪个模块?
**基础组件**:
1. 归一化技术 - RMSNorm, LayerNorm
2. 位置编码 - RoPE, YaRN
3. 注意力机制 - Attention, GQA
4. 前馈网络 - FeedForward, SwiGLU
**训练技术**:
5. 预训练 - Pretraining
6. 监督微调 - SFT
7. 参数高效微调 - LoRA
8. 强化学习 - DPO, PPO, GRPO
直接告诉我编号或主题名称,我会为你讲解!
(学习过程中我会自动记录笔记到 `docs/` 目录)3. 触发检测
每次用户消息后,检查是否满足以下任一条件:
Tier 1: 即时触发(立即更新笔记)
python
# MiniMind 术语(50+)
TERMS = [
# 架构
"RMSNorm", "LayerNorm", "BatchNorm", "GroupNorm",
"RoPE", "YaRN", "ALiBi", "位置编码",
"Attention", "注意力", "GQA", "MQA", "FlashAttention",
"FeedForward", "前馈", "SwiGLU", "GELU", "GLU",
"Transformer", "TransformerBlock",
# 训练
"pretrain", "预训练", "pretraining",
"SFT", "监督微调", "fine-tuning", "微调",
"LoRA", "lora", "LoRA-r", "LoRA-alpha",
"DPO", "PPO", "GRPO", "SPO",
"RLHF", "RLAIF", "强化学习",
"distillation", "蒸馏", "知识蒸馏",
# 模型
"MiniMind", "MiniMind-Dense", "MiniMind-MoE",
"MoE", "混合专家", "expert routing",
"MiniMind-Reason", "R1",
]
# 问题词
QUESTION_WORDS = ["什么是", "如何", "为什么", "怎样", "解释", "原理", "作用"]
# 问题指示
PROBLEM_MARKERS = ["报错", "错误", "失败", "Bug", "不工作", "问题"]
# 检查
if any(term in user_message for term in TERMS):
trigger_tier_1()
elif any(word in user_message for word in QUESTION_WORDS):
trigger_tier_1()
elif any(marker in user_message for marker in PROBLEM_MARKERS):
trigger_tier_1()Tier 2: 延迟触发(5秒后批量更新)
python
# 深度对话特征
if (
conversation_turns >= 3 or # 多轮对话
"```python" in assistant_response or # 包含代码
"$" in assistant_response or # 包含公式
len(assistant_response) > 1000 or # 长回复
"model/" in assistant_response or # 引用源码
"trainer/" in assistant_response
):
trigger_tier_2() # 延迟 5 秒Tier 3: 显式触发(总是更新)
python
EXPLICIT_KEYWORDS = ["记录", "记下", "保存", "写入笔记", "更新笔记"]
if any(kw in user_message for kw in EXPLICIT_KEYWORDS):
trigger_tier_3()4. 内容提取
从对话中提取结构化信息:
python
# 提取问题
def extract_question(user_message):
patterns = [
r"^(.*[??])$", # 问号结尾
r"^(什么是|如何|为什么)(.*?)([??。]|$)",
r"(.*)(吗|呢)[??。]*$"
]
# 返回匹配的问题
# 提取概念定义
def extract_concepts(assistant_response):
patterns = [
r"([A-Z\u4e00-\u9fa5]{2,})\s*(是|:)(.*?)([。\n]|$)",
r"\*\*([^*]+)\*\*\s*[::](.*?)([。\n]|$)",
r"###\s+([^\n]+)\n\n([^\n]+)"
]
# 返回 [(概念, 定义), ...]
# 提取问题解决方案
def extract_problem_solution(conversation):
problem = {
"description": "", # 错误现象
"root_cause": "", # 根本原因
"solution": "" # 解决方案
}
# 解析对话提取信息
# 提取代码示例
def extract_code_blocks(response):
return re.findall(r"```python\n(.*?)\n```", response, re.DOTALL)5. 文件更新
更新 learning_log.md:
python
def update_learning_log(date, topic, tasks, problems, reflections, materials):
"""
格式:
### 2026-02-23: 理解 RoPE 多频率机制
#### ✅ 完成事项
- [x] 理解为什么需要多频率
#### 🐛 遇到的问题
**问题: ...**
- **错误现象**: ...
- **根本原因**: ...
- **解决方案**: ...
#### 💭 个人思考
- **收获**: ...
#### 📝 相关学习材料
- 新增代码: `learning_materials/xxx.py`
"""
# 检查今天日期章节是否存在
if f"### {date}:" in content:
# 追加子章节
insert_subsection_after_date(date, new_content)
else:
# 插入新日期章节(按时间倒序)
insert_date_section_chronologically(date, new_content)更新 knowledge_base.md:
python
def update_knowledge_base(question, answer, details, code_example):
"""
格式:
**Q20: 为什么 RoPE 需要多频率?** [⭐️]
A: 因为单一低频率受浮点数精度限制。
**详细说明**:
- 详细解释1
- 详细解释2
**代码示例**:
```python
# 代码
```
参考代码: `learning_materials/xxx.py`
---
"""
# 1. 找到最大 Q 编号
existing_q = re.findall(r"Q(\d+)", content)
next_q = max(existing_q) + 1 if existing_q else 1
# 2. 推断所属章节
category = infer_category(question)
# "归一化" / "位置编码" / "注意力" / "训练" 等
# 3. 在章节末尾插入
insert_at_category_end(category, qa_entry)
# 4. 标记重要问题
if any(kw in question for kw in ["原理", "为什么", "核心", "本质"]):
mark_with_star(qa_entry)更新 learning_materials/README.md:
python
def update_materials_readme(new_file):
"""
格式:
## 位置编码
- **`rope_multi_freq.py`** - 多频率机制验证
- 验证浮点数精度限制
- 对比单频率 vs 多频率
"""
# 从文件提取描述(docstring)
description = extract_file_description(new_file)
# 推断分类
category = infer_category_from_filename(new_file)
# 插入条目
insert_at_category_end(category, entry)6. Git 自动化
生成 Commit Message:
python
def generate_commit_message(changes):
"""
模式: "[动作] [主题] [子主题]"
动作词:
- 学习 (新概念)
- 理解 (深入理解)
- 添加 (代码/材料)
- 解决 (问题)
- 完善 (补充)
"""
# 提取主要 MiniMind 术语
primary_term = extract_primary_term(changes.content)
# 识别动作类型
action = identify_action(changes)
# 提取子主题
sub_topic = extract_sub_topic(changes.content)
# 构造 message
message = f"{action} {primary_term}"
if sub_topic:
message += f" {sub_topic}"
return message[:30] # 限制长度
# 示例输出:
# "学习 RMSNorm 归一化原理"
# "理解 RoPE 多频率机制"
# "添加 Attention 学习材料"
# "解决 CUDA 内存溢出问题"执行 Git 操作:
bash
# 自动执行(静默)
cd {repo_root}
git add docs/notes.md docs/learning_log.md docs/knowledge_base.md docs/learning_materials/
git commit -m "{generated_message}"
git push origin {current_branch}错误处理:
python
def safe_git_push(max_retries=3):
for attempt in range(max_retries):
try:
result = run_git_push(timeout=30)
if result.success:
return True
except TimeoutError:
wait = 2 ** attempt # 指数退避: 1s, 2s, 4s
sleep(wait)
# 失败后不阻塞,记录日志
log_warning("Git push 失败,更改已提交到本地")
return False7. 分类推断
自动推断知识点所属主题:
python
CATEGORY_KEYWORDS = {
"归一化技术": ["归一化", "Norm", "RMS", "Layer", "Batch", "Group"],
"位置编码": ["位置", "RoPE", "YaRN", "编码", "位置编码", "ALiBi"],
"注意力机制": ["注意力", "Attention", "GQA", "MQA", "FlashAttention"],
"前馈网络": ["前馈", "FeedForward", "SwiGLU", "GLU", "GELU"],
"预训练": ["预训练", "pretrain", "pretraining", "语言模型"],
"监督微调": ["SFT", "微调", "fine-tuning", "监督"],
"参数高效微调": ["LoRA", "lora", "PEFT", "参数高效"],
"人类反馈强化学习": ["DPO", "PPO", "GRPO", "RLHF", "RLAIF", "强化学习"],
"Transformer 架构": ["Transformer", "架构", "模型结构"],
"混合专家模型": ["MoE", "混合专家", "expert", "routing"],
}
def infer_category(text):
for category, keywords in CATEGORY_KEYWORDS.items():
if any(kw in text for kw in keywords):
return category
return "其他" # 默认分类8. 静默运行原则
不打扰用户:
python
# ❌ 不要这样
print("正在更新笔记...")
print("已保存到 learning_log.md")
print("Git 提交成功")
# ✅ 应该这样
# 完全静默,只在出错时提示
if git_push_failed:
# 仅在失败时简短提示
print("💡 提示:更改已保存到本地,推送失败(网络问题)")专注学习对话:
python
# ✅ 继续正常对话
user: "什么是 RMSNorm?"
assistant: "RMSNorm (Root Mean Square Normalization) 是..."
# [背后静默更新笔记]
user: "它和 LayerNorm 有什么区别?"
assistant: "主要区别有三点..."
# [背后再次更新]
# 用户完全不知道笔记在更新9. 模板文件
初始化时使用的模板:
bash
~/.claude/skills/minimind-learning/templates/
├── notes.md.template
├── learning_log.md.template
├── knowledge_base.md.template
└── learning_materials_readme.md.template模板变量替换:
python
def load_template(template_name):
template_path = Path.home() / ".claude/skills/minimind-learning/templates" / template_name
content = template_path.read_text(encoding="utf-8")
# 替换占位符
today = datetime.now().strftime("%Y-%m-%d")
content = content.replace("{TODAY}", today)
return content10. 配置读取(可选)
如果存在 .minimind-learning.json:
python
config_path = repo_root / ".minimind-learning.json"
if config_path.exists():
config = json.loads(config_path.read_text())
auto_commit = config.get("auto_commit", True)
auto_push = config.get("auto_push", True)
batch_delay = config.get("batch_delay", 5)
notes_dir = config.get("notes_dir", "docs")
mark_important = config.get("mark_important", True)Best Practices
引导式学习
当用户说"开始学习"时,主动提供学习路径:
markdown
📚 MiniMind 推荐学习路径:
**Week 1: 基础组件**
→ Day 1-2: 归一化技术 (RMSNorm)
→ Day 3-4: 位置编码 (RoPE)
→ Day 5-7: 注意力机制 (Attention, GQA)
**Week 2: 完整架构**
→ Day 8-10: Transformer Block
→ Day 11-14: 完整模型实现
**Week 3-4: 训练技术**
→ 预训练 → SFT → LoRA → RLHF
你想从哪里开始?鼓励实践
检测到代码讨论时,建议创建可执行示例:
markdown
💡 要不要创建一个可运行的代码示例?
我可以帮你创建 `learning_materials/rope_basics.py`,
包含完整的 RoPE 实现和可视化。
这样你可以直接运行看效果!定期总结
检测到学习了多个知识点后,主动总结:
markdown
📊 今天学习总结:
✅ 完成事项:
- 理解了 RMSNorm 的原理
- 对比了 RMSNorm vs LayerNorm
- 运行了验证代码
🎯 建议:
明天可以学习 RoPE 位置编码,它和 RMSNorm
一起构成了现代 Transformer 的基础。
(笔记已自动保存到 `docs/learning_log.md`)Error Handling
仓库检测失败
python
if not is_minimind_repo():
print("❌ 当前目录不是 MiniMind 仓库")
print("请确保在 MiniMind 目录中使用此 skill")
print("或检查以下文件是否存在:")
print(" - model/model_minimind.py")
print(" - trainer/train_pretrain.py")
returnGit 操作失败
python
if git_commit_failed:
print("⚠️ Git 提交失败,但笔记已更新")
print("请手动提交:")
print(" cd docs/")
print(" git add .")
print(" git commit -m '学习笔记更新'")文件冲突
python
if file_conflict_detected:
print("⚠️ 检测到文件冲突")
print("建议:")
print("1. 手动解决冲突")
print("2. 或运行验证脚本:")
print(" python ~/.claude/skills/minimind-learning/scripts/validate_notes.py --fix-numbering")Validation
定期提醒用户验证笔记(每 10 个 Q&A 后):
markdown
💡 笔记提示:
你已经积累了 10 个问答!建议运行验证脚本:
```bash
python ~/.claude/skills/minimind-learning/scripts/validate_notes.py这会检查:
- Q 编号连续性
- 日期格式
- 文件引用完整性
## Summary
**这个 skill 的核心行为**:
1. ✅ **静默监听**:每次对话后检查触发条件
2. ✅ **智能提取**:从对话中提取问题、概念、代码
3. ✅ **自动更新**:更新三套笔记文件
4. ✅ **Git 自动化**:生成简洁 commit 并推送
5. ✅ **主动引导**:提供学习路径和建议
**用户体验**:
- 说"开始学习" → 立即得到学习指引
- 自然提问 → 背后自动记录笔记
- 完全静默 → 专注学习,无打扰
- 定期总结 → 巩固学习成果
---
**版本**: 1.0.0
**作者**: Joye Huang
**许可**: MIT