Skip to content

主观题阅卷教师模型 —— 项目执行计划 ​

本计划以《主观题阅卷教师模型项目计划》(v4 技术方案)为编制依据,将方案中的架构设计、算法路线与里程碑转化为可执行、可检查、可验收的工程计划。

文档定位:技术方案回答"做什么、怎么做";本执行计划回答"谁在什么时候做、产出什么、怎么算做完"。

项内容
项目名称主观题阅卷教师模型(RubricSpan)
计划版本v1.1(含执行结果注记)
编制依据《主观题阅卷教师模型项目计划》v4(技术方案已升版 v5,按建成实况修订)
总工期原计划 13 周 + 1 周缓冲;实际执行 2026-08-21 ~ 08-24 连续完成
运行环境基线本地 GPU + CPU 推理;训练用 Python,后端 Rust(Cargo 工作区),前端 Node.js(具体版本见各组件 README)
执行状态✅ 已完结:M0–M8 全部完成(M8 为追加里程碑:推理栈去 Python 化),系统级 ScoreCorr 0.959 / 等价给分率 97.4% 达标

目录 ​

  1. 计划概述
  2. 角色与职责
  3. 总体里程碑排期
  4. 阶段任务分解(WBS)
  5. 接口与数据契约冻结计划
  6. 仓库结构与配置管理
  7. 质量保障与验收方案
  8. 风险登记册
  9. 关键假设与外部依赖
  10. 完成定义(DoD)
  11. 交付物总清单

1. 计划概述 ​

1.1 项目目标(摘自技术方案,作为验收主线) ​

构建一套完整的本地化主观题阅卷系统,验收时须同时满足以下七项:

  1. 可解释评分:给出分数的同时标注学生答案中命中每个得分点的原文片段;
  2. 本地可运行:推理在本地 GPU / 普通 PC 完成,评分链路不依赖在线大模型;
  3. 工程可交付:前端、后端(Rust 在线 + WASM 离线两套)、训练流水线、试卷文本识别四大部分齐备;
  4. 数据自供给:无人工标注条件下,用大模型(OpenAI 兼容接口)自动生成训练标签;
  5. 纸质试卷可接入:试卷扫描件/照片经 RapidOCR 自动识别为中文文本后进入评分流程;
  6. 同义答案可识别:等价表述扩展 + 语义相似度兜底,正确处理"戊戌变法/百日维新/维新运动"类答案;
  7. 标准答案自然语言输入:教师粘贴自然语言标准答案,系统自动解析为结构化评分配置。

达成情况(2026-08-24):① ✅ ② ✅ ③ ✅ ④ ✅ ⑤ △(OCR 已暂停,/api/ocr 返回 501) ⑥ ✅ ⑦ ✅。

1.2 范围界定 ​

范围内(本计划覆盖):

工作流内容
数据与打标数据集获取、合成答卷生成、大模型打标流水线、对齐后处理
模型训练MRC 抽取模型(mengzi-bert-base)训练、相似度模型(text2vec-base-chinese)微调、ONNX 导出与量化
OCR 集成RapidOCR 本地推理、作答区定位、/api/ocr 服务化(实际:M3 贯通,M8 随去 Python 化暂停)
后端 · 在线Rust(Axum)HTTP 服务、GPU 推理引擎、评分调度、SQLite 持久化、标准答案解析接口
后端 · 离线轻量模型 WASM 化、浏览器端单题离线评分演示
前端Next.js 15 阅卷工作台、标准答案录入/解析预览、OCR 预览、批量阅卷与导出、在线/离线切换
联调与评估全链路联调、指标评估、量化优化、打包交付

范围外(明确不做,避免范围蔓延):

  • 原生移动端应用;
  • 多租户/账号权限体系(单用户本地使用为基线);
  • 客观题(选择/填空自动判分);
  • 手写体识别模型的自训练(使用 RapidOCR 现成模型 + 置信度过滤 + 人工核对兜底);
  • 分布式多机部署。

1.3 总体策略 ​

  • 契约先行:OpenAPI 接口契约、评分配置 JSON Schema、模型产物目录规范在第 1–2 周冻结,前后端与训练侧并行开发;
  • 纵向切片验证:每个阶段结束前跑通一条"最小端到端链路"(哪怕用假数据),避免最后一周才集成;
  • 双后端共模型:Rust 在线与 WASM 离线共用同一套 ONNX 模型文件与评分配置,保证两端评分结果一致;
  • 评估贯穿:评估脚本在打标阶段就建立,每个模型迭代都能一键复算指标。

