作业批改 Agent¶
项目背景与目标¶
教师批改作业是教学工作中最耗时的环节之一,尤其大班教学时单次作业批改可达数小时。批改不仅判对错,还需指出错误原因、给出针对性反馈,传统自动批改系统只能处理选择题,主观题仍依赖人工。AI Agent 通过多模态识别 + 语义理解,能处理手写解答、作文、计算题等多种题型,生成个性化反馈,大幅减轻教师负担。
本项目目标是构建一个作业批改 Agent,支持手写作业拍照识别、多题型自动批改、错误归因与反馈生成、班级学情统计。
需求分析¶
支持题型: 1. 客观题:选择、填空、判断 2. 计算题:数学/物理计算过程,分步评分 3. 主观题:简答题、论述题、作文 4. 图形题:几何证明、化学方程式
核心能力: 1. 手写识别:拍照识别学生手写答案 2. 答案对齐:将识别结果与标准答案匹配 3. 评分:按评分标准给分,支持分步给分 4. 错误归因:分析错误类型(概念错/计算错/审题错) 5. 反馈生成:个性化点评与改进建议 6. 学情统计:班级错误率分布、共性错误
质量要求:客观题准确率 > 99%;主观题与教师评分一致率 > 85%;支持教师复核修正。
技术选型说明¶
| 模块 | 技术方案 | 选型理由 |
|---|---|---|
| 手写识别 | PaddleOCR + 手写微调 | 中文手写识别 |
| 公式识别 | LaTeX-OCR | 数学公式转 LaTeX |
| Agent 框架 | LangGraph | 分题型批改流程 |
| LLM | Qwen-Max | 主观题评分与反馈 |
| 评分引擎 | 规则 + LLM | 客观规则 + 主观语义 |
| 题库 | 结构化 + 向量 | 评分标准检索 |
| 后端 | FastAPI + Celery | 批量作业异步处理 |
| 数据库 | PostgreSQL + MinIO | 成绩 + 作业图片 |
架构设计¶
flowchart LR
IMG[作业照片] --> OCR[手写识别]
OCR --> SEG[题目分割]
SEG --> TYPE{题型判定}
TYPE -->|客观| OBJ[规则批改]
TYPE -->|计算| CALC[分步评分]
TYPE -->|主观| SUBJ[LLM 评分]
TYPE -->|图形| GRAPH[图形识别]
OBJ --> SCORE[成绩汇总]
CALC --> SCORE
SUBJ --> SCORE
GRAPH --> SCORE
SCORE --> DIAG[错误归因]
DIAG --> FB[反馈生成]
FB --> LLM[LLM 点评]
SCORE --> CLASS[班级统计]
CLASS --> REP[学情报告]
关键模块实现思路¶
模块1:手写识别与题目分割¶
学生作业拍照后,先做版面分析识别每道题的区域(题号 + 答题区),再对手写内容做 OCR。数学公式需特殊处理:用 LaTeX-OCR 模型将手写公式转为 LaTeX,便于后续计算比对。
def recognize_answer(image, question_region):
answer_region = locate_answer_area(image, question_region)
if has_formula(answer_region):
text = latex_ocr(answer_region) # 转为 LaTeX
else:
text = handwriting_ocr(answer_region)
return {"text": text, "region": answer_region}
识别结果置信度低的题目标记需人工复核,避免误判。
模块2:分题型批改引擎¶
客观题:直接字符串匹配,处理 A/a/甲等不同表述。
计算题:分步评分是关键。LLM 解析学生解题步骤,与标准步骤对齐,按步骤给分。即使最终答案错,过程正确部分仍给分。
def grade_calculation(student_steps, rubric):
score = 0
for step in student_steps:
matched = find_matching_step(step, rubric.steps)
if matched and check_correctness(step, matched):
score += matched.points
return score, {"correct_steps": ..., "error_at": ...}
主观题:LLM 基于评分标准(采分点)评分。评分标准结构化为采分点列表,LLM 判断学生答案是否覆盖各采分点,按覆盖度给分。作文评分从内容、结构、语言、立意多维度打分。
模块3:错误归因与反馈生成¶
错误归因比判错更有价值。分析学生错误模式: - 概念错误:用错公式/定理(如把勾股定理用于非直角三角形) - 计算错误:思路对但算错(如 3+4=8) - 审题错误:答非所问(求面积算了周长) - 过程遗漏:跳步导致逻辑断层
LLM 生成个性化反馈:指出具体错误、解释正确思路、推荐同类练习。反馈须具体而非"再仔细些"等空话。
FEEDBACK_PROMPT = """基于错误分析生成反馈:
题目:{question}
学生答案:{answer}
错误类型:{error_type}
正确思路:{correct_approach}
要求:具体指出错在哪,怎么改,推荐 1 道同类题"""
模块4:班级学情统计¶
汇总全班成绩,统计每题错误率、错误类型分布、共性错误。错误率 > 60% 的题目标记为"共性难点",建议教师课堂重点讲解。生成班级学情热力图,按知识点显示掌握情况。
核心流程详解¶
作业批改流程: 1. 教师上传作业 + 标准答案 + 评分标准 2. 学生提交作业照片(或系统自动收集) 3. OCR 识别 → 题目分割 → 题型判定 4. 分题型批改:客观/计算/主观/图形 5. 错误归因 → 反馈生成 6. 成绩汇总 → 班级统计 → 学情报告 7. 教师复核:可修改评分与反馈,修改回流为训练样本
教师复核流程: 1. 系统标记低置信度批改供教师复核 2. 教师查看:原题 + 识别结果 + 评分 + 反馈 3. 教师修改 → 系统记录差异 4. 差异数据用于优化批改模型
部署与优化建议¶
- 分学科模型:数学/语文/英语用不同微调模型,提升识别与评分准确率
- 模板复用:常见题型预设评分模板,减少 LLM 调用
- 渐进自动化:先客观题全自动,主观题"AI 初评 + 教师终审",逐步提升自动化比例
- 离线批处理:大批量作业夜间批处理,避免峰值压力
- 学生反馈:学生对批改结果有异议可申诉,申诉通道闭环
常见问题与解决方案¶
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 手写识别错 | 字迹潦草 | 低置信度转人工 + 多模型集成 |
| 主观题评分偏差 | 评分标准模糊 | 采分点细化 + 教师校准 |
| 公式识别错 | 复杂公式 | LaTeX-OCR + LLM 纠错 |
| 反馈太笼统 | LLM 未约束 | 模板约束 + 具体错误引用 |
扩展方向¶
- 错题本自动生成:按知识点归集学生错题
- 个性化作业:根据错题推送同类练习
- 语音批改:口语作业(朗读、口语表达)自动评分
- 跨学科综合批改:理综/文综综合题