# 作业批改助手（teaching.assignment-grader）

批量批改课程作业的智能体包。输入「作业要求文档 + 学生提交物」，自动派生评分
rubric、按两轴逐项打分、每分锚定证据、先判红线，产出评阅报告 + 班级汇总 + 成绩单。

**定位：AI 初评、辅助老师。** 总评是 draft，须任课教师复核，最终成绩由老师定。

## 它解决什么

很多课程作业（尤其"AI 协作"类软工课）的考核内核不是产物表面好不好，而是
**学生有没有展示 AI 替代不了的工程判断**。本智能体把批改拆成两轴，避免跑偏：

- **轴 A 工程产物质量**（默认 ~55%）：架构/设计/代码/测试等硬交付物本身。
- **轴 B AI协作元能力**（默认 ~35%）：prompt 策略差异、AI 误导分析、AI初稿 vs
  人工修订的 diff 是否实质、"为什么 AI 做不了这个决策"的深度、反思闭环。
- **轴 C 规范与完整性**（默认 ~10%）：交付物齐全、路径/格式合规。

并专门处理"学生用 AI 写、老师用 AI 改"的悖论：着力点是学生的真实判断，而非
文档表面流畅度；内置 AI-slop（套话/雷同/无取舍）识别。

> 若作业里没有 AI 协作类交付物（普通作业），轴 B 自动并入轴 A（A~85% / C~15%）。

## 输入

- **作业要求文档（spec）**：rubric 的来源。给文件路径，或放进本地资料库。
- **学生提交物**：单份目录/文件，或一个班级根目录（批量，每个子目录一份）。
- **可选：已校准 rubric**：给了就直接用，保证跨队口径一致（推荐老师先用
  `assignment-grader` skill 精批几份标杆卷、校准出 rubric，再喂给本包批量铺开）。

## 产物（写入运行工作目录）

| 文件 | 内容 |
|---|---|
| `<队名/编号>-review.md` | 单份评阅：建议总评、两轴得分、红线、逐项评分表（含证据定位）、AI协作专项点评、改进建议、所用 rubric |
| `<队名/编号>-score.json` | 机器可读分数（总评、轴A/B/C、红线、置信度） |
| `_class-summary.md` | 批量时：分数分布、各项平均、全班共性问题 Top3、红线名单、一致性自检 |
| `_gradebook.csv` | 批量时：成绩单，可导入成绩册 |

## 用法

在产品里创建本包的智能体实例后，对话给出 spec 与提交物路径即可，例如：

```
批改 docs/作业要求-P2.md 这份作业，学生提交在 /submissions/队A/
```

或批量：

```
按 docs/作业要求-P2.md 批改 /submissions/ 下所有队，出班级汇总和成绩单
```

## 模型与隐私

- 推荐 `dashscope/qwen-max` 或 `claude-code/sonnet`；想**完全离线、提交物不外传**用
  `ollama/qwen`。复用智能体自身 provider，本地模型可全程不联网。
- 提交物常含姓名/学号——本包不联网、不外传，报告可用编号代替真实姓名。

## 边界与提醒

- **AI 初评仅供参考，最终成绩以任课教师判定为准。** 每份报告均标注需复核。
- 不确定的项标「待人工确认」，不硬猜。
- 跨队一致性靠"同一份 rubric 只派生一次"保证；批完会自检给分漂移并请老师校准。

## 与 `assignment-grader` skill 的关系

两者吃同一套两轴 rubric，互补：
- **skill**（Claude Code，老师本机）：精批、抽查、校准 rubric。
- **本包**（部署在产品里，助教批量）：把校准好的 rubric 铺到全班，出标准化报告与成绩单。