2. 角色与职责 ​

项目为小型团队/个人项目,按角色维度划分职责,一人可兼任多角色;若为单人开发,按下表顺序串行推进即可(排期已按单人全职估算)。

角色职责对应阶段
项目负责人(PM)计划维护、里程碑评审、风险跟踪、对外沟通全程
数据与算法工程师数据集获取、打标流水线、对齐后处理、训练数据构建M0–M2
模型训练工程师MRC/相似度模型训练、调参、导出、量化M2
OCR 集成工程师RapidOCR 验证与集成、作答区模板、/api/ocrM0(验证)、M3(集成)
后端工程师(Rust)Axum 服务、推理引擎、评分逻辑、SQLite、OpenAPI 实现M4
前端工程师Next.js 应用、阅卷工作台、对接后端、WASM 离线入口M5、M6
测试与评估工程师评估脚本、指标复算、端到端用例、bad case 收集M2 起,M7 收口

协作机制:

  • 每阶段结束做一次里程碑评审(检查出口标准是否达成,未达成则决定顺延/裁剪范围);
  • 关键契约(接口/Schema/产物格式)变更须记录在 docs/quality/changelog-contracts.md;
  • bad case 统一登记到 docs/quality/bad-cases.md,作为迭代闭环输入(技术方案 §16)。

3. 总体里程碑排期 ​

3.1 里程碑总表 ​

里程碑相对周阶段名称关键交付里程碑门(不达成不进入下一阶段)实际结果
M0第 1–2 周数据与环境数据集到位、全栈环境可用、RapidOCR 本地推理验证通过、契约草案冻结本地 GPU 上 Python 训练/RapidOCR 推理各跑通 1 个样例✅ tag m0-env(北大数据集未获批,R7 替代数据集生效)
M1第 3–4 周大模型打标打标流水线、3000+ 条对齐后训练数据对齐成功率 > 90%,抽检标签质量合格✅ 4287 条、点级对齐 99.0%、semantic 占比 76.7%(tag m1-labeling)
M2第 5–6 周模型训练与导出MRC 模型 + 相似度模型、ONNX 导出、评估报告EM > 65%、Score Correlation > 0.85、ONNX 可加载推理✅ FP32+INT8 双模型交付;Point-Acc .894 / 等价 .943 达标;EM/F1/Corr 模型级未达→评审裁剪至迭代闭环
M3第 7 周OCR 集成/api/ocr 可用、图片→文本→评分链路贯通印刷体识别准确率 > 95%(样张测试)✅ 当日贯通(后于 M8 随运行时移除暂停)
M4第 8–9 周Rust 在线后端Axum 服务 + 推理 + 评分全流程 + 标准答案解析接口OpenAPI 契约测试全过,单题推理 < 500ms✅ 服务可用(推理栈后于 M8 定稿为 ort 原生)
M5第 10–11 周前端开发阅卷工作台 + 标准答案录入/解析 + OCR 预览 + 导出批量阅卷端到端演示通过✅ 构建通过,工作台联调可用
M6第 12 周WASM 离线备选轻量模型 WASM 构建产物 + 浏览器离线单题演示无网络环境下离线评分成功✅ onnxruntime-web + Rust 评分核心,断网演示通过
M7第 13 周联调评估与交付全链路评估报告、量化优化、打包交付§13 指标体系全项达标(或经评审裁剪)✅ ScoreCorr .959 / 等价给分率 .974 达标;Point-Acc .790 经评审转入仲裁闭环
M8(追加)—推理栈去 Python 化ort + tokenizers 原生推理并入网关,删除 Python 运行时金标对拍逐位一致且 e2e 指标零回退✅ 53 MRC + 180 相似度逐位一致;单一 Rust 二进制交付;OCR 转 501

实际执行:项目于 2026-08-21 启动、2026-08-24 收官,M0–M8 连续推进(AI 辅助高强度开发),远快于上表的周级排期;"相对周"栏保留作为编制基线。各阶段评审记录见文档站「里程碑评审」分组。

3.2 依赖关系(关键路径) ​

数据集获取 ─→ 打标流水线 ─→ 训练数据 ─→ 模型训练 ─→ ONNX 导出 ─┐
                                                              ├─→ Rust 后端 ─→ 前端对接 ─→ 联调交付
环境搭建 ─→ RapidOCR 验证 ─────────────→ OCR 集成 ────────────┘
                                  契约冻结(M0 末)─→ 前后端并行开发
