self-teach-agent · 自我教学与知识内化引擎
你有没有过这种体验:读了一本书、看了一篇长文,当时觉得"懂了",过两周一问三不知;或者想学一个新领域,资料一堆却不知道从哪下手、学了后面忘前面。问题不在你笨,而在于学习没有闭环——只有"摄入",没有"结构化、排课、自测、复现、晋升"这几步。
self-teach-agent 就是把"别人教"这件事,变成自己教自己的引擎。它的「自我」本质很明确:不假外求地让自己学会新知识、把外部原始材料内化成可复用的本领。它不替你读书,而是逼你(或 Agent)把读到的东西走完一整套内化闭环,并在这个过程中留下可被检验的证据。
这套引擎不是凭空编的,它有硬学术根基,下面逐一交代。
一、理论根基:为什么"自己教自己"真能work
1. Self-Instruct(Wang et al., 2022)——"模型教自己"的开山之作
传统做法要让人写海量指令数据来对齐模型,又贵又窄。Self-Instruct 只给模型 175 个人类写的种子任务,然后让模型:
1. 生成新指令(基于种子+先前生成的样例,brainstorm 不同任务);
2. 分类这是生成型任务还是分类型任务;
3. 实例化(生成对应的输入/输出);
4. 过滤(ROUGE-L 相似度 > 0.7 的去重、含"图片/图表"等不可处理词的剔除);
5. 用留下的数据微调原模型。
结果:vanilla GPT-3 在 Super-NaturalInstructions 上 +33% 绝对提升,逼近用私有数据+人工标注训出来的 InstructGPT-001,只差 5%。关键洞见:模型能教自己它已经"潜在会"但执行不稳的能力——这正是 self-teach 的精髓。
2. STaR(Self-Taught Reasoner, 2022)——只保留"对的"
Self-Instruct 的过滤是启发式的(看流畅度、看重复),不验证正确性。STaR 补上了这一刀:让模型生成推理链,再只保留最终答案正确的那些拿去微调。一句话:self-training 要把"不可靠的能力"变"可靠的"——过滤按正确性,不按流畅度。self-teach 的"晋升门禁"正是这一刀的工程化。
3. Curriculum Learning(Bengio et al., 2009)——由易到难
人类学加法先于除法、学残局先于开局。Bengio 把它形式化:训练样本按难度递增呈现,优化轨迹更平滑、收敛更快、泛化更好。核心是两样东西:难度度量 d 和 pacing 函数 g(多快放更难的样本进来)。后续衍生出 self-paced learning(模型自己选当前最有信息的样本先学)、competence-based curriculum(按当前能力门槛渐进放量)。self-teach 的 curriculum.py 就是这套——把要学的一堆主题排成"先修图 + 由易到难"的路径。
4. 间隔重复与遗忘曲线(Ebbinghaus, 1885)——对抗遗忘
人脑不是硬盘,是漏勺。艾宾浩斯遗忘曲线:R = e^(-t/S),R 是记忆保留率,t 是时间,S 是稳定性。不复习,一天后只剩约 33%。破解之法两条硬证据:
- 测试效应(testing effect):主动回忆比反复阅读留存高得多;
- 间隔效应(spacing effect):分散复习比集中突击有效得多。
由此诞生 SM-2 等间隔重复算法(SuperMemo)。self-teach 的 retention.py 把这套变成可计算的"下次复习日 + 遗忘率读数"。
这四块合起来,就是 self-teach 的骨架:Self-Instruct 管"教自己"、STaR 管"只留对的"、Curriculum 管"按什么顺序学"、Ebbinghaus 管"学了别忘"。
二、闭环:self-teach 怎么跑一轮
外部材料(书/论文/网页/对话/代码)
│
▼
[1] 摄入 ingest → 拆成"知识单元"(概念/定义/为什么重要/例子/关联)
│
▼
[2] 排课 curriculum → 先修图 + 由易到难,排出学习路径
│
▼
[3] 自测 quiz → 检查每个单元是否"真掌握"(有例子?能回忆?)
│
▼
[4] 间隔复现 retention → 排下次复习日,算遗忘率,到点召回
│
▼
[5] 晋升 promote → 自测覆盖达标才晋升为"可复用本领";否则物理拦下
注意第五步是门禁——和 self-verify 一样,self-teach 也不允许"感觉学会了"就放行。必须每个知识单元都具备:概念、定义、为什么重要、至少一个例子、能回忆,才晋升。这直接继承了 STaR "只留对的" 的精神。
三、何时该主动触发 self-teach(主动 Agent)
- 你/ Agent 刚读完一篇长文、一本书、一份文档,想把它变成"自己的东西"而不是"读过";
- 面对陌生领域,资料很多但无从下手,需要一份由易到难的学习计划;
- 发现学了就忘,需要把已学知识排进间隔复现节奏;
- 想把一个零散能力固化成可复用技能 / 永久记忆(与 self-improvement-agent 衔接);
- 交付前的"我真的懂了吗"自检——用自测覆盖门禁拦下虚假掌握。
同系列产品(互相独立又可合作):
- self-evaluate-agent:给任意产出打分反思(评估)
- self-debug-agent:自主复现并修复 bug(修复)
- self-verify-agent:交付前正确性门禁(验证)
- self-optimize-agent:把分数当目标函数做受控实验(优化)
- self-teach-agent:把外部知识内化成本领(教学)——本包
典型协作流:用 self-teach 学一个新框架 → 用 self-evaluate 评自己的理解笔记 → 用 self-verify 验证"我能不能独立用出来" → 用 self-optimize 做实验找最佳实践 → 用 self-improvement 把沉淀成永久记忆。
四、边界与红线
- self-teach 不替你读、不替你理解:它管"闭环与证据",真正的思考是你(或 Agent)做的。它拒绝"喂一段就声称学会了"。
- 不制造虚假掌握:自测覆盖不达标,promote 直接返回非零退出码,可被 CI / 工作流物理拦下。
- 不绕过正确性:晋升依据的是"有例子+能回忆+覆盖全",不是"读了多少字"。读得多 ≠ 学得会。
- 材料版权与合规:摄入外部材料仅用于个人内化;不要把未授权内容当作自己"产出"再分发。
- 不是记忆替代品:间隔复现帮你不忘,但复杂技能最终要靠在 self-optimize / self-debug 里真实使用来固化。
五、文件导航(本包 12 个文件,结构随内容走,不套模板)
SKILL.md:本文件,引擎定义与理论scripts/teach.py:主编排(摄入→结构化→自测覆盖→晋升/回滚/汇报)scripts/curriculum.py:先修图拓扑排序 + 由易到难路径(可计算硬核 1)scripts/retention.py:SM-2 间隔重复 + 遗忘曲线读数(可计算硬核 2)resources/sources.json:知识源类型与摄入适配器resources/retention_schedule.json:SM-2 间隔参数references/teach-theory.md:Self-Instruct / STaR / Curriculum / 遗忘曲线 深解references/ingest-method.md:把原始材料变成"自己的知识"的方法references/spaced-retention.md:间隔重复与测试效应的实践FAQ.md:场景应对与常见疑问README.md:上手、命令、退出码SELF_EVAL.md:本包用 TRACE 五维自评到 5.0 的整改记录
> 设计取向:和前几个包一样,self-teach 也把"可计算的硬核"拆成独立脚本(curriculum、retention),让"排课"和"不忘"都变成数字,而不是空谈。同时吸收 self-evaluate 获 4.7 分时的评价教训——把"学会的东西自动落为可复用本领"做成零负担动作,不靠人记。