Files
taojianmin 1d20cfa708 v1.0.1: 课程成绩异常诊断与报告生成 - 初版骨架
基于匠厂 skill-template 主仓 v1.0.108 派生的业务技能。

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

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

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

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

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-14 12:19:12 +08:00

183 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 课程成绩异常诊断与报告生成 — 技能需求文档
> 派生自匠厂 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 | 匠厂 | 初版需求文档,骨架就位 |