模型训练产物 ─→ 量化/轻量模型 ─→ WASM 构建(M6,可与 M5 并行)

关键路径:数据集 → 打标 → 训练 → ONNX 导出 → Rust 推理引擎 → 联调。此链路上任何延误直接顺延交付日,缓冲周(§3.3)优先用于吸收此链路风险。

3.3 缓冲策略 ​

  • 总工期外预留 1 周缓冲(第 14 周),仅用于关键路径延误吸收与 M7 评估未达标项的补救;
  • 每个里程碑评审时检查"剩余缓冲 / 剩余工作量",若缓冲消耗超过 50% 而阶段未过半,触发范围裁剪评审(优先裁剪顺序:WASM 离线演示 → 统计看板 → 批量导出高级筛选)。

4. 阶段任务分解(WBS) ​

工作量按单人全职估算,单位为人日(PD)。每任务标注产出物;验收细节见各阶段出口标准。

4.1 M0 数据与环境(第 1–2 周,约 10 PD) ​

目标:数据到位、环境可用、契约草案冻结。

编号任务产出物估算
M0-1注册并申请北京大学中学文科简答题评测数据集与题库数据集文件入库 data/raw/1 PD
M0-2下载 SAS-Bench(HF)、CMRC 2018(GitHub)、CESA/ASAP-ZH同上 + 数据集清单 data/README.md1 PD
M0-3搭建 Python 训练环境(PyTorch + CUDA 验证)train/env.md 环境记录1 PD
M0-4搭建 Rust 工具链 + Axum hello-world 服务可运行的骨架服务0.5 PD
M0-5搭建 Node.js / Next.js 前端骨架前端骨架仓库目录0.5 PD
M0-6RapidOCR 本地安装,GPU 推理验证(样张测试)验证报告(含速度/准确率初测)1.5 PD
M0-7确定大模型打标供应商,打通 OpenAI 兼容接口调用可调用的打标客户端 + 配额记录1 PD
M0-8契约草案冻结:OpenAPI 接口、评分配置 JSON Schema、模型产物目录规范contracts/ 目录(见 §5)2.5 PD
M0-9仓库结构、分支策略、CI 冒烟(构建通过即可)初始化仓库规范落地1 PD

出口标准:

  • [x] 五个数据源中至少 3 个实际可用(北大两类未获批,R7 替代主线:SAS-Bench/SAS-Datasets/CMRC 2018/DRCD/CESA);
  • [x] 本地 GPU 上 PyTorch 训练样例与 RapidOCR 推理样例各跑通一次;
  • [x] contracts/ 下契约文档经评审冻结(实际五份,含 labeling-schema.json、ocr-output.schema.json);
  • [x] 大模型打标接口单次调用成功且成本可估算。

实际执行(PASS · tag m0-env):冒烟记录见 train/env.md(PyTorch CUDA 20 步训练、RapidOCR GPU 推理、LLM 打标接口三项全过)。

4.2 M1 大模型打标(第 3–4 周,约 10 PD) ​

目标:产出 3000+ 条对齐后的高质量训练数据,含同义命中(semantic)样本。

编号任务产出物估算
M1-1设计打标 Prompt(阅卷教师角色、严格 JSON、hit/hit_type/extracted_span/confidence/partial_credit)Prompt 模板 + 少样本示例1.5 PD
M1-2合成答卷生成:大模型按"优秀/良好/及格/不及格"四档生成学生答案(含同义表述与得分点遗漏设计)合成答卷池2 PD
M1-3批量打标流水线(OpenAI 兼容 SDK、限速重试、结果落盘)打标脚本 + 原始标注库2.5 PD
M1-4自一致性校验(高价值样本多温度多次调用、多数投票)校验逻辑 + 一致性报告1.5 PD
M1-5对齐后处理:字符级起止位置映射(精确→去标点模糊→最长公共子串兜底)对齐模块 + 成功率统计2 PD
M1-6质量控制:过滤低置信/超长 span 异常;人工抽检 5%质检报告 + 最终训练集1.5 PD
M1-7训练数据构建:MRC 五元组(含 20% 无答案负样本、semantic 样本 span 对齐)+ 相似度句子对data/processed/ 下两类数据集1.5 PD

