资讯详情

资讯详情

教育Agent实践:从个性化学习路径到自动批改的全流程落地

把一个班级四十个人的错题逐题看完再给每个人画出“下一条该做的题”这个工作量换成任何一位老师都需要加班到深夜。我两年前开始做“教育 Agent”这个方向时目标很直接能不能让系统自己完成“诊断—推荐—批改—反馈”这个循环把“个性化学习路径”和“自动批改”这两个听起来很宏大的概念落到一套能跑通的工程实现上。这篇文章把我从架构设计到上线跑数据这一路的思考、选择和踩坑完整写出来用到的方案不一定最先进但都是实测下来能稳定工作的。如果你正准备做类似的教学系统、智能题库或者学习助手这篇内容应该能帮你避开不少弯路。1. 做之前先说清这个Agent到底要解决什么问题1.1 学生端的核心痛点我最早接触这个项目是因为看到一份教研分析报告一个班级在同一章节的测验里成绩分布非常分散——有人十分钟交卷满分有人盯着第一道题发了半小时呆。传统课堂只能用“中位数的节奏”推进讲快了后面的人跟不住讲慢了前面的人闲着。个性化学习路径要解决的就是这个“教学节奏与个体能力不匹配”的问题。但个性化不能停留在“正确率高的学生多给难题”这种表面逻辑上。真正有价值的个性化至少要做到三层层一知道学生“当前会什么”即知识点掌握度。不是一次考试的分而是分知识点、分技能维度的估计值。层二知道学生“下一步最适合学什么”即学习路径中下一个节点的推荐。这需要考虑前置知识是否具备、难度是否合适、同类题型是否已经巩固。层三知道学生“做错了为什么错”即错误归因。是概念不清、公式记错、审题偏差还是纯粹粗心。这决定了下一次推荐是重新讲解概念还是换一道相似题巩固。1.2 老师端真正需要省下的时间自动批改的目标也得分清楚。老师最耗时的环节不是判选择题而是主观题、应用题、过程性作业。尤其理科的过程分一道题扫一眼就得看公式、看步骤、看最终答案一个班五十份作业就是五十次重复劳动。批改系统要替老师做的不是“替代判断”而是“预判复核”。系统先把每份作业的得分、错因标注、讲解建议全部生成好老师只需要抽查有争议的几份。这样老师省下的时间不是用来休息的而是去做更有价值的事设计课堂活动、找学生面谈、调整备课方案。1.3 我最终划定的两个功能边界很多团队做教育Agent失败是因为一开始就想什么都做。组会讨论时经常出现“最好还能自动生成教案”“最好还能当情绪导师”这类需求。我的经验是第一版只做两个闭环——学习路径闭环和批改与反馈闭环这两个功能可以共用一套数据而且彼此强耦合。路径推荐需要知道学生当前的薄弱点而这恰恰是批改结果提供的。批改反馈需要给出下一步学习建议建议的生成依据又来自路径规划模块。两个模块共享同一个“知识图谱”和同一个“学生画像”系统结构非常清晰。其他功能比如课堂报告、家长通知、班级学情看板都是这两个闭环的副产品等核心跑通了再往上搭成本很低。2. 个性化学习路径核心算法与数据设计2.1 学习者画像要做到什么粒度刚开始我犯过一个典型错误把所有做题记录汇总成一个“综合掌握率”存进学生表里。结果推荐出来的题目乱七八糟——明明代数基础薄弱的学生因为几何题做得比较多综合正确率被拉高了系统给他推了更难的几何题。后来我改成知识点粒度的画像。每个知识点知识节点独立维护掌握度并且带时间戳和置信度。数据结构类似这样student_knowledge_state ( student_id varchar(32), knowledge_id varchar(32), mastery float, -- 0.0 ~ 1.0 confidence float, -- 当前估计的可靠程度 last_exercise_time timestamp, wrong_count int, right_count int, primary key (student_id, knowledge_id) )掌握度不是简单地把“做对的题数/总题数”算个百分比而是带权重的更新。我的做法是新做对的题会让掌握度向当前值和高值之间移动新做错的题会让掌握度显著下降下降幅度取决于这道题的难度和题型权重。置信度则随做题目数量增加而上升同时随时间衰减——十天内没有练习记录的节点置信度要打折因为记忆会遗忘。2.2 基础框架知识图谱怎么搭个性化路径的底层依赖是知识图谱也就是“知识点之间的前驱后继关系”。我见过有人一上来就画了一千多个节点的超细图谱结果维护和分析成本极高很多边的可靠性也没有验证。我的建议是先搭主干再长枝叶。具体顺序分步走对照课程标准和主流教材的章节顺序梳理出一级知识点和二级知识点。比如“一元二次方程”下挂“配方法”“公式法”“判别式与根的关系”等。对每个二级知识点标注前置条件。判别式与根的关系前置必须是“实数运算”和“一元一次方程求解”。这条边很重要它决定了路径能否穿越。嵌入AI辅助抽取拿一批真题和讲义让大模型抽“题目涉及的知识点”然后人工抽查修正。这一步能帮我们快速覆盖题库但不建议完全放手让模型自动建边——它会把“相关”和“前置”混为一谈。知识图谱的数据结构不用复杂邻接表模型就够了knowledge_node ( node_id varchar(32), node_name varchar(128), subject varchar(32), grade int, difficulty int, -- 1~5 est_minutes int -- 建议学习时长 ) knowledge_edge ( source_node_id varchar(32), target_node_id varchar(32), relation varchar(16), -- prerequisite / reinforce / similar weight float )这里有个很关键的判别标准只有“前置关系”才能作为路径规划的硬约束“相关关系”和“相似关系”只能作为排序的软加权。如果分不清这两种边路径规划会出现环或者绕远路——我在测试阶段确实见过系统给学生推了五次“概念辨析”题才放行到计算题原因就是相关关系的权重压过了前置关系的约束。2.3 路径规划怎么做从规则到状态机规划“下一个节点做什么”其实不需要一开始就上强化学习。基于知识图谱的状态机配合一套明确的转换规则在大部分K12学科场景下已经能取得很好的效果。我用的方案核心是三个动作类似有限状态机状态“未开始”如果所有前置节点掌握度都达到0.6以上进入“待学习”否则保持等待并推荐前置节点中的薄弱项。状态“学习中”学生刚做完第一次练习系统不急着推进而是看练习结果。做对了且掌握度上升进入“巩固中”做错了连续两次回退到“复习前置”。状态“待巩固”按照间隔重复的逻辑安排复习间隔天数依次是1天、3天、7天、14天。这个策略参考了艾宾浩斯遗忘曲线但做了工程化简化。路径推荐的排序规则可以写成一段伪代码candidates 所有“前置已达标且当前状态为待学习”的节点 if candidates 为空: 考虑下一章节的新节点 else: 按以下优先级排序: 1. 前置节点中掌握度最低的学科薄弱点 2. 上次练习距今最久的待复习节点 3. 当前最近一次练习正确率低于60%的同类题这套规则看起来简单但实际跑起来效率很高。它的好处是可解释——学生可以看到“为什么推荐这道题”页面上的文案是“因为你上次‘配方法’只做对了1/3我们先复习一下配方法再继续”而不是冷冰冰的“推荐题目”。可解释性在教育场景里极其重要家长和老师都需要知道系统建议的依据。2.4 动态调整的时机与策略路径规划不是一次性算完就固定住而是一个每轮练习后都要重算的过程。我设置的重算时机有三个每次批改结果生成后立即更新学生知识点状态并重算“下一个推荐节点”。连续答错达到3题时触发“降级模式”系统主动把难度下调一档并插入一段概念讲解内容。连续答对达到5题且每道题都属于中等及以上难度时触发“升级挑战”推荐一道跨章节综合题。动态调整最忌频繁切换容易让学生觉得系统“飘”。我的做法是给每次推荐附带一个“最低完成数量”——比如推荐了一个薄弱点复习包学生必须先做完里面的6道题系统才能重新规划。这不是限制自由度而是保证每次调整都基于足够的观测样本避免一两道题偶然失手就推翻整条路径。3. 自动批改不只是“打个分”要能定位错因3.1 题型分级与处理方案我一开始试图让一个大模型统一处理所有题型的批改结果成本高、延迟高、效果还参差不齐。后来改成“分级分流”的思路把题型按结构化程度分成了三类每类用不同的技术路线题型类别代表题型批改方案关键难点强结构单选、多选、判断、填空题第一空标准答案比对 轻量改写匹配同义表述、单位换算、大小写半结构填空多空、列式计算、简单证明规则引擎 公式归一化 LLM步骤校验数学符号等价、中间步骤不全弱结构简答、应用题书写过程、小作文LLM按详细评分标准评阅另加二次校验评分标准一致性、幻觉纠错每一类都有专门的处理管线互不干扰。强结构题的处理速度要快到毫秒级弱结构题可以接受几秒延迟。把所有题都交给大模型逐字推理是性能灾难也是成本灾难。3.2 LLM主观题批改的工程化弱结构题是自动批改的核心难点我在这块花的时间最多。第一版直接甩给大模型“请给这道题打分”结果一塌糊涂评分随意浮动、不给过程说明、经常自己脑补出学生根本没写的步骤。后来才把工程化流程理顺现在稳定很多。现在的流程是分四步走第一步预先定义评分标准rubric。每道题对应的标准分为若干个可独立评分项比如“公式正确2分”“代入过程正确3分”“最终结果正确1分”“书写规范1分”。大模型只做“按项评分”不做“整体印象分”。第二步向大模型注入结构化prompt要求输出JSON格式里面包含每个评分项的得分、扣分原因、知识点标签。为了稳定解析我把输出格式示例写死在提示词里并让模型先输出“思考过程”再输出结果但不把思考过程展示给学生。第三步随机打乱学生作答顺序分多次调用模型取同一评分项的中位数作为最终得分。这样做是为了避免“批改疲劳”带来的顺序偏差——我实测发现批到后半段时模型会明显变松。第四步设置校验规则兜底。如果模型给出某评分项满分但学生的相关公式出现明显低级错误校验模块会强制扣分并触发人工复核。主观题批改的准确性不能只看“最终分是否接近老师的分”还要看“错因是否一致”。我做过一个对照实验同一份50份卷子模型批改结果与教研组老师批改结果对比最终分相关性能做到0.91但错因一致率只有0.76。这说明模型在“给分”上进步快在“归因”上仍需大量打磨。3.3 错误归因与反馈生成自动批改的真正价值在反馈。批改页面上除了一个红叉和正确答案至少应该给出三样东西错因标签知识缺失、概念混淆、计算失误、审题偏差、方法不当。针对性的讲解片段这个概念一句话讲清楚配合一个评估过的同类例题。下一步做什么是重做原题、做同类题还是先看前置知识点讲解。错误归因的实现我用的是“归因矩阵”题目在入库时就由教研人员标注了“该题主要考察的知识点”和“常见错误选项对应的错误类型”。选择题错了直接用选项对应关系归因主观题错了让大模型在评分时同时输出“错误可能的知识点根因”再和题库的标注做交集。反馈生成里面有两条红线我吃了亏才记住。第一不能直接给学生贴“笨”“差”“粗心大王”这类的标签不能强化负面身份认同。我见过一个学生连续错五道计算题后系统文案变成了“你最近有点心浮气躁”家长看到后直接投诉。第二讲解片段必须经过审核或生成后校验不能让模型自己编造一个“课本上没有的公式”。后面这个坑我会在常见问题里展开讲。4. 从零落地一个最小闭环架构、数据模型与Prompt设计4.1 系统架构与模块划分我落地的第一版系统架构非常朴素拆成五个模块每个模块都可以独立替换接入层接收学生作答、题目信息、学习行为日志。批改服务按题型分流调用不同评分器。强结构题走本地规则引擎弱结构题走LLM评分服务。知识服务维护知识图谱、题目难度、推荐候选集是路径规划的基础数据源。路径引擎读取学生最新画像执行状态机规则输出下一个待学/待练节点。反馈服务把批改结果和路径推荐组装成学生端展示内容包括错因标签、讲解内容、鼓励文案。模块之间只通过消息交互不共享内部状态。批改服务不知道学生画像路径引擎也不会直接改分。这个设计让我后面换模型、换评分策略时不需要动其他模块非常省心。4.2 关键数据模型与表结构除了前面提到的知识点画像表还有两张表是整个系统的支柱。第一张是题目表它不只是存题干和答案还存了丰富的元信息question ( question_id varchar(32), content text, answer text, subject varchar(32), knowledge_node varchar(32), -- 主考察知识点 related_nodes json, -- 相关知识点数组 difficulty int, -- 1~5 type varchar(16), -- choice / fill / subjective rubric json, -- 评分标准主观题使用 wrong_meta json, -- 常见错误选项与错因映射 status int -- 启用/停用 )第二张是作答记录表这是产生画像的原始素材也是所有画像更新的触发源attempt_log ( record_id bigserial, student_id varchar(32), question_id varchar(32), student_answer text, is_correct boolean, score float, max_score float, error_type varchar(32), response_ms int, -- 作答耗时 created_at timestamp, review_status int -- 正常 / 待人工复核 / 已复核 )每次批改完成后都会写入一张attempt_log再触发一个异步任务去更新student_knowledge_state。这个异步更新必须做幂等因为大模型评分是异步返回的可能出现同一个record被重复处理的情况。我当时在这里吃了一次数据错乱的亏后来加了“按record_id去重更新”的逻辑才解决。4.3 核心Prompt的设计思路弱结构题的批改Prompt是整个系统的关键。我第一次写Prompt走的是“自由发挥”路线效果很差。后来总结出一套相对稳定的模板核心原则是“先定标准再评步骤最后输出结构”。以“一元二次方程应用题”为例简化后的Prompt如下你是数学作业批改助手。下面是一道应用题和一位学生的作答。 请严格按照评分标准进行评判先自行推导正确解法再对比学生的作答。 题目 {question} 参考答案 {answer} 评分标准rubric 1. 设未知数正确1分 2. 列出正确方程3分 3. 方程求解正确2分 4. 检验并下结论1分 要求 - 先简要写出学生的关键步骤再逐项评分。 - 如果某个步骤缺失但后文沿用该结果依然按缺失项扣分。 - 输出JSON格式如下 { method_summary: 学生采用的方法简述, scores: { step1: {score: 1, reason: 设未知数正确}, step2: {score: 2, reason: 方程漏写二次项系数}, step3: {score: 2, reason: 解法正确但中间计算跳步}, step4: {score: 0, reason: 未检验} }, total_score: 5, knowledge_tags: [一元二次方程, 应用题建模], main_error_type: 步骤不全, main_error_reason: 学生在求解过程中跳步且未做结果检验 }这个Prompt达到的效果是解析稳定性从最初的82%提升到99%以上。模型不再输出大段散文而是完全按JSON结构返回后端直接反序列化拿字段。后续要在学生端展示就直接用reason字段加工成一句话说明。注意这个Prompt里的“参考答案”和“评分标准”必须分开不能把标准藏在答案里否则模型会把写法和参考答案不一致但等价的过程误判成错误。4.4 效果评估怎么才算“批改得准”产品上线前必须有量化指标否则后面没法迭代。我搭建的评估体系分三个维度准确率模型评分与教研老师评分的差值在1分以内视为准确目标大于90%错因标签一致率目标大于80%。稳定性同一份答卷反复批改5次评分的方差要小于0.4。这个指标控制“同卷不同分”的问题。延迟和成本弱结构题p95延迟控制在8秒以内单份卷子的平均批改成本要低于人工成本的40%否则产品没法规模化。稳定性问题最容易在评测时暴露。我记得第一版试跑时同一份作文式简答题连批三次最低给6分最高给9分满分10分方差惊人。原因就是评分标准没有被拆成足够小的子项模型每次“整体感受”不同。把rubric拆细之后方差明显下降后来加入了多次采样取中位数才彻底稳定。5. 实战避坑记录这些坑我踩过你不要再踩5.1 大模型幻觉它真的会“编造”学生的错误最让我后怕的一次是调试主观题批改时大模型给一份写得挺好的解答挑了一堆“错误”说学生第二步漏了一个负号但实际学生写得清清楚楚是模型自己看串行看漏了。还有一次更离谱模型指出学生用了一个“课本里不存在的定理”可那道题根本不需要任何定理正确答案是直接代入计算。那次我意识到如果放任幻觉输出教育Agent会严重误导学生甚至摧毁信任基础。我的补救方案有三层第一层把学生作答和标准答案原文都切成小块在Prompt里用明显的标记分段要求模型“在引用学生原文后才能打分”。第二层在后端做“答案重写校验”模型输出的reason里如果包含可验证的公式或步骤就用规则解析出来和原文比对不一致的直接标记为待人工复核。第三层设置“低置信度拒答”机制。当不同采样次数给出的评分差异超过阈值系统不自动反馈转人工。这个成本值得花宁可让老师多看几份也不能批量输出错误讲解。5.2 批改标准的“松紧漂移”同一道题今天批得严明天批得松这种漂移会让画像更新出现抖动。如果某天模型把“步骤不全”的答案给了满分学生掌握度被虚高更新后面推荐的题目难度就会偏大学生练起来非常受挫。我在排查中发现漂移的主要来源是Prompt中评分标准的描述不够精确。比如“步骤齐全”这个词太模糊。后来我改成给每个评分项配示例评分项“列出正确方程”3分 - 满分示例设所求数为x则(x3)(x-2)0 - 不得分示例设一个数然后写了x(x3)0 - 部分得分方程列式正确但未知数设置不清晰给正反示例比解释性文字有效得多。实测下来加了示例后模型批改的“当天一致性”和“跨天一致性”都明显提升特别是跨天一致性是决定画像能否长期稳定的关键。5.3 冷启动没有数据时怎么开张新学生没有任何作答记录画像全是空的这时候个性化推荐就是无源之水。我采用了两阶段冷启动方案阶段一定位测试。新学生进来先做一份短诊断卷卷子每个知识点只出2道题题目难度覆盖该知识点的基础、中等、偏上三个档位总时间控制在20分钟以内。用这份卷子的结果初始化画像。阶段二试探性学习。初始画像只产生“低置信度的推荐”给新学生推荐默认难度中等、每个节点只推荐3~5题的保守路径。等积累够20道题的作答记录后画像置信度上来再切到正常推荐。冷启动阶段特别忌讳一来就推荐“薄弱点专项”因为诊断卷只有2道题不能确定学生是真的不会还是看错了题。我给每个节点同时标注了“置信度”置信度低于0.5的知识点不会进入推荐列表只会显示在“待观察”区。5.4 延迟与成本轻量模型和重模型的搭配刚开始我所有题型都用同一个大模型批改选择题也走LLM单次调用虽然只要几百毫秒但并发一高成本立刻失控。后面我做了分流改造效果立竿见影整体成本下降了大约70%。现在的策略是四个字按题分级。强结构题本地规则直接判零成本、毫秒级返回。规则处理不了的边界情况才兜底调用模型。半结构题用中等规模的模型只做“公式归一化步骤关键点校验”这类有限推理。弱结构题才用最强大的模型走完整评分流程开启推理过程蒸馏和JSON结构化输出。任何模型调用前都先查缓存。同一道题、同一个学生的近似作答在短时间内可以直接复用上次批改结果并进行简易校验。延迟方面弱结构题如果一次调用需要5秒就不要同步等结果。我的做法是前端先显示“批改中”后台异步评分完成后推送提示。这也是很多教育产品能做到体验稳定的原因——不是模型快了而是交互流程兼容了模型延迟。6. 数据闭环与用户信任Agent越用越准但底线不能碰6.1 学习数据闭环是Agent进化的燃料个性化推荐的本质是对学生状态做预测预测的准确率取决于数据量。每次作答、每次批改反馈、每次路径推荐都要回写到日志里。我的系统会定期离线分析这些日志用来做几件事发现知识图谱的标注错误。如果大量学生在过了“知识点A”之后做“知识点B”依然普遍失败说明A到B的前置关系可能标错了或者A的掌握度阈值设置得太低。发现推荐的偏差。如果某个难度档位的题目推荐率极高但完成率极低说明难度标定或学生能力估计有系统偏差。生成新的训练样本。人工复核过的批改记录里老师修正了模型的评分这些数据积累下来可以微调模型或让规则引擎更完善。我提醒做这块的同行日志埋点一定要在架构初期就做后期补意味着会漏掉大量历史数据非常可惜。6.2 隐私与数据落盘的底线教育场景涉及大量未成年人数据底线非常清楚。我在项目一开始就确定了几个原则学习行为数据必须脱敏存储、学生个人画像数据不能外传用于任何其他业务、家长和老师有权查看系统基于哪些数据给出了推荐数据可解释性。系统里的“学生ID”尽量用系统内部映射ID不直接使用真实姓名、证件号等原始标识。对外输出到分析报表的只有聚合统计不涉及个体明细。6.3 人机协同的边界教育Agent再怎么智能也不能替代老师的最终决定权。我在系统里保留了三个强制人工环节弱结构题评分置信度低时自动转人工、学生连续三次被标记为同一错因时通知老师介入、任何“负面标签”的生成和展示都必须经过老师确认。这不是防御性设计而是产品价值的必要部分——机器负责提效老师负责育人这个边界不能越界。7. 长期迭代方向把这个过程变得更聪明也更有温度这套系统跑通之后我从第一批真实使用数据里得到一些很明确的迭代方向分享给正在做或准备做教育Agent的朋友。方向一是“路径推荐的可解释可视化”。学生端展示的不是一句“为你推荐三道题”而是一张可点击的知识地图标明“你已经掌握哪些节点、正在学习哪些节点、下个节点是什么”。教育场景的推荐越透明学生的主动感越强坚持学习的意愿越高。我观察到的数据显示打开知识地图的学生完成推荐练习的比例比只看文字提示的学生高出不少。方向二是“自适应测试与路径动态调整的深度融合”。第一版是做完一组题再更新画像实时性不够。后续可以做“答题中途实时调整”——比如学生已经连续做对五道中等难度题系统在前端就立刻插入一道挑战题而不必等到本轮练习结束。方向三是“批改反馈的个性化语言风格”。同样的错因外向一点的学生需要鼓励式语气谨慎型学生需要干脆直接的分析。这个不是给Prompt加角色设定那么简单而是需要沉淀一套“反馈风格偏好”数据并不断测试哪种语气对行为转化最有效。最后再分享一个小技巧教育Agent做反馈文案时别用“有些学生”这种模糊主语一定要用“你”。实测下来“你漏掉了这一步里的负号建议检查符号问题”比“部分学生会在这一步漏掉负号”更有效。原因是自动批改本身已经承担了教师的一部分独特性反馈角色反馈语言越直接指向个体行为学生越觉得系统是在帮他而不是在训他。这个细节不大但对学生留存率的影响一点都不小。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →