v1.0.1: 课程成绩异常诊断与报告生成 - 初版骨架

基于匠厂 skill-template 主仓 v1.0.108 派生的业务技能。

核心业务:
- 教师在教务系统录完成绩后自动触发
- 统计指标计算 + 三种异常模式识别(高分低能 / 两极分化 / 挂科异常)
- 生成三段式 AI 评语(总体 / 问题 / 建议)

输出形态:
- HTML 报告(含统计表 + 正态分布图 + AI 评语)
- 高风险课程自动标记 + 异常预警通知

预期提效:教师撰写成绩分析报告的时间从半天 → 10 分钟。

业务行生命周期:无(一次性报告存档,不重复处理)

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
2026-09-14 12:19:12 +08:00
commit 1d20cfa708
21 changed files with 1482 additions and 0 deletions

182
development/REQUIREMENTS.md Normal file
View File

@@ -0,0 +1,182 @@
# 课程成绩异常诊断与报告生成 — 技能需求文档
> 派生自匠厂 skill-template 主仓 `development/REQUIREMENTS.md`,对应规格书第 4.2 节「🟣 教务处 Skill 002 —— 成绩分析"异常诊断与报告生成"」。
---
## 0. 技能标识
- **拟定 slug(英文)**:`analyze-grade-distribution-aa`
- **中文 name**:课程成绩异常诊断与报告生成
- **中文 description(一句话)**:教师在教务系统录完成绩后,自动计算统计指标、识别"高分低能 / 两极分化 / 挂科异常"三种异常模式、生成三段式评语,输出图文并茂的《课程成绩分析报告》
- **account-manager platform_key(如有)**:N/A
- **命名形态**:标准型
- **目标 OEM 市场 `brands`(可选)**:未写则仅挂匠厂
- **网页 RPA(如有)— 登录策略**:**不适用**
## 0.1 宿主入口定位(必填)
| 主能力(Action id / CLI) | 对话 | 数据管理 | 定时 | 教程章节 | 不挂理由 |
|---------------------------|------|----------|------|----------|----------|
| `health` / `version` / `config-path` | 挂 | 不挂 | 不挂 | 入口二 | 默认必备 |
| `analyze-grade-distribution` | 挂 | row(课程成绩) | 不挂 | 入口一/入口二 | sync |
| `batch-analyze-courses` | 挂 | toolbar(课程成绩) | 不挂 | 入口一/入口二 | async |
| `render-html` | 挂 | row(分析报告) | 不挂 | 入口一/入口二 | sync |
| `flag-high-risk-course` | 不挂 | row(分析报告) | 不挂 | 入口一 | 写状态 |
| `sync-historical-grades` | 挂 | toolbar(历史成绩) | 挂(占位) | 入口一/入口三 | cron 占位 |
### 0.1.1 用户市场文档
- `README.md`:能力 / 场景 / 边界
- `TUTORIAL.md`:覆盖两入口,入口三写「占位」
## 0.2 AI + RPA 协作与授权边界
### Agent 设计
- 用户意图:分析单门课程 / 批量分析 / 查看报告 / 解释预警 / 标记高风险 / 同步历史成绩
- 意图 → Action 映射:
- 分析单门课程 → `analyze-grade-distribution`
- 批量分析 → `batch-analyze-courses`
- 查看报告 → `render-html`
- 标记高风险 → `flag-high-risk-course`
- 同步历史 → `sync-historical-grades`
- 缺参数追问:课程名称 / 学期 / 课程 ID
- 必须确认的动作:
- `batch-analyze-courses` 批量分析前确认范围与数量
- `flag-high-risk-course` 标记前提示推送对象
- 结果解释:成功(评分 + 异常模式 + 评语)、部分成功(评语生成失败但统计完成)、失败(历史数据缺失 → 仅做统计不预警)
### 授权与平台边界
- 教务系统 API 由教务处统一开通
- 学生个人成绩明细受教务系统权限控制,技能仅输出聚合统计与匿名分布
- 严禁逆向教务系统、破解私有协议
- 异常检测算法调参时停止并上报
### RPA 风控设计
- 执行端:**N/A**
## 0.3 业务行生命周期
本技能对「分析报告」无角色约束(一次性报告存档)。
---
## 1. 文档目标
本文档用于明确 `analyze-grade-distribution-aa` 的研发范围、交付标准、依赖关系和验收要求。
## 2. 业务背景
- **现状**:教师每学期末需撰写课程总结与成绩分析报告,平均耗时半天
- **痛点**:人工计算统计指标效率低;"高分低能 / 两极分化 / 挂科异常"难以识别;督导难以及时锁定高风险课程
- **目标**:自动完成「统计指标计算 + 三种异常识别 + AI 评语生成」,输出「HTML 报告 + 高风险课程标记」
## 3. 开发目标
- 拉取某课程全班成绩明细(平时分 / 期中分 / 实验分 / 期末分 / 总评)
- 拉取该课程的教学大纲(考核项权重)
- 拉取历史成绩数据(前置课程 / 同课程历史)
- 计算统计指标 + 正态分布 + 三种异常模式识别
- 生成 AI 三段式评语
- 输出 HTML 报告 + 异常预警通知
- 写入业务表(课程成绩 / 分析报告 / 历史成绩 / 高风险课程)
## 4. 功能范围
### 必须实现
- 支持 `python scripts/main.py health` / `version` / `config-path` / `init-db`
- 支持 `python scripts/main.py analyze-grade-distribution --course-id <id>`
- 支持 `python scripts/main.py batch-analyze-courses --semester-id <id>`(async)
- 支持 `python scripts/main.py render-html --report-id <id>`
- 支持 `python scripts/main.py flag-high-risk-course --report-id <id>`
- 支持 `python scripts/main.py sync-historical-grades`(async,cron 占位)
- 完成 §0.1 入口定位表
### 可后续扩展
- 多课程横向对比报告
- 学生个人学习轨迹预警
- 与学校教学质量监控平台对接
## 5. 非功能要求
- 目录结构符合 skill-template 规范
- 入口统一为 `scripts/main.py`
- 用户市场四 Tab
- 输出机读友好;错误前缀 `ERROR:`
- Windows UTF-8 兼容
- 单门课程分析耗时 ≤ 30 秒(学生数 ≤ 200)
## 6. 输入输出要求
### 输入
- `course_id`:课程主键(必填)
- `semester_id`:学期主键(仅 batch 必填)
- `report_id`:报告主键(仅 render / flag 必填)
- 依赖系统:教务系统 API(成绩读写)
- 环境变量(`.env`):
- `AA_API_BASE_URL`:教务系统 API 入口
- `AA_API_TOKEN`:调用凭证
- `HIGH_FAIL_RATE_THRESHOLD`:挂科异常阈值(默认 0.30)
- `SCORE_GAP_THRESHOLD`:高分低能阈值(默认 20)
- `STD_DEV_RATIO_THRESHOLD`:两极分化阈值(默认 1.5)
### 输出
- 成功结果:`analyze-grade-distribution` 返回 `{max_score, min_score, avg, median, std, pass_rate, excellent_rate, anomaly_flags, ai_comment}`
- 错误输出:`ERROR:` 稳定码 + 中文 message
- 数据库记录:写入 `分析报告` 表
- HTML 报告:落到 `html/`
## 7. 依赖的兄弟技能或外部系统
### 兄弟技能依赖
- 无强制依赖
### 外部系统依赖
- **教务系统 API**(成绩读写):必须
### Python 包依赖(requirements.txt)
- HTTP 请求:`requests>=2.31.0,<3`
- 数值计算:`numpy>=1.24.0,<2`
- 数据处理:`pandas>=2.0.0,<3`
- 统计可视化(图表占位):`matplotlib>=3.7.0,<4`
- `jiangchang-platform-kit` 由宿主提供
## 8. 不在本次范围内的内容
- 本次不实现学生个人学习轨迹预警
- 本次不集成教学质量监控平台
- 本次不做 cron 启用(占位 Action 已就位)
- 本次不兼容旧模板历史结构
## 9. 验收标准
- 代码结构符合模板规范
- `health` / `version` / `config-path` / `init-db` 命令执行正常
- `analyze-grade-distribution` 在含 100 门课程的样例库中完成一次分析,耗时 ≤ 30 秒
- 业务表写入和查询符合 `references/SCHEMA.md`
- 异常识别准确率 ≥ 90%(基于样例库)
- `SKILL.md` 的 `developer_ids` 已配置
- 安装后按 §0.1 完成宿主多入口验收
## 10. 开发注意事项
- 只修改当前 skill 仓库
- 学生个人成绩明细受教务系统权限控制
- 异常检测阈值可在 `runtime/config` 调参
- `cli` 只做参数解析;核心逻辑在 `service`
## 11. 变更记录
| 日期 | 版本 | 变更人 | 变更内容 |
|------|------|--------|----------|
| 2026-09-14 | v1.0.1 | 匠厂 | 初版需求文档,骨架就位 |