出口标准:

  • [x] 对齐成功样本 ≥ 3000 条,对齐成功率 > 90%(实际 4287 条、点级 99.0%);
  • [x] hit_type=semantic 样本占比 ≥ 15%(实际 76.7%,真实答卷以同义转述为主);
  • [x] 人工抽检 5% 标签,可接受率 ≥ 90%(以代理证据放行:LLM 判分 vs SAS-Bench 专家总分 Pearson 0.897;自一致性投票一致率 96.3%);
  • [x] 训练/验证/测试集划分固定并记录随机种子(seed=42,按题分组防泄漏)。

实际执行(PASS · tag m1-labeling):4305 输入样本 QC 保留率 99.6%;多端点 fallback 队列(7 端点)支撑全程约 30M tokens,三次中断断点续跑零重复消费;产出 MRC 五元组 22589 条 + 相似度句子对 67251 对 + 346 题评分配置。

4.3 M2 模型训练与导出(第 5–6 周,约 10 PD) ​

目标:训练达标的 MRC 与相似度模型,导出 ONNX 并验证可加载。

编号任务产出物估算
M2-1CMRC 2018 预训练桥接(可选加速收敛)桥接训练脚本与权重1.5 PD
M2-2MRC 模型微调(mengzi-bert-base;lr 2e-5~3e-5、batch 16–32、epoch 3–5、max_len 384、早停;显存不足时降 batch+梯度累积)微调权重 + 训练日志3 PD
M2-3相似度模型微调(text2vec-base-chinese + CosineSimilarityLoss,强化专有名词同义判别)微调权重 + 训练日志2 PD
M2-4评估脚本:EM / Token-F1 / Point-wise Acc / Score Correlation / 等价命中率一键评估脚本 + 指标报告2 PD
M2-5ONNX 导出(MRC + 相似度)+ 分词器文件导出 + 阈值配置models/ 产物目录1.5 PD
M2-6ONNX 与 PyTorch 输出一致性校验(同输入比对)一致性校验记录1 PD
M2-7INT8 量化试验(精度损失 < 1% 验证)量化模型 + 对比报告1.5 PD

出口标准(技术方案 §13 指标):

  • [ ] EM > 65%,Token-level F1 > 80%(⚠️ 实测 EM 0.482 / F1 0.758 未达,经评审裁剪至迭代闭环);
  • [x] Point-wise Accuracy > 85%(实测 0.894),Score Correlation(Pearson)> 0.85(模型级 0.765 裁剪;系统级后于 M7 达 0.959);
  • [x] 等价命中率 > 80%(实测 0.943);
  • [x] ONNX 模型加载推理成功且与 PyTorch 输出误差在容差内(max_abs_logit_diff=5.2e-5 < 1e-3)。

实际执行(PASS · 带裁剪):MRC 与相似度均交付 FP32+INT8 双 ONNX;INT8 精度损失 < 1%;相似度按最优验证快照导出交付。评审确认「有答判定 + 别名召回」主链路可用,精确跨度类指标转入迭代闭环。

4.4 M3 OCR 集成(第 7 周,约 5 PD) ​

目标:图片阅卷链路贯通,/api/ocr 契约可用。

编号任务产出物估算
M3-1作答区定位方案实现:坐标模板配置 + 无版式试卷按题号软切分作答区过滤模块1.5 PD
M3-2OCR 流水线封装:预处理(灰度/归一/去噪)→ 检测 → 过滤 → 识别 → 按阅读顺序拼接流水线模块1.5 PD
M3-3/api/ocr 服务实现(输入图片,输出 §8.4 契约 JSON,含 confidence/lines/low_confidence)接口 + 测试用例1.5 PD
M3-4低置信处理:识别存疑片段标注 + 提示语链路前端提示所需的字段落地0.5 PD
M3-5OCR 准确率评测:印刷体/手写体样张分别统计字符级准确率评测报告1 PD

出口标准:

  • [x] 印刷体识别准确率 > 95%(样张集);手写体场景未达验收即遇 M8 变更;
  • [x] 图片 → OCR 文本 → 评分成功返回一次完整结果;
  • [x] 单页推理延迟记录在案。

实际执行(PASS,后经 M8 变更):图片 → 文本 → 评分链路当日贯通;M8 去 Python 化时该链路随 Python 运行时移除而暂停,/api/ocr 现返回 501(恢复路径:ONNX 原生重实现)。

4.5 M4 Rust 在线后端(第 8–9 周,约 10 PD) ​

目标:生产首选后端可用——Axum 服务 + GPU 推理 + 混合评分全流程 + 标准答案解析。

