AI 时代 OJ 设计的 2a:先把现有提示记下来,为后面的分级和两段式诊断攒对照数据。 提示本身的行为不变,发给模型的 prompt 一字未改。 - 迁移 0017 建 ai_hint:模型、prompt 版本、内容、错误、耗时、学生评价; 成功和失败都记(失败率是 AI 悄悄变差时最先动的数)。挂在 submission 上 CASCADE - streamChat 第三个参数改成 { onComplete, onError }:onComplete 的返回值并进 done 事件,提示 id 由此带回前端;班级学情分析那处调用同步改写,行为不变 - 落库失败只记日志,不影响学生拿到提示 - 新增 POST /ai/hint/:id/feedback:只能评自己的提示(别人的一律 404),可以改票 - 前端提示生成完出「有帮助 / 没帮助」,选中的高亮;后端没存上时不出按钮 - 实跑:本地假 LLM 验证成功 / provider 断开 / 缺 AI_KEY 三条路径的落库, 评价接口六种请求,浏览器里按钮出现、改票、重复点不发请求 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>