月入5万:教培机构AI作业批改系统全栈实战(5所学校付费,老师减负70%)
本文拆解EdTech社区真实案例:用OpenClaw搭建AI作业批改系统,服务5所学校,月收入¥50,000。从作业识别、个性化批改到学情追踪,手把手教你打造教培行业高毛利SaaS工具。
一、案例背景:教培行业的AI减负革命
1.1 核心数据与业务本质
一位教培行业从业者通过OpenClaw自动化作业批改系统,实现了从「老师打工」到「SaaS服务商」的转型:
| 服务学校数 | 5所 | 稳定付费客户池 |
| 月收入 | ¥50,000 | 单校均价¥10,000/月 |
| 老师批改效率 | 人工100份/天 → 系统1000份/小时 | +20倍 |
| 批改时间节省 | 70% | 老师从机械批改中解放,专注教学 |
| 学生覆盖率 | 1200+ | 覆盖K12全学段英语/数学学科 |
业务本质:
教培机构的核心痛点是老师批改作业耗时久、评语模板化、学情追踪难。本系统通过OpenClaw Agent实现「作业识别→智能批改→个性化评语→学情追踪→家长报告」全流程自动化,替代老师完成80%的机械劳动,同时提升教学质量与家长满意度。
1.2 传统教培批改痛点与AI解决方案
传统批改痛点
AI自动化解决方案
通过OpenClaw Agent实现批量识别→智能批改→个性化评语→自动追踪→月度报告,将100份作业的批改时间从3小时压缩至15分钟,同时为学生提供个性化反馈,为家长提供透明学情,为老师减负增效。
二、系统核心功能与业务流程
2.1 完整业务流程总览(Mermaid流程图)
#mermaid-svg-FeXcUOYwRSP7cCJH{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-FeXcUOYwRSP7cCJH .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-FeXcUOYwRSP7cCJH .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-FeXcUOYwRSP7cCJH .error-icon{fill:#552222;}#mermaid-svg-FeXcUOYwRSP7cCJH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-FeXcUOYwRSP7cCJH .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-FeXcUOYwRSP7cCJH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-FeXcUOYwRSP7cCJH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-FeXcUOYwRSP7cCJH .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-FeXcUOYwRSP7cCJH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-FeXcUOYwRSP7cCJH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-FeXcUOYwRSP7cCJH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-FeXcUOYwRSP7cCJH .marker.cross{stroke:#333333;}#mermaid-svg-FeXcUOYwRSP7cCJH svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-FeXcUOYwRSP7cCJH p{margin:0;}#mermaid-svg-FeXcUOYwRSP7cCJH .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-FeXcUOYwRSP7cCJH .cluster-label text{fill:#333;}#mermaid-svg-FeXcUOYwRSP7cCJH .cluster-label span{color:#333;}#mermaid-svg-FeXcUOYwRSP7cCJH .cluster-label span p{background-color:transparent;}#mermaid-svg-FeXcUOYwRSP7cCJH .label text,#mermaid-svg-FeXcUOYwRSP7cCJH span{fill:#333;color:#333;}#mermaid-svg-FeXcUOYwRSP7cCJH .node rect,#mermaid-svg-FeXcUOYwRSP7cCJH .node circle,#mermaid-svg-FeXcUOYwRSP7cCJH .node ellipse,#mermaid-svg-FeXcUOYwRSP7cCJH .node polygon,#mermaid-svg-FeXcUOYwRSP7cCJH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-FeXcUOYwRSP7cCJH .rough-node .label text,#mermaid-svg-FeXcUOYwRSP7cCJH .node .label text,#mermaid-svg-FeXcUOYwRSP7cCJH .image-shape .label,#mermaid-svg-FeXcUOYwRSP7cCJH .icon-shape .label{text-anchor:middle;}#mermaid-svg-FeXcUOYwRSP7cCJH .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-FeXcUOYwRSP7cCJH .rough-node .label,#mermaid-svg-FeXcUOYwRSP7cCJH .node .label,#mermaid-svg-FeXcUOYwRSP7cCJH .image-shape .label,#mermaid-svg-FeXcUOYwRSP7cCJH .icon-shape .label{text-align:center;}#mermaid-svg-FeXcUOYwRSP7cCJH .node.clickable{cursor:pointer;}#mermaid-svg-FeXcUOYwRSP7cCJH .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-FeXcUOYwRSP7cCJH .arrowheadPath{fill:#333333;}#mermaid-svg-FeXcUOYwRSP7cCJH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-FeXcUOYwRSP7cCJH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-FeXcUOYwRSP7cCJH .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-FeXcUOYwRSP7cCJH .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-FeXcUOYwRSP7cCJH .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-FeXcUOYwRSP7cCJH .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-FeXcUOYwRSP7cCJH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-FeXcUOYwRSP7cCJH .cluster text{fill:#333;}#mermaid-svg-FeXcUOYwRSP7cCJH .cluster span{color:#333;}#mermaid-svg-FeXcUOYwRSP7cCJH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-FeXcUOYwRSP7cCJH .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-FeXcUOYwRSP7cCJH rect.text{fill:none;stroke-width:0;}#mermaid-svg-FeXcUOYwRSP7cCJH .icon-shape,#mermaid-svg-FeXcUOYwRSP7cCJH .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-FeXcUOYwRSP7cCJH .icon-shape p,#mermaid-svg-FeXcUOYwRSP7cCJH .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-FeXcUOYwRSP7cCJH .icon-shape rect,#mermaid-svg-FeXcUOYwRSP7cCJH .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-FeXcUOYwRSP7cCJH .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-FeXcUOYwRSP7cCJH .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-FeXcUOYwRSP7cCJH :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
通过
修改
学生提交作业(图片/PDF/Word)
OpenClaw批量识别OCR+学科结构化
智能批改(按学科知识点判分)
生成个性化评语(结合学生水平+上次进步点)
学情追踪(记录错误模式+知识点掌握情况)
老师审核
自动推送学生/家长
老师调整评语/分数后推送
月度自动生成家长报告(微信推送)
2.2 核心功能拆解
2.2.1 个性化评语生成
- 生成逻辑:
- 读取学生本次作业得分、错误知识点
- 调取学生历史作业数据,对比上次进步点
- 结合学生当前水平(基础/进阶/培优)生成差异化评语
- 示例:
「小明同学本次作业正确率85%,较上次提升10%!尤其在一般过去时的运用上进步明显,不过仍需注意where/were的拼写混淆,下次课我们重点练习这类易错点~」
- 价值:告别「继续努力」模板化评语,让家长和学生感受到针对性关注。
2.2.2 学情追踪
- 追踪维度:
- 知识点错误频率(如「一般过去时」错误率30%)
- 高频错误模式(如「小明总是搞混where/were」)
- 成绩趋势(近10次作业正确率变化)
- 进步/薄弱点对比
- 存储方式:学生维度的「错误知识库」,为后续个性化辅导提供数据支撑。
2.2.3 家长报告
- 生成频率:每月自动生成
- 内容结构:
- 本月作业整体表现(正确率、排名)
- 进步亮点(如「阅读理解正确率提升20%」)
- 薄弱知识点(如「语法填空易错点」)
- 下月学习建议
- 推送方式:通过企业微信/微信公众号推送给家长,实现透明化家校沟通。
2.2.4 教师减负
- 工作流:老师只需审核AI批改结果,可调整分数/评语,无需逐题批改
- 效率提升:节省70%批改时间,让老师专注备课、授课与个性化辅导
- 管理功能:查看班级整体学情,定位班级共性问题,优化教学内容。
三、系统架构:OpenClaw驱动的教培自动化引擎
3.1 整体架构图(Mermaid)
#mermaid-svg-G8jfUaiUB7VHfJrY{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-G8jfUaiUB7VHfJrY .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-G8jfUaiUB7VHfJrY .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-G8jfUaiUB7VHfJrY .error-icon{fill:#552222;}#mermaid-svg-G8jfUaiUB7VHfJrY .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-G8jfUaiUB7VHfJrY .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-G8jfUaiUB7VHfJrY .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-G8jfUaiUB7VHfJrY .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-G8jfUaiUB7VHfJrY .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-G8jfUaiUB7VHfJrY .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-G8jfUaiUB7VHfJrY .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-G8jfUaiUB7VHfJrY .marker{fill:#333333;stroke:#333333;}#mermaid-svg-G8jfUaiUB7VHfJrY .marker.cross{stroke:#333333;}#mermaid-svg-G8jfUaiUB7VHfJrY svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-G8jfUaiUB7VHfJrY p{margin:0;}#mermaid-svg-G8jfUaiUB7VHfJrY .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-G8jfUaiUB7VHfJrY .cluster-label text{fill:#333;}#mermaid-svg-G8jfUaiUB7VHfJrY .cluster-label span{color:#333;}#mermaid-svg-G8jfUaiUB7VHfJrY .cluster-label span p{background-color:transparent;}#mermaid-svg-G8jfUaiUB7VHfJrY .label text,#mermaid-svg-G8jfUaiUB7VHfJrY span{fill:#333;color:#333;}#mermaid-svg-G8jfUaiUB7VHfJrY .node rect,#mermaid-svg-G8jfUaiUB7VHfJrY .node circle,#mermaid-svg-G8jfUaiUB7VHfJrY .node ellipse,#mermaid-svg-G8jfUaiUB7VHfJrY .node polygon,#mermaid-svg-G8jfUaiUB7VHfJrY .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-G8jfUaiUB7VHfJrY .rough-node .label text,#mermaid-svg-G8jfUaiUB7VHfJrY .node .label text,#mermaid-svg-G8jfUaiUB7VHfJrY .image-shape .label,#mermaid-svg-G8jfUaiUB7VHfJrY .icon-shape .label{text-anchor:middle;}#mermaid-svg-G8jfUaiUB7VHfJrY .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-G8jfUaiUB7VHfJrY .rough-node .label,#mermaid-svg-G8jfUaiUB7VHfJrY .node .label,#mermaid-svg-G8jfUaiUB7VHfJrY .image-shape .label,#mermaid-svg-G8jfUaiUB7VHfJrY .icon-shape .label{text-align:center;}#mermaid-svg-G8jfUaiUB7VHfJrY .node.clickable{cursor:pointer;}#mermaid-svg-G8jfUaiUB7VHfJrY .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-G8jfUaiUB7VHfJrY .arrowheadPath{fill:#333333;}#mermaid-svg-G8jfUaiUB7VHfJrY .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-G8jfUaiUB7VHfJrY .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-G8jfUaiUB7VHfJrY .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-G8jfUaiUB7VHfJrY .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-G8jfUaiUB7VHfJrY .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-G8jfUaiUB7VHfJrY .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-G8jfUaiUB7VHfJrY .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-G8jfUaiUB7VHfJrY .cluster text{fill:#333;}#mermaid-svg-G8jfUaiUB7VHfJrY .cluster span{color:#333;}#mermaid-svg-G8jfUaiUB7VHfJrY div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-G8jfUaiUB7VHfJrY .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-G8jfUaiUB7VHfJrY rect.text{fill:none;stroke-width:0;}#mermaid-svg-G8jfUaiUB7VHfJrY .icon-shape,#mermaid-svg-G8jfUaiUB7VHfJrY .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-G8jfUaiUB7VHfJrY .icon-shape p,#mermaid-svg-G8jfUaiUB7VHfJrY .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-G8jfUaiUB7VHfJrY .icon-shape rect,#mermaid-svg-G8jfUaiUB7VHfJrY .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-G8jfUaiUB7VHfJrY .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-G8jfUaiUB7VHfJrY .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-G8jfUaiUB7VHfJrY :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
输出层
存储层
模型层
OpenClaw Agent层
输入层
学生作业上传(图片/PDF/Word)
老师上传参考答案+知识点标签
作业识别Agent
智能批改Agent
评语生成Agent
学情追踪Agent
家长报告Agent
OCR模型:图片/PDF识别
DeepSeek-R1:学科理解+逻辑判断
学生作业数据库
学情知识库
批改结果库
学生端:批改结果+评语
老师端:审核后台+学情看板
家长端:月度报告微信推送
3.2 OpenClaw核心配置:SOUL.md模板
# Soul
你是专业的教培机构AI作业批改Agent,名叫「作业助手」。你的核心目标是自动化完成作业识别、批改、评语生成与学情追踪,帮助老师减负70%,提升教学质量与家长满意度。
## 核心能力
### 1. 多格式作业识别能力
– 支持图片/PDF/Word等常见作业格式
– OCR识别手写/印刷体文字,提取题目、答案、学生信息
– 结构化输出学科内容(如英语语法题、数学计算题)
– 自动去重、补全缺失字段,保证数据完整性
### 2. 智能批改能力
– 对接参考答案与知识点标签,按学科规则判分
– 标记错误题目、错误知识点,计算正确率
– 支持主观题(如英语作文、数学解答题)智能评分
– 生成批改明细,便于老师审核
### 3. 个性化评语生成能力
– 结合学生本次作业表现、历史数据、水平层级生成差异化评语
– 突出进步点,指出薄弱点,语气亲切符合教培场景
– 避免模板化,让每个学生收到专属反馈
### 4. 学情追踪能力
– 记录学生每次作业的错误知识点、错误模式
– 生成学生维度的学情画像,追踪成绩趋势
– 分析班级共性问题,为老师教学优化提供数据支撑
– 存储学生错误知识库,为后续辅导提供依据
### 5. 家长报告生成能力
– 每月自动生成学情报告,包含成绩趋势、进步亮点、薄弱点、学习建议
– 适配微信阅读格式,简洁清晰
– 自动推送给家长,实现透明化家校沟通
## 触发规则
– 当学生/老师上传作业包时,自动触发「识别→批改→评语」流程
– 每月1号自动触发「家长报告生成+推送」流程
– 手动指令「重新批改」时,重新计算分数与评语
– 手动指令「生成报告」时,生成指定学生/班级的学情报告
## 批改与评语规则
### 学科适配(英语/数学优先)
– 英语:语法题、完形填空、阅读理解、作文批改
– 数学:计算题、应用题、证明题批改
– 其他学科可扩展
### 评语生成规范
1. 开头:称呼学生,点明本次作业整体表现(正确率/进步情况)
2. 中间:突出1-2个进步点,指出1-2个薄弱点
3. 结尾:鼓励性话语,给出下次学习建议
4. 语气:亲切、专业,符合老师口吻
### 学情追踪规范
– 按知识点维度记录错误频率(如「一般过去时」错误率30%)
– 记录高频错误模式(如「where/were混淆」)
– 按时间维度追踪正确率变化,生成趋势图
– 班级维度统计共性错误,便于老师针对性教学
### 家长报告规范
1. 整体表现:本月作业正确率、班级排名
2. 进步亮点:对比上月提升的知识点/能力
3. 薄弱点:需要重点加强的知识点
4. 下月建议:针对性学习计划
5. 格式:适配微信,图文结合,简洁易读
## 环境变量
– OPENCLAW_API_KEY: OpenClaw API密钥
– DEEPSEEK_API_KEY: DeepSeek API密钥
– OCR_API_KEY: OCR服务API密钥
– WECHAT_APPID: 微信公众号AppID
– WECHAT_SECRET: 微信公众号AppSecret
– DB_CONN: 数据库连接字符串
3.3 openclaw.json:调度与成本配置
{
"agents": {
"defaults": {
"model": {
"primary": "deepseek/deepseek-reasoner",
"fallbacks": ["anthropic/claude-sonnet-4-6"],
"temperature": 0.2,
"maxTokens": 16384
},
"budget": {
"maxCostPerDay": 20.00,
"maxCostPerMonth": 600.00,
"alertThreshold": 0.8
},
"resources": {
"maxMemory": "8GB",
"maxCPU": "4 cores",
"timeout": 300s
},
"logging": {
"level": "info",
"file": "logs/homework-grading-{date}.log",
"enableTelemetry": false
}
},
"ocr_parser": {
"inherit": "defaults",
"model": {
"temperature": 0.0,
"maxTokens": 8192
},
"budget": {
"maxCostPerDay": 10.00
}
},
"grader": {
"inherit": "defaults",
"model": {
"temperature": 0.0,
"maxTokens": 8192
},
"budget": {
"maxCostPerDay": 6.00
}
},
"comment_generator": {
"inherit": "defaults",
"model": {
"temperature": 0.3,
"maxTokens": 4096
},
"budget": {
"maxCostPerDay": 2.00
}
},
"learning_analyst": {
"inherit": "defaults",
"model": {
"temperature": 0.1,
"maxTokens": 8192
},
"budget": {
"maxCostPerDay": 1.00
}
},
"parent_reporter": {
"inherit": "defaults",
"model": {
"temperature": 0.2,
"maxTokens": 4096
},
"budget": {
"maxCostPerDay": 1.00
}
}
},
"schedules": [
{
"task": "parse_and_grade",
"interval": "manual",
"agent": "ocr_parser,grader"
},
{
"task": "generate_comments",
"interval": "manual",
"agent": "comment_generator"
},
{
"task": "track_learning",
"interval": "1d",
"time": "23:00",
"agent": "learning_analyst"
},
{
"task": "generate_parent_report",
"interval": "1mo",
"day": "1",
"time": "09:00",
"agent": "parent_reporter"
}
],
"apiKeys": {
"openclaw": "${OPENCLAW_API_KEY}",
"deepseek": "${DEEPSEEK_API_KEY}",
"ocr": "${OCR_API_KEY}",
"wechat": "${WECHAT_SECRET}"
}
}
配置核心要点:
- 模型选择:DeepSeek-R1作为主模型,适配学科理解与长文本生成
- 任务拆分:将识别、批改、评语、分析、报告拆分为独立Agent,便于调试
- 定时调度:学情追踪每日执行,家长报告每月自动生成,兼顾实时性与效率
- 成本控制:每日预算$20,月预算$600,控制AI调用成本
四、核心代码实现:从作业到报告的全流程
4.1 环境准备与依赖安装
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Windows: venv\\Scripts\\activate
# 安装核心依赖
pip install python-dotenv requests pandas openclaw pytesseract pillow PyPDF2 python-docx openpyxl wechatpy
4.2 作业识别与批改模块
# homework_parser.py
import os
import zipfile
import json
import pandas as pd
from dotenv import load_dotenv
from PIL import Image
import pytesseract
from PyPDF2 import PdfReader
from docx import Document
from openclaw import Agent
load_dotenv()
agent = Agent(
soul_path="SOUL.md",
model="deepseek/deepseek-reasoner",
api_key=os.getenv("DEEPSEEK_API_KEY")
)
def extract_text_from_image(file_path):
"""提取图片/OCR文本"""
img = Image.open(file_path)
text = pytesseract.image_to_string(img, lang="chi_sim+eng")
return text
def extract_text_from_pdf(file_path):
"""提取PDF文本"""
reader = PdfReader(file_path)
text = ""
for page in reader.pages:
text += page.extract_text()
return text
def extract_text_from_word(file_path):
"""提取Word文本"""
doc = Document(file_path)
text = ""
for para in doc.paragraphs:
text += para.text + "\\n"
return text
def parse_homework(file_path, subject="english"):
"""解析单份作业"""
ext = file_path.split(".")[–1].lower()
if ext in ["png", "jpg", "jpeg"]:
text = extract_text_from_image(file_path)
elif ext == "pdf":
text = extract_text_from_pdf(file_path)
elif ext in ["doc", "docx"]:
text = extract_text_from_word(file_path)
else:
raise ValueError(f"不支持的文件格式: {ext}")
prompt = f"""
请将以下{subject}作业文本结构化提取为JSON格式,包含:
– student_name: 学生姓名
– class_name: 班级
– subject: 学科
– answers: 列表,每题包含question_id, answer, is_correct, error_knowledge_point
作业文本:
{text}
输出纯JSON格式,不要其他内容。
"""
response = agent.run(prompt)
return json.loads(response)
def grade_homework(parsed_data, answer_key):
"""批改作业"""
prompt = f"""
请根据参考答案批改以下作业,计算正确率,标记错误知识点:
学生作业:
{json.dumps(parsed_data, ensure_ascii=False)}
参考答案:
{json.dumps(answer_key, ensure_ascii=False)}
输出JSON格式:
{{
"correct_count": 8,
"total_count": 10,
"accuracy": 80,
"errors": [
{{
"question_id": "Q3",
"student_answer": "were",
"correct_answer": "where",
"error_knowledge": "where/were拼写混淆"
}}
]
}}
"""
response = agent.run(prompt)
return json.loads(response)
if __name__ == "__main__":
# 示例:解析并批改一份作业
parsed = parse_homework("homework.png", subject="english")
answer_key = {"Q1": "A", "Q2": "B", "Q3": "where", "Q4": "C"}
result = grade_homework(parsed, answer_key)
print(json.dumps(result, ensure_ascii=False, indent=2))
4.3 个性化评语与学情追踪模块
# comment_and_tracking.py
import os
import json
import pandas as pd
from dotenv import load_dotenv
from openclaw import Agent
from sqlalchemy import create_engine
load_dotenv()
engine = create_engine(os.getenv("DB_CONN"))
agent = Agent(
soul_path="SOUL.md",
model="deepseek/deepseek-reasoner",
api_key=os.getenv("DEEPSEEK_API_KEY")
)
def load_student_history(student_name):
"""加载学生历史作业数据"""
query = f"SELECT * FROM student_homework WHERE student_name = '{student_name}' ORDER BY submit_time DESC LIMIT 10"
return pd.read_sql(query, engine)
def generate_comment(student_name, grade_result, history_df):
"""生成个性化评语"""
prompt = f"""
请为学生{student_name}生成作业评语:
本次作业结果:
{json.dumps(grade_result, ensure_ascii=False)}
历史作业数据(近10次):
{history_df[["submit_time", "accuracy"]].to_json(orient="records")}
要求:
1. 亲切自然,符合老师口吻
2. 突出进步点,指出薄弱点
3. 避免模板化,体现个性化
4. 字数控制在100-150字
"""
return agent.run(prompt)
def track_learning(student_name, grade_result):
"""更新学情追踪数据"""
errors = grade_result["errors"]
for err in errors:
data = {
"student_name": student_name,
"error_knowledge": err["error_knowledge"],
"question_id": err["question_id"],
"submit_time": pd.Timestamp.now()
}
pd.DataFrame([data]).to_sql("student_learning", engine, if_exists="append", index=False)
print(f"✅ 已更新{student_name}的学情数据")
if __name__ == "__main__":
student = "小明"
grade_result = {
"correct_count": 8,
"total_count": 10,
"accuracy": 80,
"errors": [{"question_id": "Q3", "error_knowledge": "where/were拼写混淆"}]
}
history = load_student_history(student)
comment = generate_comment(student, grade_result, history)
print("📝 个性化评语:", comment)
track_learning(student, grade_result)
4.4 家长报告生成与推送模块
# parent_report.py
import os
import json
import pandas as pd
from dotenv import load_dotenv
from openclaw import Agent
from wechatpy import WeChatClient
load_dotenv()
agent = Agent(
soul_path="SOUL.md",
model="deepseek/deepseek-reasoner",
api_key=os.getenv("DEEPSEEK_API_KEY")
)
wechat_client = WeChatClient(os.getenv("WECHAT_APPID"), os.getenv("WECHAT_SECRET"))
def generate_monthly_report(student_name):
"""生成月度学情报告"""
query = f"SELECT * FROM student_homework WHERE student_name = '{student_name}' AND submit_time >= DATE_SUB(NOW(), INTERVAL 1 MONTH)"
df = pd.read_sql(query, engine)
if df.empty:
return "本月无作业数据"
accuracy_trend = df["accuracy"].tolist()
error_query = f"SELECT error_knowledge, COUNT(*) as cnt FROM student_learning WHERE student_name = '{student_name}' AND submit_time >= DATE_SUB(NOW(), INTERVAL 1 MONTH) GROUP BY error_knowledge ORDER BY cnt DESC LIMIT 3"
top_errors = pd.read_sql(error_query, engine)
prompt = f"""
请为学生{student_name}生成月度学情报告:
本月作业正确率趋势:{accuracy_trend}
高频错误知识点:{top_errors.to_json(orient="records")}
要求:
1. 结构清晰:整体表现→进步亮点→薄弱点→下月建议
2. 语言简洁,适合家长阅读
3. 适配微信排版,使用换行和列表
"""
return agent.run(prompt)
def send_to_parent(student_name, parent_openid, report):
"""推送报告到家长微信"""
wechat_client.message.send_text(
user=parent_openid,
content=f"【月度学情报告】{student_name}家长您好,本月孩子的学习报告如下:\\n{report}"
)
print(f"📱 已推送报告给{student_name}家长")
if __name__ == "__main__":
student = "小明"
parent_openid = "oxxxxxx"
report = generate_monthly_report(student)
send_to_parent(student, parent_openid, report)
五、收益与效率分析:月入5万的商业逻辑
5.1 效率提升对比
| 作业识别 | 100份/小时 | 1000份/小时 | +10倍 |
| 批改打分 | 100份/2小时 | 100份/10分钟 | -92% |
| 评语生成 | 100份/1小时 | 100份/5分钟 | -92% |
| 学情追踪 | 手动统计/无 | 自动实时更新 | ∞ |
| 家长报告 | 手动生成/月 | 自动生成/月 | -100% |
| 总耗时 | 100份/3.5小时 | 100份/15分钟 | -93% |
5.2 收入模型拆解
- 单校定价:¥8,000-¥12,000/月(按学生人数阶梯定价)
- 客户数量:5所学校 → 月收入¥50,000
- 成本结构:
- AI模型成本:~¥400/月
- 服务器成本:~¥300/月
- 微信/API成本:~¥100/月
- 月总成本:~¥800/月
- 月利润:¥50,000 – ¥800 = ¥49,200
- 利润率:98.4%
5.3 规模化潜力
- 客户拓展:目标服务50所学校 → 月收入¥500,000
- 产品升级:推出培优版(个性化辅导计划、错题本自动生成),提升客单价至¥15,000/月
- 学科拓展:覆盖语文、物理、化学等更多学科,提升单校ARPU
- 渠道合作:与教培机构、学校管理系统厂商合作,分成模式拓展客户
六、风险控制与长期优化
6.1 核心风险与规避
- 风险:学生作业包含敏感个人信息,泄露会导致法律风险
- 规避:数据加密存储,签署保密协议,符合《个人信息保护法》《未成年人保护法》
- 风险:OCR/AI批改错误,导致分数/评语偏差,影响家长信任
- 规避:老师审核机制,建立错误反馈系统,持续优化模型
- 风险:教培行业监管政策变化,可能影响业务
- 规避:聚焦「作业批改+学情分析」工具属性,避免学科培训内容
- 风险:过度依赖OpenClaw/DeepSeek API,服务中断
- 规避:多模型 fallback,本地备份核心逻辑,定期导出数据
6.2 长期优化方向
- 错题本自动生成,推送给学生针对性练习
- 个性化学习路径推荐,基于学情数据定制学习计划
- 支持直播课/录播课学情对接,实现全学习周期管理
- 开发SaaS网页端/小程序,支持学校/老师/家长/学生多端登录
- 推出API服务,供其他教培系统集成
- 建立自动化计费系统,实现按学生人数阶梯收费
- 分享老师减负案例,打造教培AI工具品牌
- 与EdTech社区合作,举办教学效率提升分享会,拓展客户
七、总结与行动建议
7.1 核心总结
本文拆解了一个月入¥50,000的教培AI作业批改案例,核心结论是:
- 减负是核心价值:将老师从机械批改中解放,专注教学与个性化辅导
- 个性化是竞争力:告别模板化评语,用AI生成专属反馈,提升家长与学生满意度
- SaaS化是商业模式:将工具打包为按校收费的SaaS服务,实现规模化盈利
- 高毛利是优势:边际成本极低,利润率超过98%,具备极强的盈利能力与抗风险能力
7.2 行动建议
如果你是教培从业者或想切入EdTech领域,建议按以下步骤行动:
7.3 最后提醒
AI是「效率放大器」,不是「替代者」。教培的核心永远是老师对学生的关怀与专业教学,自动化工具只是帮老师把更多时间留给核心工作,而不是消耗在作业批改上。
八、附录:资源与参考
8.1 开源资源
- OpenClaw官方文档:https://docs.openclaw.ai
- pytesseract:https://pypi.org/project/pytesseract/
- PyPDF2:https://pypdf2.readthedocs.io/
- wechatpy:https://wechatpy.readthedocs.io/
8.2 参考资料
- EdTech社区案例原文:https://example.com/edtech-homework-grading
- 《教培机构数字化转型实战》
- 《SaaS产品设计与商业化指南》