编号任务产出物估算
M4-1Axum 服务骨架 + SQLite(试题/答卷/结果/OCR 任务表)服务骨架 + 建表迁移1.5 PD
M4-2推理引擎加载 MRC 模型本地推理(原计划 tch-rs/Candle 或 ONNX Runtime;实际落地为 ort + tokenizers 原生实现,M8 定稿)推理引擎模块3 PD
M4-3混合评分逻辑:MRC 多候选抽取(标准表述 + aliases 遍历)→ 置信度判定 → 相似度兜底 → 加权汇总评分引擎 + 单元测试2.5 PD
M4-4标准答案解析接口 /api/standard-answer/parse(调 OpenAI 兼容接口 + JSON Schema 校验 + 缓存落盘)接口 + 校验 + 降级路径1.5 PD
M4-5RapidOCR 集成(ONNX Runtime Rust 绑定或内嵌 Python 进程/RPC,二选一并记录决策)OCR 调用层1.5 PD
M4-6评分任务调度:批量答卷异步任务池、图片先 OCR 再评分、结果回写调度模块1.5 PD
M4-7全部 REST 接口按 OpenAPI 契约实现(§11.4 七组接口)+ 契约测试接口 + 自动化契约测试2.5 PD
M4-8性能验证:单题端到端 < 500ms(GPU),批量并发压测性能报告1 PD

出口标准:

  • [x] OpenAPI 契约测试 100% 通过;
  • [ ] 单题评分延迟 < 500ms(含 aliases 多候选抽取)(M8 重构后待回归复测);
  • [x] 标准答案解析 → 教师确认 → 缓存 → 评分读取的完整链路演示通过;
  • [x] 评分结果包含逐点明细 + 总分 + 评级。

实际执行(PASS):Axum + SQLite + 混合评分引擎 + 标准答案解析接口可用;推理引擎最初以内嵌 Python 运行时承载,后在 R10 预案方向上定稿——M8 以 ort 原生实现替换并删除运行时。

4.6 M5 前端开发(第 10–11 周,约 10 PD) ​

目标:阅卷工作台及全部功能模块可用,与后端联调通过。

编号任务产出物估算
M5-1工程初始化:Next.js 15 + Radix UI + Tailwind + TanStack Query + API 客户端前端工程1.5 PD
M5-2试题管理模块(录入/导入、自然语言标准答案录入入口)页面 + 联调1.5 PD
M5-3标准答案解析流程页:提交 → 预览结构化 JSON → 编辑/确认/保存;失败降级半结构化编辑页面 + 联调2 PD
M5-4试卷/答卷上传:文本单份/批量(Excel/JSON/文本)+ 图片上传触发 OCR页面 + 联调1.5 PD
M5-5OCR 预览页:识别文本展示、低置信提示、人工编辑确认页面 + 联调1 PD
M5-6阅卷工作台(核心页):三栏布局、命中片段高亮、悬停查看得分点与置信度、语义匹配标签、逐点明细卡片、总分汇总页面 + 联调3.5 PD
M5-7结果导出(Excel/JSON、按班级/题目筛选)+ 统计看板(分数分布、得分点命中率)页面 + 联调2 PD
M5-8在线/离线模式切换入口(离线分支先占位,M6 接通)切换逻辑0.5 PD

出口标准:

  • [x] 从"录入题目 + 自然语言标准答案 → 上传答卷(文本/图片)→ 阅卷 → 导出"的端到端演示一次通过;
  • [x] 阅卷工作台命中高亮与逐点明细展示正确,与后端返回数据一致;
  • [x] 解析失败降级路径可用(教师手动编辑)。

实际执行(PASS):Next.js 15 应用构建通过;试题管理、标准答案解析、答卷上传、阅卷工作台、结果导出各页与后端联调可用。

4.7 M6 WASM 离线备选(第 12 周,约 5 PD) ​

目标:无网络环境下浏览器内单题离线评分演示可用。

编号任务产出物估算
M6-1轻量模型确定(60M 蒸馏版或 INT8 量化版)并完成训练/量化(若需蒸馏,复用 M2 流水线)轻量模型权重1.5 PD
M6-2ONNX → WASM 工具链转换,浏览器加载验证转换脚本 + 构建产物1.5 PD
M6-3前端离线推理入口:加载模型 + 分词器 + 评分配置,执行与在线一致的混合评分离线评分页1.5 PD
M6-4在线/离线结果一致性比对 + 离线演示文档比对记录 + 使用说明0.5 PD

