ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

构建一个 AI 辅导老师里那些无法放进演示的部分

构建一个 AI 辅导老师里那些无法放进演示的部分 构建一个 AI 辅导老师里那些无法放进演示的部分几周前我写过一篇关于拒绝直接给答案的调试辅导老师的文章。它会提问。它要求在给出提示之前学生必须先提出一个假设。它会指出 bug 的大致区域然后让学生自己解决剩下的部分。那篇文章以我打算继续添加的功能清单结尾。这篇就是当我真的继续之后发生的事情。有四个东西上线了。三个在最初的清单上。其中一个——身份认证——结果成了我没预料到的前置条件。事后复盘环节Post-mortem turns学生修好 bug 之后辅导老师还会再问一个问题用你自己的话说这个 bug 为什么会发生学生的回答会被打分——当配置了 API 密钥时通过 LLM 调用评分否则用关键词匹配的启发式方法——并针对 bug 模式存储下来。弱项仪表盘现在不仅显示你撞上差一错误五次还显示五次里有四次你能正确解释原因。第二个数字才是诚实的那个。它区分了提示有帮助和他们碰巧撞对了修复。没有它每一次通过看起来都一样。有了它老师就能看到哪些练习学生真正在学、哪些他们只是靠运气混过去的。启发式评分器并不好。它会读学生的解释里有没有因为和多了一个之类的词看到了就标记为partial。真正的活儿由 LLM 评分器来做——同样的提示词、同样的响应结构。我构建启发式版本是因为我想让整条流水线在没有 API 密钥时也能运转而不是因为我以为它有多准确。跨学生指纹识别Cross-student fingerprinting同样的模式数据跨所有人聚合。如果一个班 75% 的人都撞上差一错误那这不是某个学生的问题——这是一个教学信号。教师仪表盘会把它显示为一条醒目提示off-by-one 出现在 75% 的学生中6/84 名学生在练习 ex-1 上遇到 null-undefined练习 ex-1 在 5 次会话中完成率 20%这些是我测试数据里的真实输出。三句话老师就知道明天该带学生过哪道练习。这个特性有意思的地方在于从任何一个单学生视图里它都是不可见的。学生只能看到自己的模式。老师只能看到聚合。没有人能同时看到两者这意味着班级层面的洞察确实无法从学生看到的内容里重建出来。这就是它值得被构建的原因。实现上是对已经存在的表做三次 SQL 聚合。没有改任何表结构。这就是第一遍就把持久化层做对的回报——第二个特性只是多加一条查询而已。挣扎计时器Struggle timer锁定第一级提示 N 分钟让学生在独立尝试之后才得到提示。按练习配置0 分钟即禁用。计时器生效时的响应是一个带倒计时的柔和拒绝而不是一个错误。服务器返回 200内容是{ requiresStruggle: true, remainingSeconds: 143, ... }UI 渲染一张黄色卡片有效挣扎再给它一点时间。先自己试试你会收获更多。2:23专注时间框架比计时器更重要。这个特性很容易让人感觉是惩罚性的——你还不能要帮助——而我把更多时间花在文案上而不是代码上。最终起作用的版本读起来像教练而不是门卫。有两个设计细节值得点出你没法靠干等来钻空子。计时器要求至少有一次之前的代码提交。如果学生打开练习走开十分钟再回来计时器虽然已经到期但他们仍然没有真正投入。闸门会同时检查这两点。计时器从不禁用按钮。客户端始终允许学生点击请求提示。决定权在服务器。如果你在倒计时中途刷新页面你会看到同样的倒计时——状态在服务器上而不是在 UI 里。这是件小事但对于任何涉及计时的功能来说这是正确的默认值。身份认证——我没预料到的东西最初的应用是一个带四个标签页的单页管理端接口共享一个x-admin-key门槛。这对演示来说没问题。但要让真正的老师使用他们需要独立的登录而且他们的视图需要限定在他们自己的学生范围内。所以我构建了users和auth_sessions表bcrypt 哈希密码12 轮随机的 32 字节会话令牌30 天过期HTTP-only cookieSameSiteLax生产环境 Secure注册 / 登录 / 登出 / me 接口首次启动时从环境变量自动播种的老师账号然后我封了每一条现有路由。调试辅导接口需要认证管理端接口专门需要教师角色。最重要的改变服务器不再信任客户端的studentId。它从会话 cookie 里推导。旧版在顶栏有一个文本框学生输入自己的 ID——这意味着一个恶意的学生只要改改字段就能读到另一个学生的历史。那是一个真实的漏洞而且正是加了认证之后我才看清它有多严重。老师可以通过?asStudentId模拟某个学生来测试但只有老师能而且只能通过中间件。旧的x-admin-key系统没了。那是一个放在.env文件里的共享密钥属于我们的第一个客户是一个我们信任的朋友级别的安全。一旦老师不止一个它就不再可行。这带来了什么一个应用两块仪表盘。学生看到辅导老师和弱项两个标签。老师除了那两个还看到健康度和班级。同一套代码不同的视图由会话上的角色驱动。还在清单上的东西班级分组Cohorts。班级指纹视图目前显示系统里的每个学生。真实的班级是有边界的。建一个带教师字段的cohorts表并让每个聚合都按它过滤。这是让多教师部署变得有意义的那块拼图。练习创作。挣扎计时器的配置目前是一张硬编码的 TypeScript 映射。当有理由去构建的时候它应该变成一张带真正管理界面的exercises表。部署。目前还是localhost:3001。一台 VPS、一个 Caddy、一个域名是一个周末就能完成的项目。LLM 密钥。回退路径能用但真正让这个项目存在的是能回应学生具体假设和代码的 LLM 生成提示。这是下一个要开启的东西。当前状态代码在 github.com/janabi54/codeteach-debug-tutor。大约 3,500 行 TypeScript 和原生 JS。23 个回归测试。所有数据用 SQLite 持久化。端到端可运行包括登录。其中没有任何花哨的东西。大多数是演示不需要的那种无聊特性用户、会话、迁移、聚合。正是这些工作把原型变成老师可能真正会用的东西也正是这些工作写起来不有趣。相关阅读本站推荐如何在 Windows 11/10 中关闭屏幕键盘4 种方法 如何在 Windows 11/10 中启用或禁用睡眠模式 如何在 Windows 11/10 中打开控制面板5 种方法如果你也在做 AI 应用开发欢迎参考本站的 IT 教程文章一起把技术学扎实。
返回列表