对标 AIOJ(aioj.net),评估底层架构、候选方案与斯恩落地路径
斯恩 OJ 不应直接 Fork AIOJ(其开源基座是 Python/Django 的 DMOJ,与斯恩 Node.js 技术栈不匹配、维护成本高、且偏竞赛刷榜、教育管理弱)。
最佳路径是:判题用成熟的 Judge0 CE(支持 90+ 语言、Docker 沙箱、安全隔离),业务层用与 CP v10 完全一致的 NestJS + React18 + AntD,直接复用 CP 的账号/学生/班级数据。
差异化打在三点:① 与 CP 排课/学情打通(作业→判题→成绩回写看板);② AI 助教(代码纠错/思路讲解/学习路径,对标 AIOJ 的 AI 三件套);③ 覆盖斯恩全链路(Scratch→Python→C++ 信奥)。分 3 期落地,P0 先跑通"题库+判题+登录"。
AIOJ 有"商业产品"和"开源基座"两层,必须分开看。
「AI 型青少年算法编程练习平台,从编程到算法进阶」。清华 AI 博士 + 信息学专家团队,面向青少年课后练习。
AI 纠错AI 导师精准评测
这是它相对传统 OJ 的核心溢价点。
洛谷/OpenJudge 风格入门题(如 T1013 温度转换、T1014 与圆相关计算),按 C++ 编程基础标签分类,展示尝试数/AC 率/热度。
| 层 | 技术 | 说明 |
|---|---|---|
| Web 后端 | Django (Python) | 界面 + API + OAuth 登录 + 2FA + 细粒度权限 |
| 异步任务 | Celery | PDF 生成、MOSS 查重、批量任务 |
| 判题机 | DMOJ judge-server | 独立进程,经 dmoj_bridge_async 异步桥接;60+ 语言运行时;支持交互题/签名评分/自定义校验器;沙箱隔离 |
| 前端 | Node.js 生态 + 模板 + 静态资源 | Webpack 构建,ACE 编辑器,Markdown+LaTeX 题面 |
| 数据库 | PostgreSQL / MySQL | 题目、提交、用户、竞赛数据 |
| 实时层 | WebSocket | 提交状态实时推送 |
| 竞赛系统 | DMOJ 内核 | ICPC / IOI / AtCoder 风格、虚拟参赛、隐藏榜、Elo-MMR 评分 |
基于斯恩现状(Node.js 团队、CP 已上线、阿里云服务器、信奥+编程全链路)筛选 4 个可行方案。
| 评估维度 | A. Fork AIOJ(DMOJ) Python 栈 |
B. Hydro OJ 二开 Node.js 原生 |
C. 自研 NestJS+Judge0 ★推荐 |
D. 完全自建判题机 NestJS+自研沙箱 |
|---|---|---|---|---|
| 与斯恩 Node.js 栈契合 | ❌ 低 | ✅ 高 | ✅ 高 | ✅ 高 |
| 判题成熟度 / 安全 | ✅ 高 | ✅ 高 | ✅ 高(Judge0) | ⚠️ 自建风险 |
| 教育管理(班级/作业/学情) | ⚠️ 弱 | ✅ 强 | ✅ 可自建 | ⚠️ 全自研 |
| AI 扩展能力 | ⚠️ 中等 | ⚠️ 中等 | ✅ 易接 LLM | ✅ 易接 LLM |
| 与 CP 集成成本 | ❌ 高(跨语言) | ⚠️ 中 | ✅ 低(同栈) | ✅ 低 |
| 开源协议风险 | ✅ BSD | ❌ AGPL-3.0 | ✅ MIT/Apache | ✅ 自研可控 |
| 运维成本 | ⚠️ 中高 | ⚠️ 中 | ✅ 中(复用云) | ❌ 高 |
| 信奥题型(C++/交互/SpecialJ) | ✅ 全 | ✅ 全 | ⚠️ CE 版部分受限 | ✅ 全 |
斯恩编程学员全链路:图形化(Scratch) → Python → C++ 信奥(CSP-J/S/NOIP/NOI),以及考级模拟。
课后练习作业布置信奥集训考级模拟校内赛/月考
| 模块 | 职责 | 优先级 |
|---|---|---|
| 题库服务 | 题目 CRUD、标签/难度、题面(Markdown+LaTeX)、测试用例管理、题解 | P0 |
| 提交/判题服务 | 接收代码 → 调用 Judge0 → 状态(AC/WA/TLE/MLE/CE) → 存结果 | P0 |
| 账号/鉴权 | 复用 CP JWT,学员/老师/家长三角色;OAuth 可选 | P0 |
| 作业/班级服务 | 老师布置作业、截止时间、班级维度统计,与 CP 排课联动 | P1 |
| 学情看板 | 个人/班级正确率、知识点掌握热力、趋势,回写 CP 看板 | P1 |
| AI 助教服务 | 代码错误诊断、讲解、相似题推荐、个性化路径(接 LLM) | P2 |
| 竞赛/月考 | 校内赛、限时赛、榜单(对标 AIOJ 竞赛能力) | P2 |
| 组件 | 部署方式 | 说明 |
|---|---|---|
| OJ 前端 | 静态构建 + Nginx(宝塔) | React18 + Vite5 产物,挂 oj.580678.cn |
| OJ Gateway | NestJS 进程(PM2,端口如 3002) | 与 CP(3001) 同机共存,零停机 |
| Judge0 CE | Docker 容器(api + workers) | 独立网络 + 资源限额,防沙箱逃逸 |
| MySQL | 复用 CP 实例(独立库 oj_*) | 或独立实例,按容量定 |
| Redis | 复用 CP Redis | 提交队列、缓存、WebSocket 状态 |
| OSS | 阿里云 OSS / 服务器磁盘 | 题面附件、代码快照、AI 讲解缓存 |
| 期 | 周期 | 交付内容 | 验收标准 |
|---|---|---|---|
| P0 · MVP | 4–6 周 | Judge0 判题打通 · 题库导入(C++ 入门 100 题)· CP 账号登录 · 提交/判题/结果页 | 能提交 C++ 代码并正确返回 AC/WA/TLE;学员用 CP 账号可登录 |
| P1 · 教学闭环 | 6–10 周 | 作业/班级服务 · 老师后台 · 学情看板 · 与 CP 排课联动 | 老师可布置作业、班级统计可见、成绩回写 CP 看板 |
| P2 · 智能 + 竞赛 | 10–16 周 | AI 助教(纠错/讲解/路径)· 信奥集训模块 · 校内赛/月考 · 家长端 | 提交后 AI 给出错误讲解;可办一场限时校内赛 |