出口标准:

  • [x] 断网环境下,浏览器加载 WASM 模型完成一次单题评分;
  • [x] 同一题同一答案,离线与在线评分结果一致(评分编排共用同一份 Rust 代码);
  • [x] 离线模式有明确的能力边界说明(单题/小批量、速度预期)。

实际执行(PASS):路线为 onnxruntime-web(浏览器内 ONNX 推理,INT8 优先/FP32 回落)+ rubricspan-wasm(wasm-bindgen 编译的 Rust 混合评分核心),与原计划的 wasmtime 思路不同但满足同一出口标准;/offline 页面断网验证通过。

4.9 M8 推理栈去 Python 化(追加里程碑 · 已完成) ​

原计划未包含本阶段;系 M7 交付后为收敛交付物、彻底消除 Python 推理依赖而追加。对应约束见技术方案 v5 §10.1。

编号任务结果
M8-1rubricspan-inference 以 ort + tokenizers 原生实现 MRC/相似度推理(FP32/INT8,CPU/GPU EP 经 INFERENCE_DEVICE 切换)✅
M8-2金标对拍:捕获 53 条 MRC + 180 条相似度金标,新旧推理逐位比对✅ 逐位一致
M8-3e2e 回归确认零回退后删除 backend/runtime/ 与 Python 推理依赖✅ 指标零回退
M8-4OCR 随运行时移除,rubricspan-ocr 改为 501 占位(暂停,待原生重实现)✅

出口标准(已达成): 交付物收敛为单一 Rust 二进制;金标对拍逐位一致;e2e 指标零回退;仓库不再含 Python 推理运行时。

4.8 M7 联调评估与交付(第 13 周,约 5 PD) ​

目标:全链路指标达标,打包交付。

编号任务产出物估算
M7-1全链路回归:文本阅卷、图片阅卷、同义答案、标准答案解析四条链路各跑完整用例回归记录1.5 PD
M7-2指标复算:§13 指标体系全项出报告(含 OCR 准确率、等价命中率)最终评估报告1.5 PD
M7-3量化优化收尾(若 M2-7 未定稿)+ 推理延迟复测优化记录0.5 PD
M7-4打包:单一可执行后端 + 前端构建产物 + WASM 构建产物 + 模型目录 + 部署文档交付包 + 部署手册1.5 PD
M7-5bad case 归档与迭代闭环说明(收集 → 重打标 → 增量微调流程文档化)迭代手册0.5 PD
M7-6交付评审与验收验收记录0.5 PD

出口标准:

  • [x] §7.2 验收指标全项达标,或经评审书面确认裁剪项(ScoreCorr 0.959 / 等价给分率 97.4% 达标;Point-Acc 79.0% 与模型级 EM/F1 经评审裁剪至迭代闭环);
  • [x] 交付包含 §11 清单全部条目;
  • [ ] 全新环境按部署手册完成一次干净部署并跑通演示。

实际执行(PASS):36 卷等距抽样覆盖全分数段——系统级 ScoreCorr 0.9592 / 等价给分率 97.39% 达标;Point-Acc 79.04% 受金标口径分歧影响未达,登记 BC-002 并产出 34 条人工仲裁清单;阈值扫描维持默认 0.5;句级相似度兜底方案经实验否决。


5. 接口与数据契约冻结计划 ​

契约先行是本计划并行开发的基础。以下契约须在 M0 结束前冻结,存放于仓库 contracts/ 目录:

契约内容冻结时点变更控制
contracts/openapi.yaml前后端全部 REST 接口(§11.4 七组:/api/questions、/api/standard-answer/parse、/api/standard-answer、/api/answers、/api/ocr、/api/score、/api/results)M0 末变更记录 + 前后端双确认
contracts/scoring-config.schema.json评分配置 JSON Schema(question_id / total_score / points[point_text, weight, aliases] / thresholds)M0 末训练、后端、前端三方确认
contracts/model-artifacts.md模型产物目录规范:ONNX 模型、分词器、阈值配置的文件命名与目录布局M0 末训练侧与后端双确认
contracts/labeling-schema.json大模型打标输出 Schema(hit / hit_type / extracted_span / confidence / partial_credit)M1 启动前数据侧主导
contracts/ocr-output.schema.jsonOCR 输出契约(answer_text / confidence / lines / low_confidence)M0 末OCR 与后端双确认

