把 AI 当老师用,最怕的不是 AI 不懂,而是 AI 太愿意直接给答案。Matt Pocock 的实战教程把这件事总结成一个词:teach skill——让 AI 像真老师一样教你任何东西,而不是像搜索引擎一样抛给你一段标准答案。这套思路本质上不是一个隐藏功能,而是一套可以复制到任何支持自定义指令的 AI 助手里的提示词工程方法。你不需要特定的模型,也不需要先掌握复杂的 Agent 开发,只要把“教学协议”设计清楚,就能让 AI 从答题机器变成会诊断、会引导、会反馈的老师。
这篇文章会围绕 teach skill 展开一条完整实践路径:先理解为什么普通问答不像教学,再设计一套可直接复用的系统提示词,然后通过一个“数组去重”案例跑通教学循环,最后把技能改造成可配置的工程模板,并给出失效场景的排查方法。如果你正在用 AI 学编程、准备面试,或者打算把 AI 教学能力做成产品,这套方法可以直接落地。
1. 先理解 teach skill:为什么普通 AI 问答永远不像老师
1.1 答题模式与教学模式是两个不同的东西
大多数人和 AI 的第一次学习对话是这样的:
- “请解释一下什么是闭包。”
- “什么是 Git rebase?”
- “帮我写一段数组去重的代码。”
这类问题都能得到正确答案,但得到的往往是“一段结果”,而不是“一次教学过程”。真实老师不会一上来就给你讲满三十分钟理论,也不会在你明显卡住时继续往下灌新概念。老师会先判断你已经懂什么,再决定讲多深,然后通过练习判断你是否真的学会。
teach skill 的核心,就是把“老师的行为”变成一个可执行的协议,而不是只靠模型自由发挥。普通 AI 问答默认采用答案模式,目标是把结果讲完整;教学模式的目标则是让学习者能够独立产出结果。
| 对比维度 | 普通答题模式 | teach skill 教学模式 |
|---|---|---|
| 核心目标 | 给出正确答案,结束问题 | 让学习者自己获得产出答案的能力 |
| 交流起点 | 用户问,模型答 | 先收集学习者已有知识、目标和时间预算 |
| 输出粒度 | 一次输出较完整解释 | 一次只讲一个概念,配合最小例子 |
| 错误处理 | 基本不处理,或重新给一次答案 | 根据错误先肯定正确部分,再给出提示 |
| 结束条件 | 回答完成 | 学习者能通过新情境题,说明知识发生迁移 |
这里的关键不是“要不要给答案”,而是“答案在什么时机、以什么粒度出现”。teach skill 要求 AI 把答案设计成教学过程的一部分,而不是过程本身。
1.2 teach skill 不是“人设提示词”,而是“教学协议”
很多人试过这样写提示词:
- “你是一个资深老师。”
- “请你像老师一样教我。”
- “你是编程导师,请详细解释。”
这类写法会有轻微作用,但效果不稳定。原因很简单:模型知道自己的角色是老师,却不清楚老师的流程是什么。它可能语气很温柔,内容照样堆成一篇论文,照样不在你答错之后调整讲解方式。
teach skill 要解决的是流程问题,所以它必须包含明确的规则:
- 什么情况下必须停下来提问。
- 每个知识点最多讲多少内容。
- 学习者答错之后应该给提示还是给答案。
- 一节课结束前,用什么方式验证学习效果。
换句话说,角色身份只决定了“像不像”,流程规则才决定了“会不会教”。Matt Pocock 的教学实践里最有价值的部分,不是把模型吹成无所不能的导师,而是给模型补上教学流程,让它在“教”这件事上有了可观察、可调试的行为。
1.3 teach skill 适合什么场景
这套方法适合个人自学、面试准备、团队培训、课程脚本生成,也适合产品里做 AI 陪练或智能问答。只要是“知识理解 + 技能练习 + 错误反馈”类型的内容,teach skill 都能发挥作用。
不适合的场景包括:需要真实肢体反馈的技能训练、高度依赖主观审美的创作指导、需要实时操作系统的排障教学。这类场景里,AI 可以作为辅助讲解者,但不能替代真实环境中的练习和人工反馈。
一句话总结:teach skill 不是让 AI 知道更多,而是让 AI 少讲一点、多问一点、在你卡住的时候知道往回收。
2. 设计 teach skill 的最小闭环:一份可以直接复制的提示词模板
2.1 teach skill 的五要素结构
在设计提示词之前,先理解一个成体系的教学技能需要包含哪些部件。只写“你是老师”缺的是流程,只写“先问再讲”缺的是评估。一个可复用的 teach skill 建议包含五个要素:
- 角色和教学原则:说明 AI 是老师,以及它的教学态度是什么。
- 学习者信息采集:开讲之前必须知道学习目标、当前基础、可用时间、期望达到的结果。
- 教学流程:明确按什么顺序推进,例如先诊断、再讲解、给例子、做练习、反馈、进入下一阶段。
- 输出约束:限制输出长度、概念数量、提示与答案的投放时机。
- 评估闭环:判断练习结果,并用新情境题验证知识迁移,而不是只问“你听懂了吗”。
学习环境里,这五要素可以直接写进提示词;产品化场景里,可以转成 YAML 或 JSON 配置,再由代码组装成 system prompt。
2.2 可直接复制的 teach skill 系统提示词
下面这份提示词可以直接复制到支持自定义指令的 AI 助手中,也可以作为 API 场景的 system prompt。所有内容都是通配结构,不绑定某个具体知识点。
你是一个严谨但有耐心的 AI 教师。你的任务不是直接展示答案,而是让学习者通过“讲解、示例、练习、反馈”真正学会一个技能。 ## 教学协议 1. 在开讲前,先收集以下信息: - 学习者想学什么 - 当前已经掌握了哪些前置知识 - 计划投入多少时间 - 希望学完后能做到什么 2. 根据学习者输入,把目标拆成 3 到 5 个可完成的小阶段。 3. 每个阶段按以下顺序进行: - 用不超过 3 句话解释当前概念 - 给出一个最小例子 - 让学习者完成一个简单练习 - 检查学习者的练习结果后给出反馈 4. 如果学习者答错: - 先指出答案中正确的部分 - 再给一个提示 - 不要立刻写出完整答案 - 连续三次答错时,回到更基础的子概念重新讲 5. 每次输出控制在 300 字以内。如果确实需要讲长内容,先问学习者是否可以继续。 ## 输出格式 - 开始前输出:学习目标和教学计划 - 教学中先输出:知识点 + 示例 + 练习 - 练习后输出:判断 + 解释 + 下一步 ## 禁止事项 - 不要一次性抛出一堆术语 - 不要在没有练习的情况下连续讲课 - 不要在还没确认理解时就进入新概念 - 不要在没有参考资料时编造公式、版本或事实 - 不要在学习者明确要求提示之前,提前给出完整答案这段提示词把“老师”从身份变成了流程。学习者第一次收到的不再是长篇解释,而是一个学习目标和计划;后续每次回答都必须配合练习和反馈,这会让对话自然进入教学节奏。
2.3 关键参数速查表
不同 AI 模型对指令的执行程度不一致,所以下面这些参数需要按实际效果调整。写死或全部省略都会导致行为漂移。
| 参数 | 示例值 | 调小的影响 | 调大的影响 | 建议 |
|---|---|---|---|---|
| 每次输出限制 | 300 字 | 解释可能不完整 | 回到论文模式 | 先在 200 到 400 字之间测试 |
| 每轮概念数 | 1 个 | 进度偏慢 | 学习者容易跟丢 | 教学初期固定为 1 |
| 提示次数 | 2 次 | 学习者可能卡住 | 学习节奏拖沓 | 设置 2 到 3 次提示后允许给答案 |
| 练习数量 | 3 道 | 验证不充分 | 对话太长 | 至少包含 1 道新情境题 |
| 结束前验证 | 3 道迁移题 | 无法确认掌握 | 体验过重 | 按目标难度决定 |
参数不需要一开始就完美,重点是让“约束”存在。模型一旦没有约束,就很容易回到默认的知识输出模式。
3. 用一个真实案例跑通 teach skill:让 AI 教你数组去重
3.1 先定义可验证的学习目标
“学会数组去重”这句话太模糊。AI 如果只收到这个目标,它无法判断自己有没有教完,学习者也无法判断自己有没有学会。
在 teach skill 里,目标必须落到可验证的行为上。例如:
- 学习者能用
Set完成数组去重。 - 学习者能解释为什么
Set适合去重。 - 学习者能处理“去重后保持原顺序”的变体问题。
这样的目标能直接转成练习题。学习者在练习里能写出结果,教学过程才算结束。
3.2 第一轮交互:先诊断,不要急着开讲
加入 teach skill 提示词后,第一轮对话应该从诊断开始。示意如下:
学习者输入:“我想学数组去重,目前会 for 循环,但不会 Set。”
AI 教师输出:“目标确认。学完后你能用 Set 给数组去重,并能解释 Set 去重和循环去重的差别。计划分三步:先理解 Set 是什么,再写最小去重代码,最后做一道变体题。第一步:Set 是一个只保存唯一值的集合,new Set([1, 1, 2])会得到一个包含 1 和 2 的 Set。请先回答:这个 Set 的长度是多少?为什么?”
这段输出不是标准答案,而是一个有明确检查点的问题。AI 通过“长度是多少”来判断学习者是否理解 Set 的基本行为。如果学习者答错,AI 会先指出正确部分,再提示,而不是直接跳到下一步。
3.3 教学循环:解释、示例、练习、反馈
继续以数组去重为例。假设学习者已经理解 Set 的基本概念,AI 会进入核心代码教学。
AI 输出:“现在把new Set(arr)和真正想要的数组结果区分开。new Set([1, 2, 2, 3])的去重效果确实完成了,但它返回的是 Set 对象,不是数组。如果调用.map会失败。请完成练习:const arr = [1, 2, 2, 3]; const result = ???,目标是把 result 变成数组[1, 2, 3]。”
学习者答:“const result = new Set(arr)。”
AI 反馈:“前半部分正确,你已经用 Set 去掉了重复值;但 result 的类型是 Set,不是数组。一个提示:有一个Array的静态方法,名字里包含from,可以把 Set 转回数组。再试一次。”
这种反馈方式的重点有三个:
- 先肯定“正确部分”,避免学习者感到被全盘否定。
- 指出具体问题:“类型是 Set,不是数组”。
- 只给提示,不给完整代码。
如果学习者第二次写出Array.from(new Set(arr)),AI 会继续给出一道变体题:“请把['js','ts','js','react','ts']去重,并保持顺序不变。” 这道题需要学习者综合运用刚学的知识,而不是原样复制第一段代码。
3.4 用新情境题验证是否真的学会
在一个教学循环结束时,AI 必须给出验证题。验证题不能和课堂例题完全一样,否则学习者记住答案也能通过。
teach skill 的评估设计要满足三个层次:
- 能完成相同难度的题。
- 能解释自己的答案,说出关键步骤的原理。
- 能处理一个未见过的新场景,例如去重后保持顺序、去重对象数组、判断
NaN是否能被去重。
只有当学习者能让 AI 确认“我的答案正确,并且我能解释原因”,教学才算真正完成。如果学习者在验证题上失败,AI 应该回到概念层重新讲解,而不是继续推进新章节。
4. 把 teach skill 工程化:从聊天提示词变成可配置的教学系统
4.1 用 YAML 描述 teach skill 配置
个人使用阶段,把提示词复制到自定义指令里就够了。但如果要给团队使用,或者把 AI 教学能力做进产品,就需要把提示词拆成可维护的配置。
YAML 适合描述教学协议,因为它的结构清晰,非技术成员也能看懂。下面是一个最小配置示例:
teaching_skill: teach_skill version: 1.1 objective: "教会学习者一个明确概念、步骤或技能" learner_profile: prior_knowledge: "待采集" time_budget: 20 preferred_style: "先练习后讲解" pedagogy: max_concepts_per_round: 1 max_output_chars: 300 hint_limit: 2 exercise_count: 3 feedback_mode: "先肯定,再提示,不直接给答案" flow: - confirm_objective - collect_learner_profile - split_learning_steps - explain_one_concept - show_minimal_example - assign_exercise - evaluate_answer - give_feedback_or_next - migration_test safety: no_uncited_facts: true source_only: false refuse_to_guess_versions: true这段配置的目标是把“教学规则”和“具体知识内容”拆开。规则可以复用,知识内容单独放进课程单元。未来修改教学流程时,只需要改 YAML,不需要改业务代码。
4.2 用 JSON 组织课程单元和练习集
知识点内容可以单独用 JSON 管理。例如数组去重这个主题,可以设计成课程单元:
{ "unit": "array-deduplication", "title": "数组去重", "outcome": "学习者能用 Set 完成数组去重,并解释 Set 与 filter 的差异", "steps": [ { "id": "set-basics", "type": "explain", "content": "Set 是集合,元素唯一,不做索引", "example": "new Set([1, 1, 2])", "exercise": "把下面数组转成 Set:['a', 'a', 'b']" }, { "id": "convert-back", "type": "exercise", "prompt": "把 Set 转回数组的两种方式是什么?", "hint": "Array.from 或者展开运算符" } ], "misconceptions": [ "new Set(arr) 返回 Set 而不是数组", "Set 保留插入顺序,不是排序" ] }课程单元里的misconceptions字段很有价值。它可以让 AI 在讲解之前就知道初学者容易错在哪里,从而更早地设置检查点。
4.3 在 API 场景中组装 system prompt
如果通过 API 调用大模型,可以把 YAML 配置读入代码,动态生成 system prompt。下面是一个 Python 思路示例:
import yaml with open("teaching_skill.yaml", encoding="utf-8") as f: skill = yaml.safe_load(f) def build_system_prompt(skill: dict) -> str: flow = " -> ".join(skill["flow"]) rules = "\n".join( f"- {k}: {v}" for k, v in skill["pedagogy"].items() ) return f""" 你是 AI 教师,遵循以下教学流程: {flow} 教学约束: {rules} 禁止编造没有依据的事实。 """ system_prompt = build_system_prompt(skill)这里的关键是:不要让每次对话都直接拼接全部历史聊天记录。产品化场景中,学习者的历史回答需要经过摘要或结构化处理,再作为 user message 传入,避免模型被早期错误答案误导。
生产环境还需要额外考虑三件事:日志记录每一次教学问答;版本管理教学配置;准备一组测试用例,定期验证 prompt 改版后是否仍然遵守“先诊断、再讲解、答错只给提示”的规则。
5. 常见坑与排查:为什么你的 teach skill 会失效
5.1 问题:AI 输出像一篇论文,完全不像老师
这是最常见的失效现象。学习者只问了一个问题,AI 就输出几百甚至上千字,把定义、原理、示例、注意事项全部堆在一起。
原因通常是提示词里没有“输出长度”和“概念数量”约束。模型默认追求信息完整,而不是教学节奏。
解决办法是在系统提示词中加入硬性规则:每个阶段只讲一个知识点,每次输出不超过 300 字。如果模型还是不遵守,可以让规则更极端:先输出一句结论,等待学习者输入“继续”,再输出下一句。
检查方式:看第一轮输出是否先给出学习计划和第一道检查题;如果没有,说明协议没有被模型执行,需要重新拆解规则。
5.2 问题:AI 直接给答案,剥夺了学习者思考过程
当学习者答错时,AI 立刻写出正确代码。表面上效率很高,实际上学习者没有完成认知过程,下次遇到完全相同的问题仍然可能不会。
原因在于反馈规则不明确。系统提示词里只写了“你是老师”,但没有写“答错后应该怎么做”。
解决办法:把反馈步骤写成可执行顺序,例如:
- 复述学习者答案。
- 指出答案中正确的部分。
- 指出具体错误点。
- 给一个提示。
- 让学习者再试一次。
如果连续三次答错,才能给完整答案。这个规则可以防止 AI 过早泄题。
5.3 问题:AI 不检查学习者是否真的听懂,直接往下讲
AI 有时会在学习者答对一道题之后,立刻进入下一个概念,甚至跨过练习环节。
原因在于提示词里没有明确的“阶段完成条件”。模型把“学习者答对”当成结束信号,但没有验证是否只是运气好或记住了答案。
解决办法:在流程中加入“迁移测试”。必须让学习者完成一道没见过的新题,才能进入下一阶段。如果验证失败,回退到当前概念重新讲解。
5.4 问题:AI 会自信地讲错事实
AI 教学最容易出安全问题的不是流程,而是内容。模型可能在缺少资料时编造函数名、版本号、历史事件或公式。
原因是大模型本身存在幻觉风险。单纯告诉它“不要骗人”效果有限,它不知道自己不知道。
解决办法是给 AI 提供参考资料边界:
- 只有在参考资料中出现的信息,才能当作事实输出。
- 无法确认的信息,要明确标注“不确定”。
- 涉及版本号、API 返回值和性能数据时,尽量要求它引导学习者查官方文档。
好的 teach skill 必须包含“知识边界约束”,否则教学流程再完美,内容错了也会误导学习者。
5.5 排查路径:从现象倒推原因
如果你的 teach skill 没有达到预期,可以按下面顺序排查:
- 第一轮是否收集了学习者信息?如果没有,角色协议没生效。
- 第一轮是否输出了完整答案?如果是,缺少输出约束。
- 答错时是否直接给了答案?如果是,缺少反馈协议。
- 是否每学完一个知识点都有练习?如果没有,教学流程不完整。
- 是否使用原题作为验证?如果是,验证效果不够。
- 输出内容是否有事实错误?如果是,缺少知识边界约束。
- 同一份提示词在不同模型中表现不同?这是正常的,需要按模型微调参数。
| 问题现象 | 可能原因 | 检查方式 | 处理建议 |
|---|---|---|---|
| 输出过长 | 缺少长度和概念数约束 | 看第一轮是否超过 300 字 | 加入字数限制和“一次只讲一点”规则 |
| 直接给答案 | 缺少答错反馈协议 | 故意答错,观察 AI 是否给提示 | 把反馈顺序写成四到五步 |
| 不主动诊断 | 缺少学习者信息采集步骤 | 看 AI 是否先问目标与基础 | 在流程开头强制加入诊断 |
| 不验证学习效果 | 缺少评估闭环 | 看对话结束前是否有新题 | 加入新情境迁移题 |
| 内容错误 | 缺少资料边界 | 选取一个冷门概念测试 | 要求 AI 只能依据参考资料,标注不确定 |
| 同一提示词效果不稳定 | 不同模型指令遵循能力不同 | 同提示词在不同模型对比 | 按模型微调约束强度 |
6. 最佳实践:把 teach skill 用在真实学习与团队培训中
6.1 个人自学环境的推荐配置
如果你只是用 AI 辅助自己学习,不需要做复杂系统。把 2.2 节的提示词放进自定义指令,再配合一个小技巧:每次学习结束后,让 AI 生成三道“明天再来做”的复习题。
推荐个人设置:
- 明确告诉 AI 你的学习时间预算,例如每次 20 分钟。
- 要求 AI 每完成一个知识点,输出一个小结。
- 保留学习记录,把每次练习中的错误单独存起来。
- 在最后让 AI 用三个不同的例子重新考你。
这里要注意,不要只验证提示词能出结果,还要验证它是否能处理错误分支。你可以故意答错一道题,看 AI 有没有按“先肯定、再提示、不直接给答案”的规则走。
6.2 团队培训和课程制作的建议
如果要把 teach skill 用于团队培训,建议按“配置、内容、审核、评估”四个环节分工:
- 配置负责人:维护教学协议 YAML,修改教学流程和约束。
- 课程负责人:维护课程单元 JSON,编写知识点、练习、提示和常见误区。
- 内容审核:用 5 个不同知识基础的学习者试跑,确认讲解顺序合理。
- 评估负责人:统计学习者在验证题上的错误率,反推课程内容是否需要调整。
课程内容不要只依赖 AI 生成。AI 可以大幅提高备课效率,但最终发布给团队的内容需要人工核对,尤其是版本、代码示例和外部引用信息。
6.3 发布或使用 teach skill 前检查清单
下面是一份可复用的清单,每次新增或修改技能时都可以对照检查。
- [ ] 学习者第一次看到的是学习目标,而不是完整答案
- [ ] 开讲前会采集学习者的已有知识、时间预算和期望结果
- [ ] 每个知识点只讲一个核心概念
- [ ] 每个概念后面都有最小例子
- [ ] 每个例子后面都有练习
- [ ] 学习者答错时,AI 先肯定正确部分,再给提示
- [ ] 连续答错时,会回到更基础的子概念
- [ ] 结束前至少有一道新情境题
- [ ] AI 不会在没有参考时编造版本和事实
- [ ] 对话过程有日志,能够复盘 AI 是否遵守规则
- [ ] 技能版本有编号,改动后可以回滚
6.4 下一步可以扩展的方向
teach skill 进一步完善后,可以往以下方向扩展:
- 把学习者常错题目整理成错题本,让 AI 在后续课程中反复调用。
- 加入间隔重复机制,按遗忘曲线安排复习。
- 在 Agent 场景中把 teach skill 做成可被调用的工具,由学习路径规划 Agent 选择何时进入教学、何时切换课程。
- 在课程单元 JSON 中加入前置知识依赖,让 AI 检测到学习者前置不足时自动回退。
- 引入人工评测集,定期用一批固定问题测试提示词改版效果。
回到 Matt Pocock 教程提出的那个目标:让 AI 像真老师一样教你任何东西。做到这一点的关键不在某个模型有多智能,而在于你写给模型的那套教学协议。先诊断,再讲解,用小例子降低理解门槛,用练习确认掌握程度,用迁移题验证真实能力。这个循环适用于任何值得学习的技能,也能随时拆解成可维护的工程配置。下一次再让 AI 帮你学习时,不要再只喊一句“你是一名老师”,给它一套流程,它会比大多数默认回答更像一个真正负责的导师。