ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AI Skills实战:数学竞赛教研与学案制作一体化

AI Skills实战:数学竞赛教研与学案制作一体化 1. 项目缘起当数竞教研撞上AI技能生态数学竞赛教研这份活儿干得越久越有体会真正耗时间的往往不是“想题”而是“把想法变成一份能直接发给学生的讲义/学案/课后练习”。一道改编题从灵感到成型要查资料、调难度、排版、配答案、写解析琐碎到让人怀疑人生。这两年AI辅助编程、AI辅助写作的 skills 生态逐渐成熟我就在想能不能把“竞赛教研学案制作”这套流程本身也封装成一组可复用的 skills于是就有了“学案的革命数竞版竞赛教研与学案制作一体化 skills”这个项目。简单说它做的是三件事第一把“出题→改编→命制”这套教研动作标准化第二把“学案结构设计→内容生成→排版输出”这套文档生产动作流程化第三把两套动作合并进同一个可调用的技能库让一个指令就能跑完一轮从“教研分析”到“成品学案”的完整闭环。适合谁来参考两类人。一类是像我这样长期带竞赛、需要高频产出讲义和题单的教练/老师另一类是正在研究 skills 开发的开发者尤其是想用 Claude Code、Codex 这类工具做垂直领域技能封装的朋友。项目本身不依赖特定平台核心是“把领域经验结构化”这件事方法论可以迁移到任何学科、任何工种。我自己的使用场景很直接周末要出一份高联一试风格的“不等式综合练习”过去从找题、改题、排版到校对至少三四个小时现在跑一遍这套 skills十几分钟能拿到初稿再花半小时人工复核打磨效率和质量的平衡点比纯手工好得多。这篇就把整个项目的设计思路、核心技能拆解、实操流程和踩坑记录完整写一遍给想自己搭一套“教研生产一体化 skills”的朋友做个参考。2. 项目整体设计与方案选型2.1 为什么选“skills”而不是传统提示词模板先聊一个关键决策为什么要把这套东西做成 skills而不是继续用十几页的提示词模板这是项目开始前我反复纠结的问题。传统提示词模板的本质是一份“一次性说明书”你把它粘贴给AI它按你的要求完成当前这轮任务。问题在于每个新任务都要重新粘贴、重新解释背景、重新校准输出格式而且一旦任务链条变长比如先分析学情→再命制试题→再排版→再配解析单条提示词根本控不住节奏写到后面上下文早就乱了。而 skills 的本质是“可复用的能力包”把特定任务的背景知识、执行步骤、输出规范、参考样例、校验标准全部封装成独立模块AI 在需要时按名调用。这就相当于从“每次重新交代需求”升级成“给它一个工具箱它自己知道什么时候拿哪把扳手”。对竞赛教研这种步骤多、专业术语密、输出格式要求高的场景skills 的模块化优势非常明显改动一个环节不影响其他环节复制给同事也只需要打包一次。我实际对比过同一个“命制一份数论综合练习”的任务用传统提示词模板跑第一遍往往结构松散要来回修正三四轮拆成 skills 跑输出稳定性明显更高因为每个子技能的职责边界是预先定义好的AI 不会在“出题”环节突然跑去“排版”。2.2 技能包的模块划分与调用关系整个技能包我拆成四个核心模块外加一个总控调度模块技能名职责边界教研分析olympiad-research-skill学情诊断、知识点拆解、难度定位、选题策略命题制卷olympiad-item-bank-skill原创题命制、经典题改编、参数随机化、难度校准学案生成olympiad-handout-skill学案结构设计、例题讲解编排、练习分层、答案解析生成排版发布olympiad-format-skillMarkdown/LaTeX 结构规范、公式检查、打印适配、版本记录总控调度olympiad-pipeline-skill接收任务指令、按顺序调用上述模块、中间产物校验、最终交付调用关系上总控调度是入口其他模块不直接互相调用而是通过“标准中间产物”衔接。比如教研分析模块输出一份《学情与考点分析单》命题模块读这份分析单来定题目范围命题模块输出《试题明细表含答案》学案模块再基于它组织讲解框架最后排版模块统一处理成可打印的文档结构。这样做的最大好处是每个模块都能独立测试出问题了能精准定位是在哪一环而不是整个流程都跟着崩掉。这个设计也贴合实际的工作习惯竞赛教研本身就不是流水线一个老师可能这周只研究“不等式放缩”这一个专题那我只调命题模块不走全流程效率更高。2.3 领域建模竞赛数学的“考点—难度—题型”三维坐标封装 skills 最关键的一步是把领域知识结构化成机器可读的“坐标系”。数学竞赛内容庞杂我不能让 AI 去茫然地“出一套题”我必须先给它一把标尺。我从多年的教研经验里提炼出三个维度作为所有命题和学案生成的底层坐标第一个维度是考点体系。我把竞赛数学分为代数、几何、数论、组合四大板块每个板块再细分二三级考点。比如代数里有不等式均值、柯西、排序、凸函数、切比雪夫数论里有同余、二次剩余、不定方程、丢番图逼近。这个层级结构用来约束“AI 不会跑偏到考点之外”。第二个维度是难度分层。用 1 到 10 分量化1-3 对应高联一试基础4-6 对应一式中档到二试入门7-8 对应二试中高档9-10 对应国决及以上。难度不是凭感觉拍的而是根据不同竞赛层次的真实题目难度和一个多年教练的经验标签来锚定。第三个维度是题型模板。选择题、填空题、解答题、证明题四大类每类再区分考察方式计算型、构造型、反证型、归纳型等。AI 命题时至少要在三维坐标里锁定一个点“代数—不等式—柯西变形—难度6—证明题”才不会凭空乱出。这个三维坐标本身也构成了一份数据集规范以后每生成一道题都会附带这三个维度的元数据标注形成可检索的题库索引。这套思路是从软件开发里的“数据建模”借来的——没有数据模型任何技能都只是玩具有了数据模型技能才谈得上“产业级”。3. 核心技能拆解命题、学案、格式三件套3.1 教研分析技能把学情“翻译”成语境参数教研分析模块是整个链路的第一站也是最容易被忽视的一站。很多人做学案生成就直接让AI“出几道难题”但缺少学情约束产出的内容要么太难要么太简单根本不能用。我的做法是给AI一组“学情翻译参数”。这些参数通过一个标准问题清单来收集学生的竞赛目标层级一试冲满分二试保送国集、当前薄弱板块是数论的同余理解不到位还是几何的辅助线构造没感觉、最近一次模拟的得分率区间、可用的课后时长每周2小时还是8小时、学生的计算功底代数变形熟练度等。这些非结构化的“学情描述”会被模块内部翻译成结构化参数输出比如“目标层级二试中档”“薄弱板块组合计数”“难度区间4-6”“题量12题”“答案详尽度中等关键步骤步骤化解释”。这个翻译过程非常关键——它是把人类教练的经验直觉量化成机器可操作的条件。我在这套参数里还塞了一个“负向约束清单”专门用来防止AI乱来。比如不能出偏题怪题、不能使用超出竞赛大纲的高等数学工具特殊情况除外且需标注、每一道题必须有明确的考点标签、选项设置必须有干扰项逻辑。没有这些负向约束AI出题自由发挥起来经常给你冒出一个用微积分硬解的“不等式”情绪很复杂。3.2 命题模块原创、改编、难度漂移校准命题学案的制作其实指向一个更刚需的能力快速产生高质量、难度可控的题目。命题模块这套技能目前包含三个专项逆推改编、参数化模板、难度漂移校准。先讲逆推改编这是我最常用的一个专项。给定一道竞赛真题它能反向拆解原题考了什么核心方法用了什么结构有没有可替换的背景知识然后在这个框架下做等价变形。比如一道经典的柯西不等式题可以把目标式从“和的最小值”改成“乘积的最大值”把约束条件从线性改成分式把变元数目从2个提升到3个。这种改编保留了原题的内在结构但外部形态几乎全新是竞赛教研里最常见的“出新题”手段。参数化模板专项适合大批量组卷。我预先整理了几十个经典的“题根结构”每个结构里预留参数位。比如“给定 abc1求 (a/(bc)) (b/(ca)) (c/(ab)) 的最小值”这个结构参数可以随意替换比例、替换变元数量核心逻辑不变。用代码的方式理解这就像写了一个泛型函数把变形参数传入自动生成具体实例。这个专项在初次应用时评估过生成速度比手动快5倍以上质量也基本可控。难度漂移校准是我最看重的质量关卡。AI改编题目时经常出现“看似相似但难度暴增”或“看似复杂但实际简单”的漂移。我的做法是让 AI 在出题后自答一遍把解题路径完整写出来然后根据“解题路径中步骤数、关键技巧层次、计算量”来估算实际难度和目标难度对比超过正负1档就回炉重改。这个自我校准机制很重要它让AI从“生成题目”升级到“生成符合质量要求的题目”。3.3 学案模块知识讲解例题阶梯练习分层的三维结构学案生成模块做的事情是把试题组织成一份能真正用于课堂教学的文档。我总结了一线学案的核心诉求既要给出题和答案更要给出“怎么讲”的完整脉络。学案模块输出的标准结构是三维一体的知识要点讲解区、例题阶梯区、练习分层区。第一个区是开胃菜这个专题的核心知识点用尽量精炼的语言讲清楚定理、公式、适用条件和常见陷阱。第二个区是主菜按难度从易到难排列的例题每题配“思路分析”“完整解答”“易错点提示”三个子环节。第三个区是饭后甜点加压力测试基础巩固题、进阶挑战题、高难压轴题三个子层。这个结构的核心是**“例题阶梯”里的过渡语言**——也就是一道例题讲完后如何引导到下一道难度更高的例题。我会在技能里明确要求AI在相邻两道题之间用一两句话说明关联“上一题的放缩方法换一种方式使用就得到下面这道……”这能让学案的逻辑脉络完全打通而不是ABCD四道题的简单堆叠。值得说明的是模块化生成学案时AI生成的内容不是一次成型的需要反复校验。我会要求模块输出时附上“教学备注”比如“本题建议用时8分钟”“这题的另一种解法会在下一讲展开”这些备注给到了老师极大的调整自由同时AI生成的学案也更有“血肉感”。3.4 排版模块从Markdown到可打印文档的适配排版模块看着不起眼实际是学案制作里最容易翻车的地方。数学学案的排版要求和普通文章完全不同核心痛点就一个字公式。我先定了一个最稳妥的公式书写规范所有行内公式用 $...$ 包裹所有独立公式用 $$...$$ 包裹不依赖特定排版软件纯 MarkdownLaTeX 语法。这样做的好处是兼容所有主流的 Markdown 预览和转换工具从 Typora 到 VS Code 到 Obsidian 都能直接渲染后续转 PDF 也顺畅。模块内部还会执行一套排版检查清单公式括号是否成对、求和上标下标是否完整、分数结构是否有多余花括号、汉字和公式之间的空格是否符合排版习惯、图表编号是否连续、难度标签是否完整。这些检查用脚本也可以跑但我更倾向于让 AI 在生成阶段就遵守规范减少后期清理成本。另外我设了一级“打印适配规则”页面边距用标准 Word 兼容默认值、标题层级不超过三级否则打印出来视觉会很乱、题目统一加题号.格式、答案解析统一排在练习题之后。这些规则看着琐碎但决定了这份学案是不是能被老师拿去直接印刷分发。4. 实操过程全记录从技能配置到完整产出4.1 技能包的调试与文件组织实装这套 skills 的时候第一步是把技能文件组织成清晰的目录结构。我的工程目录长这样olympiad-skills/ ├── skills/ │ ├── olympiad-research-skill.md │ ├── olympiad-item-bank-skill.md │ ├── olympiad-handout-skill.md │ ├── olympiad-format-skill.md │ └── olympiad-pipeline-skill.md ├── data/ │ ├── knowledge-graph.json # 考点三维坐标系 │ ├── difficulty-calibration.json # 难度校准规则 │ └── item-templates.json # 参数化题根模板 ├── examples/ │ ├── sample-handout-good.md # 正面样例 │ └── sample-handout-bad.md # 反面样例 └── README.md每一个技能文件我要求自己严格遵守一种结构先写“背景与目标”明确这个技能解决什么问题再写“输入参数规范”定义它接收哪些结构化字段接着写“执行步骤”按顺序描述内部推理流程最后写“输出格式规范”和“质量标准”。这套结构在给到 AI 工程师朋友看时他们说基本就是“接口文档状态机”的思路AI 调用起来很顺。调试过程远比想象中要费时一开始调度到第三步“命题模块”经常返回空或不符合格式原因在于我没有给技能文件里写足够明确的“输出字段约束”——它不知道自己必须返回包含题号、考点、难度、题干、答案、解析这几个字段的JSON对象。后来我在每个专项内部都增加了“输出JSON Schema示例”字段AI 才有章可循。4.2 一个完整的命题学案生成示例来演示一次实际调用输入指令是“为高二数竞班出一份《均值不等式进阶》专题学案目标难度4-6题量8题含2道例题6道练习要求2道练习是原创改编题。”整个流程的中间产物我记录大致如下教研分析模块输出诊断单目标学生水平对应高联一试以上二试未开始薄弱点变量替换意识弱目标难度4-6建议讲解重点均值链的取等条件分析。这个诊断单为后面命题框定了边界。命题模块开始干活。它从参数化题根模板中调用了三个均值不等式经典结构做了改编1把加权均值里的权重改成未知参数要求求参数取值范围2把“三个正数”推广成“三个正数加一个约束条件”形成新的不等式链3原题中的取等条件被改写为“证明等号不成立”从而规避了直接送分。这里每道题都自答一遍校准难度确认在4-6区间。学案模块基于上述题目组装整份文档先是知识点讲解区讲了均值链的完整结构、配凑技巧、常见错误再是例题阶梯区第一道例题带完整的“思路分析→解答→易错点提示”第二道例题难度更进一档练习区分成“基础巩固”3题、“进阶挑战”2题、“拓展思考”1题。每道题之间都有承接语。排版模块最后统一公式格式和结构编号输出干净的Markdown文档。我复制进 Typora 后转 PDF一页 A4 印三五道题页边距正常公式渲染无异常。整体从发指令到拿成品大致15分钟。4.3 质量校验清单每一份学案交付前我都查什么AI能把初稿做出来不算本事真正决定能不能用的在于质量校验。我个人坚持用一套检查清单来把关命题质量维度每道题是否有明确的考点标签是否在考纲范围内题干有无歧义答案是否唯一或说明多解难度标注和实际自答步骤数是否匹配学案质量维度知识讲解是否简明会不会直接长段摘抄教材例题是不是有阶梯递进还是三题并列等难度练习分层是否合理有没有出现“基础题比进阶题还难”的倒挂解析是不是“跳步式解答”有没有保留关键推导排版质量维度公式是否全部用规范的LaTeX包裹括号是否配对题目编号是否连续图表有没有丢失输出格式是不是 Markdown方便再编辑这一套清单我在技能设计阶段就写进“查询规范”里AI 每次输出都会自查。就我实测效果来看最管用的反而是最简单的那条“每道题AI必须自己先做一遍”。只要它做过一遍很多明显的逻辑漏洞和不合理难度就会暴露。5. 技术实现细节与参数计算5.1 技能调用方式与上下文注入在实际使用中这套 skills 的调用方式可以分为三种模式。第一种是全流程模式输入一个高度概括的任务描述总控调度模块自动拆解步骤并依次调用四个模块适合完整学案的生产。第二种是单模块模式只调用某一个专项比如只做试题改编输出试题清单而不做学案组织。第三种是交互模式每跑一步都让AI解释中间产物我确认无误后再执行下一步。前两种适合日常批量操作第三种适合给学生单独出诊断性练习的时候因为需要充分人工判断。调用时的上下文注入我做了优化不把全部知识图谱JSON丢进技能描述里而是只加载当前任务需要的板块数据。比如这份学案是《均值不等式进阶》那就只加载“代数-不等式-均值不等式”这一支路的考点及其关联知识点压缩上下文占用让AI能更专注在具体任务上。这个技巧既提升了运行速度也降低了跑偏概率。5.2 难度数值模型与校准公式刚才反复提到的“难度4-6”落到实现上不能是一句空话要看具体怎么算。我把难度拆成三个可量化的因素考点复杂度C、解题步骤数S、技巧新颖度N。综合公式近似为D round((0.3×C 0.4×min(S, 12)/12 0.3×N)×10, 0)三个因素说明一下考点复杂度C由这道题涉及的核心二级考点个数和其中是否含跨板块综合来定单考点为1双考点为2三考点以上为3解题步骤数S是AI解题路径中的关键有效推导步骤个数12步封顶技巧新颖度N是人工校验时根据“是否涉及二试以上常见高级技巧”给出1到3的评级。举个例子一道“用均值不等式求三元分式最值”的题单考点复杂度C1自答路径7个关键步骤S7技巧属于常见的配凑新颖度N1。带入公式D(0.3×10.4×7/120.3×1)×10≈7.3按小数位归零取整计算难度约7判断为略偏难。这时候就要调整把技巧新颖度或步骤数降低一档或者把变元个数从3改回2让难度落到6左右。这个数学模型当然不是绝对科学但它的价值在于给了AI一个“可调谐”的机制当我反馈“这批题难了”它不是盲目地整体降低数量或换简单题而是能精确定位到“减少跨考点复杂度”或“压缩步骤数”这两个旋钮上。这在批量命题的时候非常实用。5.3 学案知识图谱的构建与维护知识图谱是整个技能包的地基也是我最花时间维护的数据资产。目前我的knowledge-graph.json里记录了四大板块下共 87 个二级考点、310 个三级考点的标注以及每个考点常考的题型、难度均值、相邻考点关联关系。举个例子“数论中同余”节点会关联到“剩余系”“费马小定理”“阶与原根”等子节点难度区间被标记为6-9常考题型是“证明题”和“综合题”。当教研模块接收到“数论基础薄弱”的反馈时它不只是记忆“弱点”二字而是能定位到具体的关联考点网络为后续命题圈定更合理的范围。这个图谱不是一次性构建完就完事的。每次我发现一批新的经典题或考点联系就会更新进 JSON 里遇到新题型也补充一条“题型-考点”的新映射。维护成本不算高但长期坚持下来这套技能包的内容深度会远超任何一个静态提示词所能承载的知识量。更关键的是这些数据是结合具体的考试大纲、真题分布、学生反馈持续迭代出来的有真实的教研经验温度在里面。6. 常见问题与排查技巧实录6.1 调用顺序混乱技能执行中途“串台”第一版技能包运行最常出的问题就是明明调用命题模块AI 却自动开始排版明明在出题目突然又给你讲一段学情分析。根本原因在于总控调度模块的技能描述里“职责边界”写得太模糊而我没有给它足够的“禁止性指令”。解决办法是在所有技能文件里都新增了一个“禁止项”段落。举例在命题模块的规范里我写上禁止输出学案结构禁止输出排版建议只允许输出题目及解析在排版模块里则反过来禁止输出任何教学案例分析。这个看似简单的“权限收缩”让每个模块都变得又专又稳。6.2 难度标注漂移AI自估难度与学生实际感受脱节第二种常见问题是AI在命题模块内部进行自答校准后给出的难度标签与老教练的实际经验判断差出一个档位甚至更多。我排查下来核心原因在于AI自答时往往会略掉“自己已经会的技巧细节”——它天然觉得某一步很简单但学生没这个背景实际会很费力。我的修正方案是双轨制AI自估难度校准时必须列出“推导过程中每一步用到的具体知识点”我会人工核对这串知识点是否在该层次学生的已知范围内。如果知识点跨度太大而AI仍打出低难度就强制把难度调回正确档位。这套双轨校验说白了就是把“AI盲估”和“人工审校”合并到流程里减少纯靠模型的偏差。6.3 公式渲染兼容性线上预览和线下打印不一致还有一个很磨人的痛点同一份Markdown学案在线上预览器里公式正常线下Word排版时却会出现公式乱码、行距错乱。跟排版模块强绑定已久我的经验是在生成学案时就把排版环境需求写清楚尽量保持纯LaTeX语法回避复杂的自定义宏定义。对于确实需要用到的特殊符号如数论里的同余三元组我会在生成阶段控制成通用写法确保主流渲染器都能识别。这条建议在实操中真的帮我省掉了很多跟同事来回校对格式的时间现在大家约定俗成学案预览就直接用同一个工具链虽然少了灵活性但换来极高的一致性反而更适合团队协作。6.4 多任务并发时的上下文“串味”当老师在同一对话里连续生成多份不同专题的学案比如上午出《不等式》下午出《数论》偶尔会出现上一份学案的题目混进下一份的情况。原因并不神秘长对话的上下文记忆太强AI误以为这些话题有关联。我的处理方法是加一道“任务隔离”指令每份学案开始前强制清理对话历史把知识图谱数据和任务描述作为新上下文的开头。或者更干脆的做法每次新任务开新会话不沿用旧上下文。虽然略微牺牲了连续对话的便利性但产出的内容边界非常干净。我也找到了折中办法在总控模块里要求“每个任务输出完成后AI需要对任务核心字段专题名、考点、难度输出一条定界摘要”这个摘要相当于在对话流里打了一个“分隔符”大大降低串味概率。7. 后续演进方向从“能用”到“好用”还差什么当前版本已经能稳定产出可用的学案初稿但我心里很清楚它距离一个真正“产业级”的教研系统还有不少路要走。我自己最期待的是以下三个方向。第一是从“生成学案”进化到“自动记录教研轨迹”。每一份学案产生过程中AI 留过什么题、剔除过什么题、校准过多少次难度、学生的后续反馈是什么这些轨迹值得被采集下来沉淀成“教研过程数据”而不仅是“教研成果数据”。有了过程数据才能做更细的学情纵向追踪。第二是和真实教学反馈闭环。我计划下一步给技能包增加一个“学生反馈模块”输入学生的完成正确率和错题分布学案模块便能反向调整后续的命题策略。这样一来整套 skills 就不再是单向的“AI出题→学生做”而是一个“出题→做题→反馈→再命题”的正向螺旋上升。这个闭环一旦跑通才说得上真正“一体化”。第三是跨学科迁移。现在整个技能包的设计是基于语文数学物理化学等学科的底层逻辑但如果把考点坐标换成“物理力学中的受力分析”“化学有机反应的断键机理”几乎同样格式的坐标体系可以无缝迁移。路径里我已经预留了“知识领域映射”的参数入口未来换学科时主要替换知识图谱和题根模板整体框架不用推倒重来。我个人在实际操作中的体会是做这类 skills 项目真正的胜负手并不在写技能提示词本身而在于领域知识是否被结构化得足够细、足够准。技能文件只是“管道”管道再漂亮里面没有经过沉淀的、严谨标注的知识数据流出来的还是水。如果你也想做一套学科教研类 skills我的直接建议是至少预留三分之一的时间去搭建和维护知识图谱它才是这套技能的“灵魂”。最后再分享一个小技巧每份学案生成后留出五分钟做“反向阅读”检验——自己以学生身份把学案从头到尾做一遍。这一步不花太多时间却能暴露AI所有潜在问题。作为一个带竞赛多年的教练我依然相信任何工具都替代不了老师在真实教学现场里的专业判断但把判断力封装成可以复用的流程是能让整个教研团队共同受益的事。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进