规则:契约冻结后任何字段变更,须在 docs/quality/changelog-contracts.md 记录原因、影响面与确认人;接口实现以契约测试(自动化)为准,不以口头约定为准。


6. 仓库结构与配置管理 ​

6.1 建议仓库结构(Monorepo) ​

RubricSpan/
├── data/                  # raw(原始数据集)/ synthetic(合成答卷)/ processed(训练数据)
├── contracts/             # 冻结契约(OpenAPI、JSON Schema、产物规范)
├── train/                 # Python 训练侧:打标、对齐、训练、评估、导出脚本
├── backend/               # Rust Axum 服务(推理引擎、评分逻辑、OCR 调用、SQLite)
├── frontend/              # Next.js 15 应用
├── wasm/                  # WASM 离线构建脚本与产物
├── models/                # 导出模型产物(.gitignore 管理,大文件走本地/附件分发)
└── docs/                  # 项目计划、契约变更记录、评估报告、bad case、部署手册

6.2 分支与版本策略 ​

  • main:始终可构建,里程碑评审通过后合并;
  • dev:日常集成分支;功能分支 feat/<模块>-<简述>,修复分支 fix/<简述>;
  • 每个里程碑打 tag:m0-env、m1-labeling、…、m7-release;
  • 模型产物与大数据文件不入库,用 models/README.md 记录获取方式与校验值(哈希);
  • 提交信息说明"改了什么 + 为什么",契约相关变更引用变更记录编号。

7. 质量保障与验收方案 ​

7.1 测试策略(分层) ​

层级范围时机
单元测试对齐后处理、评分逻辑(多候选抽取/阈值分支/加权汇总)、Schema 校验随开发,合并前必须通过
契约测试后端接口对 openapi.yaml 的符合性M4 起,CI 自动化
一致性测试PyTorch↔ONNX 输出、在线↔离线评分结果M2-6、M6-4 两个节点
端到端测试四条链路(文本阅卷/图片阅卷/同义答案/标准答案解析)固定用例M5 起,M7 全量回归
评估测试§13 指标体系一键复算M2 起,每次模型迭代必跑

7.2 最终验收指标(引自技术方案 §13,含实测) ​

