ARTICLE · 1318662
AI 教师助手怎么落地:备课到学情,六个环节全打通
讲三件事:这套东西能替老师做掉什么、它踩过哪些坑、你自己怎么跑起来。也讲方法:怎么判断一个「AI + 教育」的项目,是真能用还是只在演示时好看。
「你们这套东西,我们学校能用吗?」
这是过去两个月被问得最多的一句话。问的人不一样,担心的点也不一样。
教务主任先问能不能对接学校已有的账号;一线老师只问批改作业准不准、会不会越批越乱;信息中心的老师问得更实在——要不要买服务器、数据传到哪去了。
先给最直接的答案:能用,但它不是一套装好就完事的系统。
它是一套放在你自己机器上的开源代码。要装,要配一个模型接口,要导入你班上的学生名单。装完之后数据存在你自己电脑上,断网也能开。
下面把这六个环节一个一个摊开。你看完再决定值不值得装。
先说清楚:它到底替你做掉哪六件事
一套教学工具最容易骗人的地方,是把「能演示」当成「能用」。
演示的时候点一下,屏幕上出现一份漂亮的教案,台下就点头了。真拿回办公室,老师要的是「明天早上第一节课就能讲」,不是「这份教案看起来很像教案」。
这六件事,是老师每周都要重复干的活:
它替你做掉的事。
备课和批改这两件,是老师时间被吃掉最多的地方。一个初二数学老师带两个班,一周十节课,备课本上至少五节要重写;批改一周两次作业,一次两小时。
按上面这套走,备课从「翻资料拼流程」变成「看一遍改两处」,批改从「逐份看」变成「看有争议的那几份」。
它不是替你上课。 教案是草稿,判分是初判,最后按不按这个讲、给不给这个分,仍然是老师点那一下。
你该怎么用:先只跑「备课」这一环。备课不花你任何额外时间——你本来就要备课,只是换个地方起草。用两周,觉得比以前省事了,再往下接出题和批改。
原项目 2.9 万行,为什么不能直接拿来用
这套东西的底子,来自华为 openJiuwen 生态里的一个开源项目 eduSwarm(Apache-2.0 协议)。它的产品设计很扎实:十一个教学 Agent 各有明确分工,谁调度、谁出题、谁批改、谁做学情,边界画得清楚。
问题在工程。
edu_backend.py,28 595 行,483 个函数 | |
| 7 693 个文件 | |
openjiuwen_src 目录,5 043 个文件、60 MB,被直接拷进仓库 | |
| 41 个 | |
CREATE TABLE IF NOT EXISTS 建库,没有迁移机制 |
一个文件 2.9 万行是什么概念:你打开它,想找一个「批改」的函数,得先滚三分钟;改一处,不知道会碰坏哪里。
没有迁移机制是更麻烦的一条。学校用一年,表结构要加个字段,你得手工连数据库敲 SQL,还得记住上次敲过什么。换个环境部署,数据就搬不过去了。
这一节你可以先跳过。 如果你不写代码,记住一句就够:原项目东西太多、绑得太死,直接装进学校大概率装不上。
我改的五处,是五个判断。
第一,不留「待补充」的坑。 很多 AI 项目给你一套骨架,里面写着 [LLM填充],看着结构完整,实际一句话都没有。这套不这样:要么给真内容,要么进降级模式。没配模型接口时,用内置的教学法模板生成一份能直接上课的教案——而不是给你空白让你自己填。
第二,数字在本地算,模型只负责写建议。 学情里的平均分、及格率、分布,全部由程序算出来;模型拿到的是算好的数字,只写「下一步该做什么」。这样你随时能核对:页面写 67%,你自己拿计算器算也是 67%。反过来,让模型自己算数,它偶尔会算错,而且错得很自然。
第三,批改过的卷子不再重判。 同一份答卷,模型判两次可能是 77 分和 68 分。分数一旦发到学生手上就是承诺,不能自己变。已经判过的就默认复用,要重判,老师自己勾「强制重判」。这不是技术问题,是产品判断。
第四,把「算分」和「存库」分开。 等模型的时间可以同时等,写数据库必须排队。拆开之后,一个班的主观题批改从两分钟压到十几秒。
第五,算总分不再硬凑 100。 原来随便出 3 道题也给你凑成 100 分,结果出现「判断题 30 分、简答题 45 分」这种卷子。现在是按题型给基准分,题少了就是一份小测,不假装是期末卷。
你该怎么用:这五条你能直接搬到自己项目里去。尤其是第二条和第三条——凡是涉及钱的、涉及学生分数的,数字都该本地算、结果都不该回滚。
接上模型之后,暴露了十个问题
这是全文最值得看的一段。不是因为问题多,是因为这些问题全都只有真跑起来才会露出来。
我把原项目重写完之后,一直用内置模板跑,测试全过,看着挺好。接上 DeepSeek 之后,一天之内露出来十个。
挑了五个讲透:
一、模型的答案可能不在选项里,而学生怎么选都是错。
出一道四个选项的单选题,模型给的正确答案是「E」。
原来的逻辑完全信任模型,直接存下来。到判分的时候,四个选项里没有 E,于是全班每一个人都被判错——而且没有任何提示。老师只会觉得「这次怎么都不对」。
现在会校验:答案必须落在这道题自己的选项里。多选只有一个正确答案的,自动降成单选;实在判断不了的,这道题丢掉并记一条日志。宁可少一道题,不能让学生白丢分。
二、分数会自己变。
一份答卷,学生交的时候显示 77.7 分,老师点了「批改全部」之后变成 68.7 分。
原因是模型每次判分有细微差别。我试过把随机性调到最低,还是差 1.5 分。模型本身不完全确定,压参数压不干净。
真正的解法不在模型那边:已经判过的就不许再判。要重判,老师自己勾「强制重判」。
三、删一个教案,接口直接报错。
老师删掉一份教案,如果这份教案已经生成了课件,删除会失败——页面只显示一个错误。
我一开始以为问题在别处:接口返回 500,服务端日志里却一条异常都没有。只能把那段逻辑拆出来,在进程里直接调一次,真正的异常才露出来——数据库里那个关联字段设了「不许为空」,删除规则写的却是「删了就把关联置空」。两条规则打架,一删就撞。
改成允许为空,我以为完事了。再删一次,还是报错。
这次的原因更隐蔽:程序把「没有关联」写成了空字符串。空字符串不等于「没有」——在数据库看来,它仍然是一个指向不存在记录的引用。得把程序里所有读这个字段的地方一起改。
这一类问题,看代码看不出来,必须真的删一次才知道。
四、重复批改,同一份作业在学情里被算了两次。
批改一次生成一份班级报告,批改两次就生成两份,学情汇总时把同一份作业算进去两遍。数字看着没问题,但整个班的平均分是错的。
五、及格率写死 60 分。
总分不固定是 100 之后,这个判断就失效了:一份总分 12 分的小测,第一名也得不了 60 分,及格率永远是 0。
改成按得分率算:拿到满分的六成,就算及格。
剩下的五个:题量少时强行凑 100 分、解析里出现「解析:解析:」、学情里写「平均得分率 0.748」看着像乱码、学生名单只增不减(这一条到现在仍未修,见文末边界节)、批量批改一题一题串行等。
你该怎么用:如果你也在做带判分的工具,把「答案校验」「判过不重判」「重复提交去重」这三条先加上。这三个坑不用踩也能想到,但大多数人是在出过一次事故之后才想到。
它现在实际跑成什么样
不说「效果显著」,说数字。下面这些都能自己复现。
判分质量用一个具体的例子说:一道 20 分的主观题,我准备了五份作答,从完全正确到完全跑题。
得分是 15、10、8、3、0。评语能指出具体的错处,比如「代入 b=-6 时,-b 应该变成 6,你写成了 -6」。
注意这里我没有给百分比。 二十份、五十份卷子的抽样我还没做,没有的东西不写成有。上面这五档能拉开梯度,是我实际看到的;它能不能顶替老师批五十份卷子,得你自己拿班上的卷子试。
你该怎么读这一节:只记两行就够——生成一份教案 6–8 秒,判一份主观题 1–2 秒。其余数字给要算部署成本的人看。
你该怎么把它跑起来
三步。前两步大概二十分钟,第三步看你手速。
第一步,装后端。 装好 Python 之后,在 backend 目录建一个虚拟环境,装依赖,然后启动。第一次启动会自动建库,并建一个账号:teacher1,密码 demo1234。
第二步,配模型。 在 backend/.env 里填三行:接口地址、密钥、模型名。任何兼容 OpenAI 接口的模型都能用,不限于某一家。不填也能跑,只是走内置模板,出来的内容偏模板化但能用。
第三步,装前端,开浏览器。 打开 127.0.0.1:5173,用上面那个账号登录。学生端在同一个地址后面加 #/student,学生不用注册,输入 6 位课堂码就能进。
想先看看长什么样、不想自己动手的,仓库里有一个演示数据脚本,跑一遍会生成两个互不相干的老师、两个班、作业和批改记录,其中还包括一次「老师 A 想打开老师 B 的班级被拒绝」。
它替你做掉的事:你不用碰数据库、不用配反向代理、不用管账号体系。这三样是最花时间也最容易出错的地方,已经写在代码里了。
这些事我们不做,也不承诺
第一,不替你写作业,也不替学生写。 这套工具做的是老师备课和批改的辅助,学生端只用来上课答题、交作业。任何把它改造成「代写作业」的用法,都不在它的设计范围内。
第二,不承诺提分。 没有任何证据表明用一套备课工具能提高考试成绩。它省的是老师的时间,不是学生的分数。这两件事经常被混为一谈。
第三,学生信息只存在你自己的机器上。 默认用本地数据库,不联网、不上传。但有个前提得说清楚:只要你配了外部模型接口,你发给它看的内容就会离开你的电脑。学生姓名、答题内容,都会进到请求里。真要处理真实学生数据,要么用本地部署的模型,要么先把姓名脱敏。
第四,判分只是初判,责任在老师。 主观题的分数是机器给的,老师复核后才算数。学生拿到的分数如果出了错,责任在使用的人,不在工具。这不是免责话术,是这套东西的设计前提——所以界面上每一份主观题卷都可以改分。
第五,它还没有的这些,现在就是没有。 没有导出 Word 教案、没有导出 PPT 课件、没有「一个学校多个年级组」的分层管理、学生名单加上去之后在页面上删不掉(只能改数据库)。这些都在待办里,但没做的我不写成做了。
你该怎么用:把这几条当成你验收的标准。如果哪一条被说成「已支持」而实际没有,那就是有问题。
回到开头那个问题
回到最开始:「你们这套东西,我们学校能用吗?」
答案还是一样——能用,但不是装好就完事。差别在于,现在你知道这「装完」之后要配什么、它替你省的是哪段时间、以及它明确不做什么。
如果你今天下午就想动手,做这三件:
① 先把仓库拉下来,跑一遍演示数据脚本,看这个界面你愿不愿意用;
② 挑你上周刚备的一节课,让它出一份教案,和你自己备的对着看,差在哪;
③ 找一份你班上判过的作业,把主观题喂进去,看它给的初判和你的分数差多少。
前两件半小时内能做完。第三件做完,你就知道自己该不该往下走了。
下载与参与
仓库放在 AtomGit(一个国内的代码托管平台),打开就能看到说明和全部代码:
- AIedu · 教师工作台
—— https://atomgit.com/qzp001/AIedu - 原项目 eduSwarm(Apache-2.0,本项目是对它的重写)
—— https://atomgit.com/agent-best-practices/eduSwarm
打开仓库首页有一个「下载 zip」按钮;没登录会先弹登录框,关掉照样能下载。解压之后,根目录里有一份 README,安装步骤写在最前面。
说明与免责
本文所述工具为教学辅助工具,输出的教案、试题、判分为参考草稿,不构成教学决策依据。 主观题判分由程序与模型给出初判,最终分数以任课教师复核为准。 本文未对判分准确性作任何量化承诺;文中的五档得分是单题样例的实测结果,不构成整体准确性声明。 使用外部模型接口时,提交的内容会经过第三方服务;处理真实学生信息前请先脱敏,并遵守所在地区关于未成年人个人信息保护的规定。 仓库中的学校名称、教师姓名、学生姓名、成绩均为虚构的演示数据。 引用的开源项目信息来自其公开仓库,不代表该项目的开发者对本文的认可、授权或背书。 本文封面图为程序绘制,未使用图像生成模型。
资料来源
一手材料 · 项目仓库与实际运行结果
- AIedu 仓库
(含全部代码、数据库迁移文件、测试用例与说明)—— 本篇「它现在实际跑成什么样」一节的代码规模、依赖数、端口数与安装步骤,均以该仓库实际内容为准。https://atomgit.com/qzp001/AIedu - eduSwarm 原项目仓库
(Apache-2.0)—— 本篇「原项目 2.9 万行」一节的行数(28 595)、函数数(483)、文件数(7 693)、内嵌目录文件数(5 043)、依赖数(41)、端口数(6)、建表数(25),均由该仓库文件实际统计得出。https://atomgit.com/agent-best-practices/eduSwarm - 本地实测记录
—— 生成耗时、24 个测试用例、9 个页面巡检、打包体积,来自本地实际运行,非估算。
二手材料 · 第三方服务公开文档
- DeepSeek 开放平台接口文档
—— 「配模型」一节的接口格式与兼容性说明。https://api-docs.deepseek.com
全帧派AI小派 · 研究撰稿
开源项目人才专项入库通道现已开放。
我们特别欢迎开发并发布过超过 3 项 AI 应用开源项目的人员申请加入生成式人工智能(AIGC)人才库,为此推出20 人的免费入库名额。入库要求为:在知名来源平台(如 atomgit、GitHub 等)发布过项目,且单个项目下载量超过 1000次以上(含 1000),我们不看您开源项目的Star数量,重点看您的项目被下载使用的次数,这也是各行业和企业关心的。
请提供您的开源项目地址供查验,核实后我们与您联系后续入库事宜。















































































