1042 lines
48 KiB
Markdown
1042 lines
48 KiB
Markdown
# 自动评分系统需求说明书
|
||
|
||
| 项 | 内容 |
|
||
| --- | --- |
|
||
| 项目名称 | 自动评分系统(AES, Auto Essay/Experiment Scoring) |
|
||
| 文档类型 | 产品需求说明书 / 软件需求规格说明(PRD + SRS) |
|
||
| 当前版本 | V1.0 |
|
||
| 状态 | 待导师确认 |
|
||
| 编写日期 | 2026-09-18 |
|
||
| 适用范围 | 当前仓库 `AUTO_SCORE` 的下一阶段实现 |
|
||
| 主要读者 | 导师、开发者 |
|
||
|
||
---
|
||
|
||
## 修订记录
|
||
|
||
| 版本 | 日期 | 说明 |
|
||
| --- | --- | --- |
|
||
| V1.0 | 2026-09-18 | 依据导师需求讨论会(`docs/需求说明.mp4`)、语音转写、速记文档与现有 Demo 代码整理首版完整需求 |
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
1. [文档说明](#1-文档说明)
|
||
2. [问题陈述与产品概述](#2-问题陈述与产品概述)
|
||
3. [现状 Demo 与目标差距](#3-现状-demo-与目标差距)
|
||
4. [用户角色与核心流程](#4-用户角色与核心流程)
|
||
5. [信息架构与界面需求](#5-信息架构与界面需求)
|
||
6. [用户故事](#6-用户故事)
|
||
7. [功能需求](#7-功能需求)
|
||
8. [数据需求](#8-数据需求)
|
||
9. [非功能需求](#9-非功能需求)
|
||
10. [验收标准](#10-验收标准)
|
||
11. [分期计划](#11-分期计划)
|
||
12. [待确认问题](#12-待确认问题)
|
||
13. [附录](#13-附录)
|
||
|
||
---
|
||
|
||
## 1. 文档说明
|
||
|
||
### 1.1 目的
|
||
|
||
本文档把导师讨论会上已经拍板的产品形态、交互规则、数据约束和实现边界写成一份可开发、可验收的需求说明,作为后续改 Demo、拆任务和联调的依据。
|
||
|
||
### 1.2 范围
|
||
|
||
本系统面向高校实验课 / 大作业场景:教师布置**一份作业对应一道题**,学生提交实验报告(及可选压缩包附件),系统用大模型按评分标准异步批阅,教师再审核或改分。学生最终看到的成绩以教师结果优先。
|
||
|
||
范围内包括:
|
||
|
||
- 学生端:课程列表、作业列表、作业详情、提交与重传申请、成绩展示
|
||
- 教师端:作业库、出题与评分标准生成、发布、已发布作业管理、批阅、打回、加时、导出
|
||
- 独立批阅进程:从数据库拉取待批记录,读取磁盘上的实验报告文本,调用大模型写回分项成绩
|
||
- 文件校验、上传次数控制、导出包生命周期
|
||
|
||
范围外见 [2.4 非目标](#24-目标与非目标)。
|
||
|
||
### 1.3 需求来源优先级
|
||
|
||
发生冲突时按以下顺序取舍:
|
||
|
||
1. 导师在讨论会中的明确决定(转写中标记为 `[1]`)
|
||
2. 速记文档 `docs/自动评分系统/自动评分系统.md`
|
||
3. 现有 Demo 已实现且本次未要求删除的能力(课程、班级、账号、登录等底座)
|
||
4. 开发侧合理推断(必须写入「待确认问题」,不得当成已拍板需求)
|
||
|
||
转写约定:`[0]` 为学生(缠缍),`[1]` 为导师,`[2]`/`[3]`/`[4]` 为附和、口误或环境音,不作为需求依据。
|
||
|
||
### 1.4 参考资料
|
||
|
||
| 资料 | 位置 / 说明 |
|
||
| --- | --- |
|
||
| 需求讨论录像 | `docs/需求说明.mp4` |
|
||
| 语音转写 | `docs/通用语音识别_需求说明.mp4 (1).txt` |
|
||
| 会议速记 | `docs/自动评分系统/自动评分系统.md` |
|
||
| 现有库结构 | `aes.sql` |
|
||
| 后端 Demo | `AES/`(Spring + Hibernate,端口 8082) |
|
||
| 前端 Demo | `AES-front/`(Vue 3 + Vite) |
|
||
| 现有评分脚本 | `original.py`(按维度调用大模型) |
|
||
| 交互参照 | 教学平台作业发布/批阅页、OJ 作业列表与评测机、知网查重的「一次上传、再传需申请」 |
|
||
| 文档写法参照 | ISO/IEC/IEEE 29148 需求条目可验证原则;项目内 `.cursor/skills/write-spec`、`prd-template`、`meeting-to-spec` |
|
||
|
||
### 1.5 术语与缩写
|
||
|
||
| 术语 | 含义 |
|
||
| --- | --- |
|
||
| 作业 / 题目 | 本系统一份作业只含一道题,不再拆「第 1 题、第 2 题」 |
|
||
| 作业库 | 已出题但尚未发布到班级的题目集合 |
|
||
| 已发布作业 | 已指定班级/学生、截止时间后对学生可见的作业 |
|
||
| 实验报告 | 学生提交的可读文档(docx / doc / pdf,或仅含这些文件的 zip) |
|
||
| 附件 | 与实验报告分开的**一个**压缩包,放代码等材料 |
|
||
| 评分标准 | 发给大模型的结构化评分依据,含维度、分档与注意事项 |
|
||
| 维度 | 评分标准中的一个评分项,如「团队协作」。单份作业最多 10 个 |
|
||
| AI 成绩 | 批阅机根据评分标准算出的分项分与评语,不可被教师覆盖 |
|
||
| 教师成绩 | 教师审核通过或修改后另存的分项分与评语 |
|
||
| 打回 | 教师驳回本次提交,学生需重新申请/重新提交后才能再进入批阅 |
|
||
| 补交 | 过了正式截止时间后,在补交截止时间前仍允许提交 |
|
||
| 加时 | 教师给指定未交学生延长可提交时间 |
|
||
| 申请重传 | 学生已成功提交后,不能直接再传,需教师同意后才能替换文件 |
|
||
| 批阅机 | 独立于 Web 服务的后台进程,类似 OJ 评测机 |
|
||
| P0 / P1 / P2 | 必须有 / 应尽快有 / 本阶段不做但设计上不要堵死 |
|
||
|
||
---
|
||
|
||
## 2. 问题陈述与产品概述
|
||
|
||
### 2.1 问题陈述
|
||
|
||
实验课大作业以实验报告为主,一份作业往往只有一道综合题,却需要按多个维度给分。教师手工拆维度、写分档、逐份批改成本很高;若让学生反复上传,每次调用大模型都会产生费用,且超长报告、超大附件会把批阅质量打下去。
|
||
|
||
当前 Demo 已经能登录、建课、出题、提交、调用大模型出总分,但学生入口不像课程列表、作业状态不够细、评分标准仍靠手工建维度表、AI 分与教师分未按「分项另存」设计、缺少申请重传、补交截止展示、独立批阅机和可靠的附件导出。不补齐这些,系统无法按导师的实际上课方式使用。
|
||
|
||
### 2.2 产品定位
|
||
|
||
本系统不是通用考试平台,也不是多题试卷系统。它是:
|
||
|
||
- 一门课程下的**大作业收发与 AI 辅助批阅工具**
|
||
- 一份作业 = 一道题 + 一份评分标准 + 实验报告(及可选压缩包)
|
||
- 批阅分两步:**大模型先评,教师再确认或改分**
|
||
- 成绩展示以教师结果优先;AI 结果始终保留,便于对照
|
||
|
||
参照对象:
|
||
|
||
- 作业列表、独立评测进程 → OJ
|
||
- 一次上传、再传需申请 → 知网查重
|
||
- 发布对象、已交/未交/待批、批阅页、导出 → 现有教学平台作业模块
|
||
|
||
### 2.3 产品功能总览
|
||
|
||
```text
|
||
学生:登录 → 课程列表 → 某门课的作业列表 → 作业详情(描述 / 上传 / 成绩)
|
||
教师:登录 → 课程列表 → 作业库(出题)或 已发布作业
|
||
出题:标题 + 描述 + 评分标准(可自动生成)
|
||
发布:班级/个人 + 截止 + 是否补交
|
||
批阅:看 AI 分项结果 → 审核通过 或 修改后保存
|
||
批阅机:轮询待批记录 → 读 upload 中的报告文本 → 调大模型 → 写回 AI 分项成绩
|
||
```
|
||
|
||
### 2.4 目标与非目标
|
||
|
||
**目标(本阶段做成后应成立)**
|
||
|
||
- G1. 学生能按「课程 → 作业列表 → 作业详情」完成查看、提交、看分,并在列表上区分五种作业状态。
|
||
- G2. 教师能用「简单要求 + 题目描述」生成可入库的评分标准,手工修改后发布到班级。
|
||
- G3. 每份提交保留 AI 分项成绩与教师分项成绩两套字段;学生看到的是「教师优先」。
|
||
- G4. 实验报告和附件在上传时就被格式、大小、字数、可读性拦住,避免再出现几百页、几百兆的无效提交。
|
||
- G5. 学生不能无限次触发批阅;已成功提交后需「申请重传 + 教师同意」。
|
||
- G6. 批阅不阻塞提交接口,由独立进程异步完成,学生需等待一段时间再查看结果。
|
||
|
||
**非目标(明确不做)**
|
||
|
||
| 不做 | 原因(来自会议) |
|
||
| --- | --- |
|
||
| 一份作业多道题、按人/按题两种批阅模式 | 本课一份作业就是一道题 |
|
||
| 教师批量打分 | 导师明确「现在先不做」 |
|
||
| 未交名单里的「设为已交」「查看」 | 没交就没有可看内容 |
|
||
| 作业统计页 | 导师认为无所谓、不需要 |
|
||
| 发布时站内通知 | 导师当前没有通知需求 |
|
||
| 把图片发给大模型 | 现在只发文字 |
|
||
| 提交后立刻出分 | 明确对标知网:提交后等一段时间 |
|
||
| 学生随意多次上传替换 | 每次批阅都花钱 |
|
||
| 评分维度超过 10 个 | 宽表字段有上限,超过则拒绝保存 |
|
||
| 以大模型返回的总分为准 | 分项加总才作为总分,防止加减不一致被学生质疑 |
|
||
| 管理员审核重传(本阶段) | 先由任课教师同意;人多了以后再说 |
|
||
|
||
---
|
||
|
||
## 3. 现状 Demo 与目标差距
|
||
|
||
现有工程是可用的教学 Demo,不是最终产品。底座(登录、课程、班级、学生、助教、作业库/发布骨架)可复用;下列差距是本需求的改造重点。
|
||
|
||
| 模块 | 现有 Demo | 目标 |
|
||
| --- | --- | --- |
|
||
| 学生首页 | 「点击进入作业 / 加入班级 / 帮助」,作业列表不按课程分层 | 先课程列表,点进一门课才是作业列表 |
|
||
| 学生作业列表 | 作业名、描述、开始/结束时间、单一状态、分页 | 表格展示截止时间、状态(五种)、分数;一门课作业数量通常 ≤ 20,可不分页 |
|
||
| 作业状态 | `未领取 / 已领取 / 待批阅 / 已批阅`,另有查重标红 | `未交 / 待批阅 / 分数(AI) / 分数(教师) / 打回` |
|
||
| 作业详情 | 左:描述+上传;右:教师评语;上传在页面下方 | 描述置顶;右侧放附件区;分数在附件下方;教师端详情不再重复题目描述 |
|
||
| 提交文件 | 单文件,`txt/doc/docx/pdf`,限制 1 个 | 实验报告 + 可选 1 个 zip;系统规定格式;校验可读、字数、大小;是否必交由教师勾选 |
|
||
| 再次上传 | 上传即覆盖,无次数控制 | 默认可交 1 次;再传需申请,教师同意后才能替换 |
|
||
| 补交 | `postproblem.allow` 仅 0/1,无补交截止时间,学生端不展示 | 允许补交时必须有补交截止;列表和详情都要显示 |
|
||
| 评分标准 | `scoringstandard`(维度+权重)+ `scoringrubric`(分档),教师逐条建 | 教师写简要要求,大模型生成带分档的标准;教师可改;入库前校验结构 |
|
||
| AI 成绩存储 | `autoscore` 一个总分 + `autocomment` 拼接评语 | 总分 = 各维度分数之和;每维分数+评语分字段保存,最多 10 维 |
|
||
| 教师批阅 | 详情仍显示题目;教师分会写 `score/comment`,但不是分项复制工作流 | 左 AI 右教师;「修改」复制到右侧;「审核通过」不改分;两套字段互不覆盖 |
|
||
| 批阅触发 | Web 接口 `/autoscore` 同步调 Python | 独立批阅机轮询数据库,类似 OJ 评测机 |
|
||
| 导出附件 | 前端按钮已注释 | 分「导出实验报告」「导出附件」;按 `学号-姓名` 打包;超大则分卷;下载后或 1 天后删除 |
|
||
| 仓库 | `.gitignore` 几乎为空,存在二进制和本地库风险 | 二进制不进 Git;库结构/文档放 `docs/` |
|
||
|
||
现有 Demo 中**本阶段默认保留**的能力:教师/学生/助教登录与账号、课程与班级、作业库与发布骨架、文件落在 `upload/` 而不是数据库、查重相关字段(会议未要求删除,也未作为本轮重点,见待确认问题 Q5)。
|
||
|
||
---
|
||
|
||
## 4. 用户角色与核心流程
|
||
|
||
### 4.1 用户特征
|
||
|
||
| 角色 | 说明 |
|
||
| --- | --- |
|
||
| 学生 | 查看自己所选课程的作业,上传报告,查看状态与成绩 |
|
||
| 教师 | 出题、生成/修改评分标准、发布、批阅、打回、加时、导出。当前导师同时是教师和管理员 |
|
||
| 助教 | Demo 已有班级助教。本轮会议未重定义,暂沿用现有权限,不新增需求 |
|
||
| 管理员 | 账号与系统维护。重传审批本阶段不交给管理员 |
|
||
|
||
### 4.2 学生主流程
|
||
|
||
```text
|
||
进入系统
|
||
→ 课程列表
|
||
→ 某课程的作业列表(看到截止时间、状态、分数)
|
||
→ 作业详情
|
||
描述(置顶)
|
||
右侧:实验报告 / 附件 上传与下载
|
||
附件下方:当前成绩与评语(教师优先,否则 AI)
|
||
→ 首次提交成功后进入「待批阅」
|
||
→ 批阅机完成后变为「分数(AI)」
|
||
→ 教师审核/改分后变为「分数(教师)」
|
||
→ 若被打回:状态为「打回」,需申请重传并获批后才能再交
|
||
```
|
||
|
||
### 4.3 教师主流程
|
||
|
||
```text
|
||
课程列表 → 进入课程
|
||
├─ 作业库:新建 / 编辑题目(标题、描述、评分标准)
|
||
│ 评分标准可自动生成 → 教师修改 → 校验格式 → 入库
|
||
└─ 已发布作业:发布(班级/个人、截止、补交)
|
||
→ 作业汇总(已交 / 待批 / 未交)
|
||
→ 已交名单:批阅 / 打回 / 导出成绩 / 导出文件
|
||
→ 未交名单:加时 / 批量加时 / 导出未交名单
|
||
→ 重传申请:同意后学生可再传一次
|
||
```
|
||
|
||
### 4.4 批阅机流程
|
||
|
||
```text
|
||
循环:
|
||
取出状态=待批阅 且尚未写入 AI 成绩的提交
|
||
从 upload/ 读取实验报告,抽出文字(忽略图片)
|
||
与该题评分标准一并送入大模型
|
||
解析各维度 score / comment
|
||
校验维度数量 ≤ 10
|
||
总分 = Σ 维度分数(不用模型返回的 total)
|
||
写入 AI 字段,学生端显示「分数(AI)」
|
||
```
|
||
|
||
学生提交接口**只负责收文件和建待批记录**,不在请求内同步完成大模型调用。
|
||
|
||
---
|
||
|
||
## 5. 信息架构与界面需求
|
||
|
||
### 5.1 学生端页面
|
||
|
||
#### UI-001 课程列表
|
||
|
||
登录后首先看到课程列表,交互对齐导师展示的课程卡片/列表,而不是现在的「点击进入作业」首页文案。点击一门课程进入该课作业列表。课程卡片上不需要再堆 Demo 首页那大段说明。
|
||
|
||
#### UI-002 作业列表
|
||
|
||
做成类似 OJ 的表格。建议列:
|
||
|
||
| 列 | 内容 |
|
||
| --- | --- |
|
||
| 作业名称 | 标题 |
|
||
| 截止时间 | 正式结束时间 |
|
||
| 补交 | 不允许补交 / 补交截止时间(若允许) |
|
||
| 状态 / 分数 | 见 5.3 状态机 |
|
||
| 操作 | 进入详情 |
|
||
|
||
一门课大作业通常不超过约 20 个,**可以不分页**,一页显示完。若后续作业很多,再加分页,但不是本阶段必须。
|
||
|
||
不要在列表里放很长的作业描述正文。列表信息要足够让学生判断:有没有交、截止何时、现在几分、是 AI 还是教师。
|
||
|
||
#### UI-003 作业详情(学生)
|
||
|
||
页面结构(导师指定):
|
||
|
||
1. **顶部**:作业标题、截止/补交信息、当前状态
|
||
2. **上部主体**:作业描述(学生端必须保留描述,因为要知道做什么)
|
||
3. **右侧**:附件区(实验报告 + 压缩包),可下载已传文件
|
||
4. **附件下方**:分数与评语
|
||
|
||
不需要「第 1 题、第 2 题」题号区。右侧不再放与附件无关的模块。
|
||
|
||
上传控件规则见 FR-S 系列。分数展示规则见 FR-S-007。
|
||
|
||
### 5.2 教师端页面
|
||
|
||
#### UI-010 课程列表
|
||
|
||
教师端进入后也是课程列表,风格可与学生端一致。点进一门课后,分为:
|
||
|
||
- **作业库**
|
||
- **已发布作业**
|
||
|
||
#### UI-011 新建 / 编辑作业(作业库)
|
||
|
||
字段:
|
||
|
||
1. 作业标题
|
||
2. 作业描述(富文本)
|
||
3. 评分标准(富文本或结构化编辑区,支持自动生成)
|
||
4. 提交约束(见 FR-T-010)
|
||
|
||
评分标准区旁边可放「?」帮助,只展示参考示例给教师看;真正发给模型的阶层结构放在系统提示词里,不必全部摊在编辑器上。
|
||
|
||
保存失败时,若结构不合格,**直接告诉教师应按什么格式写**,而不是静默入库。
|
||
|
||
#### UI-012 发布作业
|
||
|
||
- 发布对象:班级多选;也可发到个人;支持全选/取消全选、按姓名搜索
|
||
- 结束时间(正式截止)
|
||
- 是否允许补交;允许则必须填补交截止时间
|
||
- 本阶段不做站内通知,也不做「允许重做几次」(改由申请重传机制控制)
|
||
|
||
#### UI-013 已发布作业列表
|
||
|
||
表格至少显示:
|
||
|
||
- 作业名称、正式截止时间
|
||
- 是否允许补交、补交截止时间(允许时必显示,否则教师自己也记不清)
|
||
- 已交人数、待批人数、未交人数
|
||
- 班级筛选、状态筛选(未开始 / 进行中 / 已结束)、标题搜索
|
||
|
||
#### UI-014 提交名单(已交 / 未交)
|
||
|
||
**已交表**列建议:学号、姓名、班级、提交时间、提交 IP、状态、批阅人(`AI` 或教师姓名)、成绩、操作(批阅、打回)。支持按成绩等列排序。顶部汇总:全部人数、已交、未交。
|
||
|
||
支持按班级筛选。可多选后:
|
||
|
||
- 批量打回
|
||
- 导出成绩
|
||
- 导出实验报告
|
||
- 导出附件
|
||
|
||
不做批量打分,不做按人/按题切换。
|
||
|
||
**未交表**:加时、批量加时、导出未交名单。不提供「设为已交」,不提供「查看」。
|
||
|
||
#### UI-015 批阅详情
|
||
|
||
进入后**不要再展示题目描述**。教师此页只做一件事:看 AI 结果,决定确认还是改。
|
||
|
||
```text
|
||
左:AI 批阅结果(只读) 右:教师打分与评语
|
||
总分(分项之和) 总分(分项之和)
|
||
维度1 分数 / 评语 维度1 分数 / 评语
|
||
维度2 分数 / 评语 维度2 ...
|
||
...
|
||
按钮:审核通过 | 修改 | 保存 | 打回
|
||
```
|
||
|
||
- **审核通过**:不改分,把当前 AI 结果确认为教师侧成绩(另存,不覆盖 AI 字段),学生状态改为「分数(教师)」
|
||
- **修改**:把左侧分数和评语复制到右侧,教师改完点保存
|
||
- **保存**:只写教师字段
|
||
- 教师未操作时,学生看到 AI;教师操作后,学生只看到教师结果
|
||
|
||
### 5.3 作业状态机
|
||
|
||
对学生可见的五种状态(导师最终用「未交」而不是「未完成」):
|
||
|
||
| 状态 | 含义 | 列表展示 |
|
||
| --- | --- | --- |
|
||
| 未交 | 在可交期内(含加时/补交)尚未成功提交 | 文案「未交」 |
|
||
| 待批阅 | 已成功提交,批阅机尚未写出 AI 成绩 | 文案「待批阅」 |
|
||
| 分数(AI) | AI 已出分,教师尚未审核/改分 | 如 `95(AI)` |
|
||
| 分数(教师) | 教师已审核通过或已保存改分 | 如 `98(教师)` |
|
||
| 打回 | 教师打回本次提交 | 文案「打回」 |
|
||
|
||
「未交」和「打回」必须分开,不能合成一个「未完成」。
|
||
|
||
建议内部流转:
|
||
|
||
```text
|
||
未交 --提交成功--> 待批阅 --批阅机完成--> 分数(AI)
|
||
分数(AI) --教师审核通过或保存改分--> 分数(教师)
|
||
分数(AI) 或 分数(教师) --打回--> 打回
|
||
打回 --教师同意重传且学生再次提交成功--> 待批阅
|
||
未交 --教师加时/仍在补交窗--> 仍为未交,但可提交
|
||
过了正式截止且不允许补交(或过了补交截止)且未提交 --> 仍显示未交,但不可提交
|
||
```
|
||
|
||
---
|
||
|
||
## 6. 用户故事
|
||
|
||
### US-001 按课程查看作业
|
||
|
||
**描述:** 作为学生,我想先看到自己的课程,再进入某门课的作业表,以便只关心当前这门课的大作业。
|
||
|
||
**验收:**
|
||
|
||
- [ ] 登录后落地页是课程列表,而不是直接铺开全部作业
|
||
- [ ] 点入课程后只显示该课作业
|
||
- [ ] 作业表能看到截止时间、补交信息、状态/分数
|
||
|
||
### US-002 提交实验报告并立刻知道有没有交上
|
||
|
||
**描述:** 作为学生,我想在作业详情里看清要求、上传报告和附件,并确认文件已经保存且可下载。
|
||
|
||
**验收:**
|
||
|
||
- [ ] 描述在页面上部可见
|
||
- [ ] 上传区在右侧,已传文件可下载
|
||
- [ ] 不满足格式/大小/字数/可读性时提交失败,并给出具体原因
|
||
- [ ] 必交项未上传时不能提交成功
|
||
|
||
### US-003 控制重复批阅成本
|
||
|
||
**描述:** 作为教师,我希望学生不能每改几个字就重新上传一次,以免反复调用大模型产生费用。
|
||
|
||
**验收:**
|
||
|
||
- [ ] 成功提交后,上传入口变为不可用(或仅显示「申请重传」)
|
||
- [ ] 学生提交申请后,教师能在待办/名单中看到
|
||
- [ ] 教师同意前,学生不能再次上传
|
||
- [ ] 教师同意后,学生可再上传并再次进入待批阅
|
||
|
||
### US-004 等待异步出分
|
||
|
||
**描述:** 作为学生,我提交后不必立刻拿到分数,但过一段时间应能看到 AI 分,并知道这是 AI 给的。
|
||
|
||
**验收:**
|
||
|
||
- [ ] 提交成功后状态为「待批阅」,不阻塞在提交按钮上长时间转圈调用模型
|
||
- [ ] AI 完成后列表出现 `分数(AI)`
|
||
- [ ] 教师确认后变为 `分数(教师)`,数值以教师为准
|
||
|
||
### US-005 用简要要求生成评分标准
|
||
|
||
**描述:** 作为教师,我不想手工写「9–10 分什么样、7–8 分什么样」,只想写题目和几条关键要求,让模型生成可修改的标准。
|
||
|
||
**验收:**
|
||
|
||
- [ ] 教师输入题目描述 + 简要评分要求后可一键生成
|
||
- [ ] 生成结果出现在评分标准框中,教师可改
|
||
- [ ] 超过 10 个维度时保存被拒绝并提示
|
||
- [ ] 格式不符合入库结构时,提示应采用的格式,不写入数据库
|
||
|
||
### US-006 对照 AI 结果做人工审核
|
||
|
||
**描述:** 作为教师,我想左右对照 AI 分项结果,一键复制后修改,或直接审核通过,并且不丢掉 AI 原始分。
|
||
|
||
**验收:**
|
||
|
||
- [ ] 批阅页不显示题目正文
|
||
- [ ] 左侧只读 AI 分项,右侧教师可编辑
|
||
- [ ] 「修改」复制左侧到右侧
|
||
- [ ] 「审核通过」不改分数,状态变为教师
|
||
- [ ] 数据库中 AI 字段仍在
|
||
|
||
### US-007 处理未交和打回
|
||
|
||
**描述:** 作为教师,我想给个别学生加时,或把不合格作业打回,并导出未交名单。
|
||
|
||
**验收:**
|
||
|
||
- [ ] 未交名单可单人加时、批量加时
|
||
- [ ] 已交名单可打回、批量打回
|
||
- [ ] 可导出未交名单
|
||
- [ ] 学生端能区分未交与打回
|
||
|
||
### US-008 按学号姓名导出文件
|
||
|
||
**描述:** 作为教师,我想分别导出实验报告和附件,文件按 `学号-姓名` 命名,并在导出很大时拆包。
|
||
|
||
**验收:**
|
||
|
||
- [ ] 两个独立导出入口
|
||
- [ ] zip 内条目名为 `学号-姓名` + 原扩展名(或内层仍为 zip)
|
||
- [ ] 超过约定体积则拆成多份
|
||
- [ ] 完成后提示「请在某时之前下载」;下载完成或到期后删除临时包
|
||
|
||
---
|
||
|
||
## 7. 功能需求
|
||
|
||
优先级:P0 本阶段必须交付;P1 明显提升体验,时间允许应做;P2 明确留到以后。
|
||
|
||
### 7.1 学生端
|
||
|
||
**FR-S-001 课程列表入口**
|
||
|
||
- Description: The system shall 在学生登录后展示其已加入的课程列表,点击课程后进入该课程作业列表。
|
||
- Priority: P0
|
||
- Source: 会议
|
||
|
||
**FR-S-002 作业列表字段**
|
||
|
||
- Description: The system shall 在作业列表中展示作业名称、截止时间、补交信息、状态/分数。不得只显示作业名而把截止与是否已交藏进详情。
|
||
- Priority: P0
|
||
|
||
**FR-S-003 五种状态展示**
|
||
|
||
- Description: The system shall 按 5.3 展示状态。AI 分与教师分不得混成一个「已完成」。
|
||
- Priority: P0
|
||
|
||
**FR-S-004 作业详情布局**
|
||
|
||
- Description: The system shall 将作业描述置于详情页上部,将实验报告与附件上传/下载放在右侧,将分数与评语放在附件区域下方。学生端必须显示作业描述。
|
||
- Priority: P0
|
||
|
||
**FR-S-005 首次提交**
|
||
|
||
- Description: The system shall 在「未过正式截止」或「允许补交且未过补交截止」或「该生仍在加时窗口」时,允许尚未成功提交的学生上传。
|
||
- Priority: P0
|
||
|
||
**FR-S-006 申请重传**
|
||
|
||
- Description: The system shall 在学生已经成功提交之后,禁止直接再次上传。页面提供「申请重传」。教师同意后,该生获得一次新的上传资格。
|
||
- Priority: P0
|
||
- Note: 会议先定「教师同意即可」。不要做成随时覆盖保存。
|
||
|
||
**FR-S-007 成绩与评语优先级**
|
||
|
||
- Description: The system shall 在教师成绩存在时向学生展示教师的总分、分项分和评语;否则展示 AI 的对应内容。不得把两套结果混成一段无法区分来源的文本。
|
||
- Priority: P0
|
||
|
||
**FR-S-008 已传文件下载**
|
||
|
||
- Description: The system shall 允许学生下载自己已成功保存的实验报告和附件。桌面端点击即可下载;需同时保证移动端也能完成下载(会议提到有同学反馈手机上看不到/不能下)。
|
||
- Priority: P0
|
||
|
||
**FR-S-009 提交后等待**
|
||
|
||
- Description: The system shall 在提交成功后将状态置为「待批阅」,不保证实时出分。可提示「批阅需要一段时间,请稍后查看」。
|
||
- Priority: P0
|
||
|
||
### 7.2 教师出题与评分标准
|
||
|
||
**FR-T-001 作业库与已发布分离**
|
||
|
||
- Description: The system shall 将「未发布题目」放在作业库,「已发布实例」放在已发布列表。新建作业默认进入作业库,不自动对学生可见。
|
||
- Priority: P0
|
||
|
||
**FR-T-002 出题必填内容**
|
||
|
||
- Description: The system shall 保存作业时同时持久化:标题、题目描述、发给大模型的评分标准、提交约束。缺评分标准不得发布。
|
||
- Priority: P0
|
||
|
||
**FR-T-003 评分标准自动生成**
|
||
|
||
- Description: The system shall 支持教师点击生成评分标准。发送给大模型的信息固定为三部分:
|
||
|
||
1. 教师写的题目描述
|
||
2. 教师写的简要评分要求(例如「团队合作 10 分,需有 git 提交记录且覆盖三个时间点」)
|
||
3. 系统内置的参考阶层结构 / 输出格式(放在 system prompt,不要求教师手写 JSON)
|
||
|
||
- Priority: P0
|
||
- Note: 会议现场把整篇参考文档塞进提示词后,模型会误当成要重写参考文。提示词必须标明「以下是格式参考,不是题目本身」。
|
||
|
||
**FR-T-004 教师可编辑生成结果**
|
||
|
||
- Description: The system shall 允许教师在入库前和入库后修改评分标准正文(例如补上「个人完成且未用 agent 模拟成员最多 2 分」这类模型没写的规则)。
|
||
- Priority: P0
|
||
|
||
**FR-T-005 结构校验与维度上限**
|
||
|
||
- Description: The system shall 在保存评分标准时解析出维度列表。维度数必须为 1–10;超过 10 个则拒绝保存并提示不允许超过 10 个维度。解析失败则提示应采用的撰写格式(除「注意事项」是否展示给教师外,格式主体都应说明清楚)。
|
||
- Priority: P0
|
||
|
||
**FR-T-006 生成结果必须可入库**
|
||
|
||
- Description: The system shall 保证最终写入数据库的是结构化字段(维度名、满分、分档说明等),而不是只能给人看、不能给批阅机用的自由文本。教师看到的编辑稿可以是 Markdown,但保存前必须能解析。
|
||
- Priority: P0
|
||
|
||
**FR-T-010 提交约束(出题时配置)**
|
||
|
||
教师可为每份作业配置:
|
||
|
||
| 配置项 | 规则 | 谁决定 |
|
||
| --- | --- | --- |
|
||
| 实验报告是否必交 | 勾选则不交报告不能提交 | 教师 |
|
||
| 附件是否必交 | 勾选则不交 zip 不能提交 | 教师 |
|
||
| 报告最少字数 | 按「字」展示给师生;后台按字符统计 | 教师 |
|
||
| 报告最多字数 | 同上,用于拦住把完整 AI 对话+代码贴成几百页的报告 | 教师 |
|
||
| 报告大小上限 | 会议示例 5MB | 教师可配,系统给默认值 |
|
||
| 附件大小上限 | 会议示例 10MB | 教师可配,系统给默认值 |
|
||
|
||
以下**由系统规定,不开放给教师选**:
|
||
|
||
- 实验报告允许:`docx`、`doc`、`pdf`;或 `zip`,但 zip 内只能包含这三种文档
|
||
- 附件允许:一个 `zip`
|
||
- 图片不送给大模型,字数统计也不把图片算进去
|
||
|
||
**FR-T-011 上传校验失败要说人话**
|
||
|
||
- Description: The system shall 在校验失败时拒绝保存,并返回可理解原因,例如:找不到 docx/doc/pdf、文档打不开、zip 内含不允许的文件、超过大小、少于最少字数、超过最多字数。
|
||
- Priority: P0
|
||
- Note: 导师会提供已有的文档/zip 读取脚本;也可用现有能力重写,但行为要一致。
|
||
|
||
### 7.3 发布、补交、加时
|
||
|
||
**FR-P-001 发布对象**
|
||
|
||
- Description: The system shall 支持按班级发布,并支持发给班级中的指定学生;提供全选、取消全选、按姓名搜索。
|
||
- Priority: P0
|
||
|
||
**FR-P-002 补交窗口**
|
||
|
||
- Description: The system shall 在允许补交时要求设置补交截止时间。过了补交截止后,未获加时的学生不能再交。
|
||
- Priority: P0
|
||
|
||
**FR-P-003 补交信息展示**
|
||
|
||
- Description: The system shall 在教师已发布列表、学生作业列表、学生作业详情中展示是否允许补交及补交截止时间。仅写在「修改设置」里但列表不可见,视为不满足。
|
||
- Priority: P0
|
||
|
||
**FR-P-004 加时**
|
||
|
||
- Description: The system shall 允许教师对未交学生单人加时和批量加时。加时只延长该生可提交窗口,不改变整份作业对其他学生的截止时间。
|
||
- Priority: P0
|
||
|
||
### 7.4 教师批阅
|
||
|
||
**FR-R-001 批阅页信息**
|
||
|
||
- Description: The system shall 在批阅详情展示学生学号、姓名、班级、可下载的实验报告与附件、AI 分项结果、教师分项编辑区。不展示题目描述正文。
|
||
- Priority: P0
|
||
|
||
**FR-R-002 AI 与教师字段隔离**
|
||
|
||
- Description: The system shall 将 AI 的总分、各维分数、各维评语与教师的对应字段分开存储。教师保存不得覆盖 AI 字段。
|
||
- Priority: P0
|
||
|
||
**FR-R-003 审核通过与修改**
|
||
|
||
- Description: The system shall 提供「审核通过」:把 AI 结果复制为教师结果(若教师侧尚空)并切换学生可见状态为教师,分数数值不变。提供「修改」:把 AI 结果填入教师编辑区供改。提供「保存」:只提交教师编辑区。
|
||
- Priority: P0
|
||
|
||
**FR-R-004 打回**
|
||
|
||
- Description: The system shall 支持单人打回与已交名单上的批量打回。打回后学生状态为「打回」,在获得重传许可前不能再交。
|
||
- Priority: P0
|
||
|
||
**FR-R-005 名单能力**
|
||
|
||
- Description: The system shall 在已交名单支持排序、班级筛选、导出成绩、分别导出实验报告和附件。不做批量打分。
|
||
- Priority: P0
|
||
|
||
**FR-R-006 未交名单**
|
||
|
||
- Description: The system shall 支持导出未交名单,以及加时。不提供设为已交、不提供查看空提交。
|
||
- Priority: P0
|
||
|
||
**FR-R-007 重传审批**
|
||
|
||
- Description: The system shall 让教师看到学生的重传申请并同意或拒绝。同意后该生可再上传一次。
|
||
- Priority: P0
|
||
|
||
### 7.5 批阅机与大模型
|
||
|
||
**FR-J-001 独立进程**
|
||
|
||
- Description: The system shall 将自动批阅做成独立运行的程序/服务,从数据库逐条取待批记录,而不是在学生提交的 HTTP 请求里同步打完分。行为对齐 OJ 评测机。
|
||
- Priority: P0
|
||
|
||
**FR-J-002 输入**
|
||
|
||
- Description: The system shall 只把实验报告抽取的文字,以及该题评分标准,发给大模型。压缩包附件默认不作为批阅输入(除非后续另开需求)。图片忽略。
|
||
- Priority: P0
|
||
|
||
**FR-J-003 输出与总分**
|
||
|
||
- Description: The system shall 解析每个维度的 score 与 comment。总分必须等于各维度分数之和,即使模型另外返回了 total 也不得采用。
|
||
- Priority: P0
|
||
- Rationale: 分项偶然不准,学生最多质疑某一维;若分项相加不等于总分,会被认为系统不可用。
|
||
|
||
**FR-J-004 结构化落库**
|
||
|
||
- Description: The system shall 将总体评语、各维分数、各维评语写入固定字段(宽表,最多 10 维),而不是只拼一句 `autocomment`。
|
||
- Priority: P0
|
||
|
||
**FR-J-005 失败可重试**
|
||
|
||
- Description: The system shall 在模型失败、解析失败、文件读失败时保留待批阅或标记失败原因,不得写成一个无法解释的 0 分成功结果。失败记录应能再次进入队列。
|
||
- Priority: P1
|
||
|
||
**FR-J-006 提示词职责分离**
|
||
|
||
- Description: The system shall 将系统提示(格式、阶层结构、禁止编造维度)与用户提示(题目+教师要求+报告正文)分开,避免模型把参考格式当成新题目。
|
||
- Priority: P0
|
||
|
||
### 7.6 导出与临时文件
|
||
|
||
**FR-E-001 导出实验报告 / 导出附件**
|
||
|
||
- Description: The system shall 提供两个导出动作。每个学生在包内的文件夹或文件主名为 `学号-姓名`。若学生交的是 docx,则包内为该文档;若交的是 zip,则包内仍是 zip。
|
||
- Priority: P0
|
||
|
||
**FR-E-002 分卷**
|
||
|
||
- Description: The system shall 在导出包过大时拆成多份。单份上限由实现选定,会议建议 500MB 或 1GB,需在实现时写进配置并在界面提示。
|
||
- Priority: P0
|
||
|
||
**FR-E-003 临时包生命周期**
|
||
|
||
- Description: The system shall 在导出完成后提示「请及时下载,将保留到 YYYY-MM-DD HH:mm」。文件被成功下载后删除该临时包;若一直不下载,则在保留期结束后由定时任务删除。建议默认保留 1 天。
|
||
- Priority: P0
|
||
- Note: 不要做成教学平台那种长期可重复下载的导出历史,以免占磁盘。
|
||
|
||
**FR-E-004 导出成绩 / 未交名单**
|
||
|
||
- Description: The system shall 支持导出已交成绩表和未交名单。格式可用 xlsx。
|
||
- Priority: P0
|
||
|
||
### 7.7 仓库与文档约定
|
||
|
||
**FR-D-001 不把无用二进制推进 Git**
|
||
|
||
- Description: The repository shall 排除构建产物、`node_modules`、学生作业、超大媒体、本地密钥。导师要求上传前删掉不必要的二进制以节省空间。
|
||
- Priority: P0
|
||
|
||
**FR-D-002 数据库脚本放文档目录**
|
||
|
||
- Description: The repository shall 将库结构/示例数据作为文档放在 `docs/`(或导师指定的 dock/docs 目录),而不是把运行中的数据库文件直接塞进仓库根。
|
||
- Priority: P0
|
||
- Source: 会议结尾「数据库也上传,放到 docs 目录当文档」
|
||
|
||
---
|
||
|
||
## 8. 数据需求
|
||
|
||
### 8.1 设计原则
|
||
|
||
1. 文件本体放磁盘 `upload/`(或等价目录),数据库只存路径、校验信息和批阅结果。
|
||
2. 评分结果用**宽表分项字段**,不用「一行一个字段名」的 EAV 表。导师认可宽表查询更快;维度上限 10 是为此服务的。
|
||
3. AI 与教师两套结果并存。
|
||
|
||
### 8.2 现有表(可复用底座)
|
||
|
||
`aes.sql` 中已有:`adminusers`、`users`、`course`、`class`、`studentclass`、`assistantclass`、`problem`、`postproblem`、`scoringstandard`、`scoringrubric`、`submitreport`。
|
||
|
||
`submitreport` 现有字段包括:`attachment`、`autoscore`、`autocomment`、`score`、`comment`、`submissionStatus`、`addTime`、查重相关字段等。这套结构**不够**表达:双文件、分项成绩、补交截止、重传申请、打回与未交的区分。
|
||
|
||
### 8.3 需要演进的逻辑数据
|
||
|
||
下列为逻辑模型,不强制一次迁移完成,但 P0 功能必须能存下这些信息。
|
||
|
||
**作业(题目,作业库)**
|
||
|
||
| 字段 | 说明 |
|
||
| --- | --- |
|
||
| id, courseId, teacherId | 归属 |
|
||
| title, description | 标题与富文本描述 |
|
||
| rubricText | 教师可见的评分标准文稿 |
|
||
| rubricParsed | 解析后的维度数组(JSON 可接受) |
|
||
| reportRequired, attachmentRequired | 是否必交 |
|
||
| reportMinChars, reportMaxChars | 字数(对外称「字」) |
|
||
| reportMaxBytes, attachmentMaxBytes | 大小 |
|
||
|
||
**发布实例**
|
||
|
||
| 字段 | 说明 |
|
||
| --- | --- |
|
||
| problemId, classId / 指定学生 | 对象 |
|
||
| endTime | 正式截止 |
|
||
| allowMakeup | 是否允许补交 |
|
||
| makeupEndTime | 补交截止,允许补交时必填 |
|
||
|
||
**评分标准维度(解析结果,≤10)**
|
||
|
||
| 字段 | 说明 |
|
||
| --- | --- |
|
||
| name | 维度名 |
|
||
| maxScore | 该维满分 |
|
||
| bands | 分档说明(9–10 / 7–8 / …) |
|
||
|
||
**提交**
|
||
|
||
| 字段 | 说明 |
|
||
| --- | --- |
|
||
| reportPath, attachmentPath | 两个文件路径 |
|
||
| status | 未交/待批阅/AI/教师/打回 |
|
||
| submitTime, submitIp | 提交元数据 |
|
||
| extraDeadline | 该生加时截止 |
|
||
| reuploadGranted | 是否已获重传许可 |
|
||
|
||
**AI 成绩(不覆盖)**
|
||
|
||
| 字段 | 说明 |
|
||
| --- | --- |
|
||
| aiTotal | Σ aiDimNScore |
|
||
| aiOverallComment | 总体评语 |
|
||
| aiDim1Score, aiDim1Comment … aiDim10Score, aiDim10Comment | 空维留空 |
|
||
|
||
**教师成绩(另存)**
|
||
|
||
| 字段 | 说明 |
|
||
| --- | --- |
|
||
| teacherTotal | Σ teacherDimNScore |
|
||
| teacherOverallComment | 总体评语 |
|
||
| teacherDim1Score, teacherDim1Comment … | 与 AI 对称 |
|
||
| teacherId, reviewedAt | 审核人与时间 |
|
||
|
||
**重传申请**
|
||
|
||
| 字段 | 说明 |
|
||
| --- | --- |
|
||
| studentId, problemId, reason, status | 待审/同意/拒绝 |
|
||
| decidedBy, decidedAt | 教师处理 |
|
||
|
||
**导出任务**
|
||
|
||
| 字段 | 说明 |
|
||
| --- | --- |
|
||
| type | 报告 / 附件 / 成绩 / 未交名单 |
|
||
| filePath, expireAt, downloadedAt | 临时包与生命周期 |
|
||
|
||
### 8.4 总分计算规则
|
||
|
||
```text
|
||
aiTotal = sum(aiDim i Score) i = 1..n, n ≤ 10
|
||
teacherTotal = sum(teacherDim i Score) (教师保存时同样重算,不采用手工填的矛盾总分)
|
||
学生可见总分 = teacherTotal 存在 ? teacherTotal : aiTotal
|
||
```
|
||
|
||
### 8.5 文件存储
|
||
|
||
- 路径建议:`upload/{courseId}/{problemId}/{studentNo}/report.*` 与 `attachment.zip`
|
||
- 不把 docx 二进制写入 MySQL
|
||
- 批阅机只读报告文件的文字层
|
||
|
||
---
|
||
|
||
## 9. 非功能需求
|
||
|
||
**NFR-001 费用可控**
|
||
|
||
每次成功进入批阅队列都应是教师可预期的。默认每生每题 1 次批阅;重传必须经教师同意。这是产品约束,不是优化项。
|
||
|
||
**NFR-002 长报告处理**
|
||
|
||
字数上限的目的,是避免把完整 AI 对话和代码全部贴进报告导致切块后分数异常偏低。统计口径对外叫「字」,实现可用字符数;不要把「字符」这个词直接给师生看。
|
||
|
||
**NFR-003 导出体积**
|
||
|
||
班级附件可能达数 GB。导出必须可分卷,临时包必须可过期删除。单份上限(500MB 或 1GB)做成配置。
|
||
|
||
**NFR-004 批阅时延**
|
||
|
||
允许分钟到更长的排队,不要求提交接口秒级返回分数。需要让状态「待批阅」可被学生理解。
|
||
|
||
**NFR-005 安全**
|
||
|
||
- 密钥、模型 API Key 不得写入仓库(现有 `original.py` 含明文 key,实现时应改为环境变量,旧 key 视为已泄露需轮换)
|
||
- 学生只能访问自己的提交;教师只能访问自己课程/班级
|
||
- 上传文件按白名单解析,拒绝 zip 炸弹和可执行文件(P1,但 zip 内扩展名白名单是 P0)
|
||
|
||
**NFR-006 可用性**
|
||
|
||
校验失败必须返回中文原因。模型失败不得静默成 0 分。
|
||
|
||
**NFR-007 兼容现有 Demo 技术栈**
|
||
|
||
默认继续:前端 Vue 3(AES-front,开发端口现为 3100),后端 Java Spring(AES,8082),MySQL(库名 `aes`),文件本地磁盘。批阅机可用 Python 独立进程,不必塞进 Tomcat 请求线程。
|
||
|
||
**NFR-008 规模假设**
|
||
|
||
本阶段按单教师、若干班级、每课大约不超过 20 个大作业、每班约数百人设计。列表可以不分页。不按多租户 SaaS 设计。
|
||
|
||
---
|
||
|
||
## 10. 验收标准
|
||
|
||
下列条款全部满足,才视为本阶段需求落地。
|
||
|
||
### 10.1 学生端
|
||
|
||
- [ ] 入口为课程列表,作业列表含截止时间、补交信息、五种状态之一
|
||
- [ ] 详情页:描述在上,附件在右,分数在附件下,已传文件可下载
|
||
- [ ] 必交项、格式、大小、字数、可读性均在上传阶段拦截
|
||
- [ ] 成功提交后不能直接再传;申请 → 教师同意 → 才能再传
|
||
- [ ] 教师未审显示 AI 分;教师已审显示教师分
|
||
|
||
### 10.2 教师端
|
||
|
||
- [ ] 作业库新建:标题、描述、可生成并修改的评分标准、提交约束
|
||
- [ ] 维度 > 10 或格式非法时不能保存,并提示正确格式
|
||
- [ ] 发布可选班级/个人,可设补交截止,列表能看到补交信息与已交/待批/未交人数
|
||
- [ ] 批阅页左右分栏,审核通过 / 修改 / 保存行为符合 FR-R-003,AI 字段仍在
|
||
- [ ] 可打回、加时、导出成绩、分别导出报告与附件、导出未交名单
|
||
- [ ] 不做批量打分、不显示题目正文于批阅页、没有作业统计页要求
|
||
|
||
### 10.3 批阅机
|
||
|
||
- [ ] 独立运行,提交后先「待批阅」
|
||
- [ ] 只发送报告文字 + 评分标准
|
||
- [ ] 总分等于分项之和
|
||
- [ ] 分项写入固定字段,最多 10 维
|
||
|
||
### 10.4 导出
|
||
|
||
- [ ] 包内命名 `学号-姓名`
|
||
- [ ] 过大则分卷
|
||
- [ ] 有过期时间提示;下载后或到期后删除
|
||
|
||
---
|
||
|
||
## 11. 分期计划
|
||
|
||
### 里程碑 A(P0 骨架,先能按新信息架构上课)
|
||
|
||
1. 学生课程列表 + 作业列表五种状态 + 详情布局
|
||
2. 双文件上传校验(格式/大小/必交;字数可先做简单版)
|
||
3. 作业库 / 已发布分离,发布含补交截止
|
||
4. 提交后写待批阅,不再在 Web 请求里同步打分
|
||
|
||
### 里程碑 B(P0 批阅闭环)
|
||
|
||
1. 评分标准生成 + 格式校验 + 最多 10 维入库
|
||
2. 独立批阅机 + 分项字段 + 总分重算
|
||
3. 教师批阅页(复制/审核通过/另存)
|
||
4. 申请重传 + 打回 + 加时
|
||
|
||
### 里程碑 C(P0 收尾)
|
||
|
||
1. 导出报告 / 附件分卷 + 临时文件定时删除
|
||
2. 导出成绩、未交名单
|
||
3. 仓库清理与 `docs/` 数据库文档
|
||
4. 字数统计与 zip 内文件可读性的完整校验
|
||
|
||
### 里程碑 D(P1 / P2)
|
||
|
||
- 批阅失败自动重试与教师可见失败原因
|
||
- 助教权限按班级细化
|
||
- 管理员审批重传
|
||
- 查重是否保留或与新状态机整合
|
||
- 更多导出命名格式
|
||
- 通知、统计图表、批量打分
|
||
|
||
建议实现顺序与导师关注点一致:**先改学生详情和列表状态,再改出题/评分标准,再做批阅机与导出**。导出是已交名单里最重的一块,不要堵在最小闭环之前。
|
||
|
||
---
|
||
|
||
## 12. 待确认问题
|
||
|
||
下列问题会议未最终钉死,实现前需向导师确认。未确认前采用「建议默认」。
|
||
|
||
| ID | 问题 | 谁来定 | 建议默认 | 是否阻塞编码 |
|
||
| --- | --- | --- | --- | --- |
|
||
| Q1 | 单份导出包上限取 500MB 还是 1GB | 导师 / 实现 | 配置项,默认 512MB | 否,先做配置 |
|
||
| Q2 | 报告默认大小 5MB、附件 10MB 是否写死为默认值 | 导师 | 作为新建作业默认值,教师可改 | 否 |
|
||
| Q3 | 「字数」按中文词还是 Unicode 字符 | 导师已倾向对外称字、对内字符 | 按字符数,界面写「字」 | 否 |
|
||
| Q4 | 审核通过时,若教师侧已有旧修改,是覆盖还是禁止 | 未讨论 | 已有教师稿时「审核通过」只改状态、不覆盖教师稿 | 否 |
|
||
| Q5 | 现有查重(`plagiarismStatus` 标红)本轮是否保留 | 未讨论 | 暂时保留字段,不在新列表里做主状态 | 否 |
|
||
| Q6 | 压缩包附件是否永远不送进大模型 | 会议按「只发报告文字」 | 不送 | 否 |
|
||
| Q7 | 重传申请是否要填写原因 | 未讨论 | 可选原因,教师列表能看到 | 否 |
|
||
| Q8 | 教师同意重传后,旧 AI 成绩是清空还是归档 | 未讨论 | 归档保留历史,当前成绩回到待批阅 | 建议先定 |
|
||
| Q9 | 批阅机与 Web 是否必须分两个可执行文件 | 会议说「也可以做成独立软件」 | 独立 Python/Java 进程 + 同一数据库 | 否 |
|
||
| Q10 | 学生课程列表 UI 是否必须像素级模仿导师截图 | 会议是「可以做成这个样子」 | 信息结构一致即可,不追视觉稿 | 否 |
|
||
| Q11 | 助教能否批阅、打回、同意重传 | 未重谈 | 沿用 Demo:助教可进作业管理,但重传审批先只开放教师 | 否 |
|
||
| Q12 | 评分标准编辑器用纯 Markdown 还是继续富文本 | 会议是富文本框 | 描述用富文本;标准用 Markdown 便于解析 | 建议先定 |
|
||
|
||
---
|
||
|
||
## 13. 附录
|
||
|
||
### 13.1 会议中的关键原话(意译整理,便于追溯)
|
||
|
||
- 一份作业就是一道题,不要「一、一」那种题号。
|
||
- 学生详情:描述拉到最上面;右边改放附件;分数放在附件下面。
|
||
- 学生不能随意上传,参照知网:传一次后要再传,向老师申请。
|
||
- 作业列表至少要有截止时间、是否已传、分数;状态拆成未交、待批阅、分数(AI)、分数(教师)、打回。
|
||
- 教师出题主要就两块:题目描述、发给大模型的评分标准。
|
||
- 评分标准让模型按分档拆开;教师可改;保存必须符合格式。
|
||
- 维度最多 10 个;用宽表存每维分数和评语。
|
||
- 总分用各维度相加,不用模型给的 total。
|
||
- 实验报告限制最少/最多字数和大小;附件一个 zip 也限制大小;是否必交打勾。
|
||
- 格式由系统规定:docx / doc / pdf / zip,打不开就上传失败。
|
||
- 发布要能选班级和个人,能设补交截止,列表上要能看到补交时间。
|
||
- 批阅页不要再看题目;左 AI 右教师;改了另存,不覆盖 AI。
|
||
- 不要批量打分;要批量打回、导出成绩、分别导出报告和附件。
|
||
- 未交可以加时、批量加时、导出未交名单。
|
||
- 导出按 `学号-姓名`,太大就拆包;下载完或保留一天后删。
|
||
- 批阅做成独立软件,从数据库一条一条取,学生提交后要等一段时间。
|
||
- Git 不要传无用二进制;数据库脚本放到 docs 当文档。
|
||
|
||
### 13.2 评分标准阶层结构(批阅机需要能解析)
|
||
|
||
生成结果应能抽出类似结构(示例,字段名可在实现时固定):
|
||
|
||
```text
|
||
总体:满分 100
|
||
维度:
|
||
- 名称:团队协作
|
||
满分:10
|
||
分档:
|
||
9-10:...
|
||
7-8:...
|
||
0-2:...
|
||
- 名称:...
|
||
注意事项:... (可对教师隐藏或保留,但解析规则要稳定)
|
||
```
|
||
|
||
批阅机输出应对齐为:
|
||
|
||
```text
|
||
total = dim1.score + dim2.score + ...
|
||
overall_comment
|
||
dim1.score, dim1.comment
|
||
dim2.score, dim2.comment
|
||
...
|
||
```
|
||
|
||
这与导师现有本地批阅程序导出的 Excel(总分、总体评语、各维分数、各维评语)一致。
|
||
|
||
### 13.3 与现有代码的主要改造点(给开发用)
|
||
|
||
| 位置 | 现状 | 需求方向 |
|
||
| --- | --- | --- |
|
||
| `AES-front/src/views/user/index.vue` | 宣传式首页 | 改为或跳转到课程列表 |
|
||
| `AES-front/src/views/user/exam-list/index.vue` | 全局作业表 + 分页 | 按课程过滤;状态列改为五种 |
|
||
| `AES-front/src/views/user/report-submit/*` | 左描述+上传,右评语 | 描述置顶,右附件,下分数;申请重传 |
|
||
| `AES-front/src/views/admin/problem/problem-edit.vue` | 维度表 + 权重 | 简要要求 + 生成 + 可编辑文稿 |
|
||
| `AES-front/src/views/admin/problem/problem-post.vue` | 有允许补交,无补交截止 | 补交截止;个人发布 |
|
||
| `AES-front/src/views/admin/problem/problem-review.vue` | 仍显示题目;教师一个总分 | 左右分项;审核通过/修改 |
|
||
| `AES-front/src/views/admin/problem/problem-student.vue` | 导出附件被注释 | 分报告/附件导出 |
|
||
| `AES/.../ProblemController.java` `/autoscore` | 请求内同步评分 | 改为入队;独立进程消费 |
|
||
| `AES/.../ProblemServiceImpl.java` `getAutoScore` | 按旧维度循环调 Python,评语拼接 | 一次(或按维)调用后写宽表;总分重算 |
|
||
| `submitreport` / `postproblem` / `scoringstandard` | 字段不足 | 按第 8 章扩展 |
|
||
| `original.py` | 含明文 API Key | 独立批阅机 + 环境变量 |
|
||
|
||
### 13.4 文档技能与整理方法
|
||
|
||
为持续维护本需求,已在仓库安装:
|
||
|
||
| Skill | 路径 | 用途 |
|
||
| --- | --- | --- |
|
||
| write-spec | `.cursor/skills/write-spec/SKILL.md` | 按 PRD 结构写目标、非目标、用户故事、P0/P1/P2 |
|
||
| prd-template | `.cursor/skills/prd-template/SKILL.md` | 编号需求、shall 句式、IEEE 29148 式章节 |
|
||
| meeting-to-spec | `.cursor/skills/meeting-to-spec/SKILL.md` | 从导师会议转写/速记抽取需求,区分 as-is 与 to-be |
|
||
|
||
本次成稿时:以转写中导师决定为主,用速记补状态列表和数据字段,用 `aes.sql` 与前后端页面做差距表;会议明确「先不做」的能力一律写入非目标,未拍板的写入第 12 章。
|
||
|
||
### 13.5 原文索引
|
||
|
||
- 转写全文:`docs/通用语音识别_需求说明.mp4 (1).txt`
|
||
- 速记:`docs/自动评分系统/自动评分系统.md`
|
||
- 库结构现状:`aes.sql`
|