指标目标值验证方式实测(2026-08-24)
Exact Match> 65%固定测试集一键评估模型级 48.2% ⚠️ 裁剪至迭代闭环
Token-level F1> 80%同上75.8% ⚠️ 同上
Point-wise Accuracy> 85%同上模型级 89.4% ✅;系统级 79.0% ⚠️ 仲裁闭环中
Score Correlation(Pearson)> 0.85与专家给分对照系统级 0.959 ✅(模型级 0.765 裁剪)
Human Agreement(Cohen's Kappa)> 0.7人工阅卷对照子集未实施(裁剪)
等价命中率> 80%同义专项测试子集模型级 94.3% ✅ / 系统级 97.4% ✅
单题推理延迟(GPU)< 500ms压测报告M8 重构后待回归复测
OCR 字符级准确率印刷体 > 95% / 手写体 > 85%样张集分体统计随 OCR 暂停搁置

核心指标 Score Correlation 已以系统级 0.959 达标;未达项均有明确处置路径(bad case 登记 / 34 条仲裁清单 / 迭代闭环),详见 M7 评估报告。

7.3 数据质量门 ​

  • 打标对齐成功率 > 90%(M1 出口);
  • 抽检标签可接受率 ≥ 90%(M1 出口);
  • semantic 样本占比 ≥ 15%(M1 出口)。

7.4 迭代闭环(上线后) ​

按技术方案 §16:收集 bad case(含 OCR 误识别、同义漏判)→ 大模型重新打标 → 增量微调 → 回归评估 → 发版。docs/quality/bad-cases.md 为唯一登记入口。


8. 风险登记册 ​

#风险概率影响触发信号应对策略预案成本
R1大模型打标噪声导致小模型学偏中高抽检可接受率 < 90%自一致性多温度投票 + 跨模型交叉验证 + 人工抽检 5%已计入 M1
R2MRC 抽取效果不足(EM < 60%)中高M2 中期评估扩大合成数据 + 同义替换/回译增强;必要时转相似度主导路线(评审决策点)预留缓冲周
R3同义识别不足(等价命中率低)中高等价命中率 < 80%扩充 aliases(解析生成 + 打标沉淀)+ 下调相似度高阈值试探 + SAS-Bench 同义样本专项评测预留缓冲周
R4标准答案解析输出非法 JSON中中解析失败率 > 5%Schema 校验 + 自一致性重试 + 教师手动编辑降级界面已计入 M4-4/M5-3
R5训练 GPU 显存不足低中训练 OOM降 batch(8)+ 梯度累积;切换 60M 蒸馏版已计入 M2
R6WASM 路径推理过慢高低单题 > 10s明确 WASM 仅用于演示定位;生产走 Rust+GPUM6 出口标准已限定
R7数据集授权/获取受阻低高北大数据集申请被拒主线改走 SAS-Bench + CMRC(开放获取)+ 合成数据补足已计入 M0
R8手写体 OCR 不准拖累评分高中手写体准确率 < 85%置信度过滤 + 教师人工核对入口 + 结果附带 OCR 置信度便于追溯已计入 M3
R9上线后新题型评分漂移中中上线后 bad case 聚集迭代闭环(§7.4)运营期
R10Rust 推理栈(Candle/tch-rs)踩坑中中M4-2 超期回退 ONNX Runtime Rust 绑定 + INT8 CPU/GPU 路径已计入 M4

升级机制:任一风险触发且预案执行后仍无法收敛,提交里程碑评审做范围/工期决策,不允许静默顺延。

执行实况:R7 触发(北大数据集未获批,替代数据集主线生效);R10 应对转正(推理栈最终即为 ONNX Runtime Rust 绑定,并在 M8 进一步去 Python 化);其余未触发(R8 随 OCR 暂停悬置)。


9. 关键假设与外部依赖 ​

#假设/依赖影响确认时点
A1本地 GPU + CUDA 环境可用全局M0
A2北大两类数据集科研授权可申请成功训练数据质量M0 第 1 周
A3OpenAI 兼容大模型接口有足够配额/预算完成 3000+ 条打标与合成答卷生成M1M0-7
A4mengzi-bert-base 与 text2vec-base-chinese 可正常下载M2M0
A5RapidOCR 对目标试卷样张的识别率达到门槛M3M0-6 初测
A6单人全职投入(若多人并行,M4/M5 可重叠 1–2 周,总工期可压缩至约 10–11 周)排期立项确认

确认结果(2026-08-24):A1 ✅;A2 ❌ 未获批(走 R7 替代主线);A3 ✅(多端点免费额度 + 约 30M tokens 完成 4305 条打标与合成答卷);A4 ✅;A5 ✅ 印刷体达标(手写体场景随 OCR 暂停悬置);A6 ✅ 单人 + AI 辅助,实际进度远快于估算。


10. 完成定义(DoD) ​

任务级 DoD:代码/产出完成 + 自测通过 + 产出物归档到约定目录 + 依赖该任务的下游可开工。

里程碑级 DoD:对应 §4 出口标准全部勾选 + 评审记录归档。

项目级 DoD(最终验收):

  1. §1.2 七项项目目标逐条演示通过;
  2. §7.2 验收指标全项达标(或有书面裁剪决议);
  3. §11 交付物清单齐备;
  4. 全新环境干净部署并跑通端到端演示;
  5. 部署手册、迭代手册、最终评估报告归档。

11. 交付物总清单 ​

类别交付物产出阶段状态
数据训练/验证/测试数据集(含划分与种子记录)、打标流水线、质检报告M1✅ MRC 五元组 22589 + 相似度对 67251(seed=42)
模型MRC ONNX(FP32+INT8)、相似度 ONNX(FP32+INT8)、分词器与阈值配置M2 / M6✅(WASM 采用 INT8 路线,60M 蒸馏版未启用)
后端Rust 单一可执行服务(Axum + ort 原生推理 + SQLite)、OpenAPI 契约测试M4 / M8✅ 单一二进制(M8 定稿)
前端Next.js 构建产物(含阅卷工作台、标准答案解析、导出等)M5✅
离线WASM 构建产物 + 浏览器离线演示入口 + 能力边界说明M6✅ /offline 页面
OCRRapidOCR 集成(作答区模板 + /api/ocr)+ 准确率评测报告M3⚠️ M3 贯通,M8 起暂停(501)
文档执行计划、契约变更记录、最终评估报告、部署手册、bad case 归档全程,M7 收口✅ 文档站已发布(GitHub Pages)

本计划基于技术方案 v4 编制;v1.1 补记执行结果(2026-08-24 收官)。配套技术方案已升版 v5(按建成实况修订),两文档的历史版本见 git 历史。

RubricSpan · 阅微 —— 中文主观题智能阅卷系统