用了一段时间,有两个需求越来越强烈:一是学生提交后不知道自己答得怎么样,二是课后我要手动翻数据才能整理共性问题。这次趁着端午假期,给它加了两个 AI 功能,今天来聊聊做了什么、怎么做的。
在编辑任务界面,我加了两个开关,分别控制两项功能:

开关设计的好处是按需使用——不想要 AI 的任务,直接关掉,不影响原有的轻量采集流程。
开启学生快捷登录后,学生用老师分享的链接(http://[服务器]/s/[任务ID])打开页面,会先看到一个紫色渐变的登录界面,输入姓名和座位号后才能进入答题页。

登录后,身份信息会被存在浏览器的 sessionStorage 里,并通过请求头自动附加到每一次数据提交。老师在后台看到的数据里,每条记录都会带上对应学生的姓名和座位号,不再是一堆匿名数据。
开启 AI 课堂分析后,学生提交答题数据后,页面右下角会出现一个"AI 评价"的悬浮按钮。按钮有意做得大一些、颜色明显,因为实测发现按钮太小学生完全不会去点。
点击按钮,会弹出一个评价弹窗,里面是 AI 针对这位同学这次提交的个性化分析:答对了哪些、哪里还有欠缺、建议怎么复习……关闭弹窗后,悬浮按钮重新出现在右下角,方便随时再回来看。
同一次提交只请求一次 AI,关闭后再点直接读缓存;如果学生重新提交了新答案,下次点击才会重新生成。这样避免了每次开弹窗都消耗 API 调用。

教师使用单独的链接(http://[服务器]/t/[任务ID])打开教师页面,可以看到左侧学生提交列表,右侧是数据展示。
同样在右下角,有一个橙色渐变的"AI 教学建议"悬浮按钮,和学生端的紫色按钮区分开,一眼就知道是教师功能。

点击后,AI 会读取全班所有已提交的数据,汇总分析,给出:
弹窗里还有"重新生成"按钮,如果又有新同学提交了数据,可以手动刷新建议内容。

这两个功能的底层逻辑并不复杂,核心拆解如下:
学生登录后,姓名和座位号存入浏览器sessionStorage。通过全局拦截fetch和XMLHttpRequest,把身份信息注入每次请求头(X-Student-Name、X-Seat-Number),后端接收时 URL 解码写入数据库。
后端拿到学生的提交数据后,调用 AI 接口(可配置为 DeepSeek、通义千问等),把题目 + 学生答案 + 提示词打包发送,返回评价文本存入数据库。学生端通过GET /api/[任务ID]/evaluation/[提交ID]获取;如果还没生成,就用POST触发生成。
教师端拉取该任务下全部提交数据,打包成结构化文本发给 AI,提示词要求输出整体分析和分层建议,限制在 200 字以内(避免输出冗长废话)。
var AI_ENABLED = true === 'true'——JS 严格相等类型不同,始终为false,导致功能始终不显示。改成直接输出 JS 布尔值var AI_ENABLED = true才解决。调了两天的玄学 bug,最后发现是一个引号的问题……现在是本地部署,局域网内使用,适合班级内网课堂场景。AI 接口需要自己配置 key,不同模型效果差异比较大,DeepSeek 目前用下来评价内容比较有针对性。
后续想探索的方向:
这个工具还在持续迭代,目前主要是自己课堂在用。有类似需求的老师欢迎交流,也欢迎在评论区告诉我你最想要哪个功能。
— 互动时间 —
公开课不慌!QuickForm这两大新功能,让你从在线调试到本地采集一步到位 |

QuickForm使用合集 (解决数据从学生端到教师监控端的问题)
AI赋能教学(不定期分享AI赋能全科内容) 软件\工具推荐(不定期推荐好用工具) 国家平台“用AI”工具测试篇(分享普通老师AI平台的使用心得) 关于我 
👩🏫 公办初中老师,教龄九年,在这个号里,我会分享: 关注我,一起备课,一起成长~ 📚 课堂设计与反思 😅 AI赋能全科教学工具 👀 分享新课标教案



夜雨聆风