凌晨一点半,办公桌上还摆着两摞作业本。这是我做老师时最熟悉的画面,也是很多一线老师至今躲不掉的日常。每天课后要收几十份、甚至上百份作业,逐题看、逐题批,还要写评语、改错别字,耗时且重复。如果你也有过“能不能让机器帮我批改作业”的念头,又不想一上来就写代码,那么用华为云智能体平台搭一个辅助批改作业的工作流,是一个值得花一个下午去折腾的方案。它把“收作业—看作业—批改—反馈”这个过程拆成机器可以执行的步骤,让人只处理机器判断不了的部分。这篇文章是我的实操记录,适合老师、教务人员、教育产品开发者,也适合所有刚接触智能体和低代码工作流、想找一个具体场景练手的同学。
1. 先别急着拖节点:在画布之前把批改需求拆解清楚
经常看到有人第一次进智能体平台,上来就把“开始”节点拖到画布,然后对着左侧的节点库发呆十分钟。其实搭建批改作业工作流之前,最该做的是把“批改作业”四个字拆成计算机能理解、能执行的动作。不夸张地说,需求拆解的深度,直接决定了后面流程改来改去的次数。
1.1 作业批改的三种类型,决定工作流的三种路线
同样是“批改作业”,背后处理逻辑完全不同。我一般把常见的作业分成三类:
- 客观填答型:选择题、判断题、填空题、计算题。答案基本确定,适合用规则匹配或者字典比对来完成。
- 半开放型:比如数学应用题、物理计算题。最终答案可能不唯一,但解题步骤和关键采分点可以提前约定,适合用大模型“按点给分”。
- 完全开放型:作文、论述题、案例分析。没有标准答案,依赖语义理解,必须用能力较强的大模型,并且一定要有老师人工复核环节。
明确要处理的是哪一类,直接决定了工作流是走规则分支还是大模型分支,也决定了后面提示词怎么组织。我见过有人非要让同一个工作流处理“数学填空题”和“语文作文”,结果要么规则匹配太死板,要么大模型回答不稳定,最后两头都费劲。正确的做法是先选一个切入点,比如“先只做作文批改”,或者“先只做数学主观题批改”,跑通一个场景,再横向扩展。
1.2 一条可以复用的四段式工作流骨架
如果把三类作业强行统一到一个框架里,你会发现流程本质上长这样:
- 输入预处理:接收作业文件或文本,必要时调用OCR识别,把图片变成纯文本。
- 题目拆分:把一整份作业拆成一道一道的独立题目,明确每一题的题型和分值。
- 批改判定:客观题走规则对比,主观题走大模型语义判断。
- 结果反馈:输出得分、问题点、批改建议,供老师复核使用。
这个四段式骨架是我反复验证后觉得通用性最强的一套结构。在华为云智能体平台的工作流画布上,它对应的节点并不复杂,无非是“开始”节点、文本/OCR处理节点、条件分支节点、大模型节点、输出/通知节点。后面无论扩展多少场景,骨架基本都是这一套,变的只是每段里的具体参数和提示词内容。
1.3 “辅助”两个字的设计边界:保留人工复核
我必须反复强调一件事:这个工作流是“辅助批改”,不是“自动批改”。差在哪里?自动批改意味着系统直接给出最终结论并被直接采信;辅助批改意味着系统给出建议,由老师来决定是否采纳。
我从一开始就按“辅助”来设计。原因有两点:大模型偶尔会犯错,尤其是主观题,同样的答案换个问法可能就得到不同评价;教育场景里,老师对评语的语气和尺度有自己的判断,AI替老师做最终决定并不合适。所以我的工作流里一定会留一个“人工复核”的出口。最简单的做法是:输出节点除了评分和建议,还附带一个“需要老师确认”的状态字段。老师看到结果后,可以一键采纳或者修改后再发给学生。这一步看起来毫不起眼,但正是它让整个工作流真正可落地。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 平台准备:账号开通、配套服务与模型选型
在动手拖节点之前,先把环境和配套服务准备好。这一节偏操作流程,但每一步都很关键,缺了某个服务,后面跑工作流时会卡住。
2.1 进入华为云智能体平台的三个步骤
第一步,访问华为云官网,注册账号并完成实名认证。实名认证是必须的,不完成的话很多云服务无法购买,也无法调用API。
第二步,在控制台搜索“智能体平台”或相关入口,进入服务页面。不同批次的控制台里,这个入口位置不完全一样:有的在“EI企业智能”分类下,有的在“AI服务”或“应用编排”分类下。判断标准其实很简单,看到“创建智能体”“工作流”“智能体广场”这些概念,就说明你已经进入了正确的平台。
第三步,创建智能体。点击“创建智能体”,填写名称,比如“作业批改助手”,系统会自动生成一个智能体空间。在这个空间里可以创建多个工作流,后续测试和发布都在这里完成。
2.2 工作流运行前需要准备的配套服务
这个工作流最少会用到以下几类服务:
| 服务 | 用途 | 说明 |
|---|---|---|
| 对话大模型 | 主观题批改与评语生成 | 平台通常已经集成,在工作流中直接选择即可 |
| OCR文字识别 | 识别作业图片、拍照件、PDF扫描件 | 请提前开通文字识别服务,并确认API调用方式 |
| 对象存储OBS | 存放作业图片或文件 | 如果作业以文件链接形式提交,大概率会用到 |
| 通知服务 | 把批改结果推送给老师 | 可选,但推荐开通,方便异步查看结果 |
很多人只关注大模型,忽视了OCR。但就批改作业这个场景来说,文本解析往往是决定成败的一环。作业如果是拍照上传的,识别不到干净文本,后面大模型再强也是巧妇难为无米之炊。如果你预算有限,我甚至建议先把钱花在OCR的准确率上,而不是一上来就选最贵的大模型。
2.3 模型选型:不同题目类型用不同能力档位
模型选型的核心原则是:在满足效果的前提下,控制成本。
- 客观题:完全不需要大模型参与,用规则节点即可。
- 半开放题:选中档模型即可。只要提示词写得清楚,一般都能按采分点来判断。
- 开放题:选上下文窗口大、指令跟随能力强的模型。因为作文和论述题的输入通常不短,模型需要能“读完全文”再评价。
我自己的习惯是,如果平台允许在同一工作流里挂不同模型,就把客观题和主观题拆成两个分支。客观题走规则,主观题才调用大模型。这样做的好处是省钱,尤其是一个班几十份作业批量批改时,成本差异会非常明显。当然,如果平台只支持全局绑定一个默认模型,那就选中间档位,靠提示词来约束效果。
3. 第一版工作流实操:从画布到节点的完整配置过程
平台环境准备好之后,就可以开始搭了。我建议第一版尽量简单,目标是先跑通“作业进来,批改建议出去”的最小闭环。不要一开始就想着加各种分支和通知,先把主线打通,再逐步往上面挂东西。
3.1 创建空白工作流并搭好基础画布
在智能体空间里点击“创建空白工作流”,命名后进入画布。画布左侧是节点库,右侧是属性配置面板,中间是拖拽区。节点之间用连线表示数据流向,上游节点的输出会作为下游节点的输入。
第一版的节点顺序建议这样排:
开始 → OCR/文本解析 → 大模型批改 → 输出结果
先不急着加分支、加通知,跑通后再逐步增加节点。用最小流程理解工作流的运行机制,比一开始堆一堆节点高效得多。很多平台示例模板为了让用户感觉“功能强大”,连了一堆可选节点,看着很全,真跑起来反而因为环节太多、链路太长,出了问题都不好排查。
3.2 配置“开始”节点:让老师能够提交作业
“开始”节点是工作流的入口,它决定调用方(也就是老师)需要提供哪些信息。我给这个节点设计两个字段:
- 作业内容(必填):可以是纯文本,也可以是图片或文件地址。
- 批改要求(选填):给老师填写本次批改的特殊要求,比如“只批改第三题”“这是初二作文,内容40分,语言40分,结构20分”。
给字段起名的时候尽量用“作业内容”“批改要求”这种一眼能看懂的名字,后面引用时才不会晕。我见过有人用“text1”“arg2”这类命名,等节点一多,自己都分不清哪个字段对应哪个数据,调试时非常痛苦。字段名一旦确定,后面所有节点都要用它,所以宁可前面多花一分钟想名字。
3.3 文本解析节点:把图片变成大模型能读的文字
如果老师提交的是图片,那你需要在画布里拖入一个文本解析节点,并调用OCR服务。配置要点如下:
- 识别类型:选择“手写体识别”或“印刷体识别”,取决于作业类型。
- 图片地址:引用“开始”节点的“作业内容”字段。
- 输出变量:给识别结果起一个变量名,比如“识别文本”。
这里有个容易被忽略的细节:手写体识别前,最好在“开始”节点上就要求老师按规范方式拍照,比如提示“保证光线充足、正对作业本、不要斜拍”。斜拍的图片经过OCR后,识别准确率下降得非常快。我实际测过,同样一份作业,正拍和斜拍的识别结果差别非常明显。
3.4 大模型节点:主观题批改的核心调用
接下来拖入“大模型”节点,这是整个工作流里最值得花时间配置的部分。
配置项一般包括:
- 模型选择:选一个能处理长文本的对话模型。
- 用户提示词:把上游字段引用进来,拼成一段完整提示。
- 输出变量名:给模型输出起名,比如“批改结果”。
用提示词模板把“识别文本”和“批改要求”拼起来,这一步是关键。大模型节点的输出默认是文本,如果你让模型输出JSON,那这里拿到的就是JSON字符串。后续如果想用输出节点按字段展示,可以再接一个代码节点或变量提取节点,把JSON里的得分、错误点、评语分别拆出来。
我第一次搭的时候漏了这个拆解步骤,导致输出节点只能把一长串JSON原样抛给老师,完全没法看。所以如果你要让结果好看一点,一定不要忽略JSON解析这一步。
3.5 分支与输出:让结果按需分流
第一版跑通以后,再考虑增加条件分支。常见的分支场景:
- 如果“作业内容”是文本,直接进大模型批改;
- 如果“作业内容”是图片,先进OCR再进大模型批改。
用条件分支节点可以判断输入格式或内容标识,把不同输入导到不同处理路径。最后拖入“输出”节点,配置返回字段,比如“得分”“错误点”“评语”。如果开了通知服务,还可以在输出前加一个“通知”节点,把批改结果直接推送到老师绑定的消息渠道。
我建议第一版先不加通知节点,直接在平台里查看输出结果就够了。等验证完整套流程可靠了,再把通知加上。节点越多,排查链路越长,第一版保持精简是提高成功率的有效方式。
4. 批改逻辑设计:提示词、评分标准与防误判机制
很多人觉得工作流搭好了,剩下无非是填一段提示词。其实提示词才是“批改质量”真正的主战场。节点连接方式决定流程能不能跑通,提示词决定批得准不准、稳不稳。
4.1 提示词四层结构,让大模型的输出稳下来
我平时写批改类提示词,固定使用四层结构:
- 角色设定:告诉模型你要扮演什么角色。
- 任务说明:明确指出要批改的对象和范围。
- 评分标准:把分值分配、采分点、扣分规则写清楚。
- 输出格式:约束模型输出的结构,方便下游解析。
拿数学解答题举例,我会这样写:
code复制你是一位初中数学老师,擅长按步骤给学生打分。
请批改下面这位学生的解答过程,并严格按评分标准给分。
学生解答:
{{作业内容}}
评分标准:
- 设未知数:2分
- 列方程正确:4分
- 解方程过程正确:4分
- 答句完整:2分
只输出JSON,不要任何额外解释:
{"得分": 0, "错误点": [], "改进建议": ""}
注意“只输出JSON”这个约束非常重要。如果不加约束,大模型很可能输出一大段“根据您的要求……”之类的说明,原本要接输出节点展示结构化结果,结果全乱了。我还见过模型在JSON后面补一句“希望能帮到你”,直接把下游解析器干崩。
4.2 降低误判的四个约束策略
主观题批改最怕误判。我总结出四个约束策略,能明显降低翻车率:
- 限定范围:明确告诉模型“只批改指定的题目,不要扩展到其他内容”。
- 约束格式:指定输出JSON,字段固定,不许额外发挥。
- 允许未知:当模型判断不了时,输出“无法判断”,而不是硬着头皮给分。
- 设置兜底:如果识别文本为空或内容与题目无关,统一输出“需要人工复核”。
这四句话看起来简单,但在实际测试中非常管用。很多稳定性问题不是因为模型不够聪明,而是因为提示词给了模型太多自由发挥空间。有一次我把评分标准里一个字段名写得不清楚,模型每次都在该字段里塞一长段解释,最后只能靠加一条“严禁额外解释”的约束才解决。
4.3 批改意见的表达方式,决定产品能不能让老师放心用
提示词里还有一类容易被忽略的细节:模型输出评语时的语气。
我建议在提示词里加一句:
code复制如果你发现学生答错了,请用“这里可能需要重新检查”的口吻提示,不要使用“你做错了”“这都不会”等刺激性表达。
不是讨好学生,而是为了安全。AI的误判率再低,也免不了偶发情况。如果模型直接说“你做错了”,老师又没有逐字核对,就这样发给学生,很容易引起误会。把批改意见设计成“建议”而非“裁决”,既保留了老师的权威,也降低了AI犯错带来的影响。说白了,这就是让AI“好好说话”。
5. 测试与调优:从“流程能跑”到“结果能看”
工作流画布上把节点连好,只是万里长征第一步。我见过太多人把这个状态当成“做完了”,结果拿真实作业一测全是问题。测试这个环节,永远值得多花时间。
5.1 准备一份有代表性的测试集
不能只拿一两份正常答案来测。我建议至少准备这样几份样本:
| 样本类型 | 测试目的 |
|---|---|
| 一份工整的电子版作业 | 验证主流程是否通畅 |
| 一份手写拍照作业 | 验证OCR环节效果 |
| 一份空白答案 | 验证兜底逻辑是否触发 |
| 一份内容跑题的答案 | 验证模型是否会被带偏 |
| 一份超长答案 | 验证token上限和批改响应时间 |
用这五类样本各测一遍,基本能发现八成以上的隐患。尤其是“空白答案”和“跑题答案”,很多模型在这两种情况下容易强行为自己“圆场”,给一个看起来合理但实际没有依据的分数。
5.2 用节点日志定位问题发生在哪一环
工作流运行完,平台一般会记录每个节点的输入和输出。排查问题的顺序应该是从最上游看起:
如果OCR节点输出的就是乱码,问题在识别环节,不要浪费时间改大模型提示词。如果OCR输出正常,但大模型结果不对,才去调整提示词或换模型的档位。
很多初学者一看到批改结果不对,就疯狂改提示词,改来改去没效果,其实问题出在更早的解析阶段。养成看节点日志的习惯,能省下大量无效调参时间。平台上的“运行记录”就是你的排查地图,每一条数据流怎么走的,一翻就知道。
5.3 每次只改一个变量,让调优有迹可循
调提示词时,我最常犯的错就是一改改三四处。改完角色、改了评分标准、改了输出格式,结果跑完测试发现结果变好了,却不知道是哪一步起的作用,下次效果退化了也没法定位。
后来我固定了一套方法:每次只改一个变量,改完跑整个测试集,人工记录这几个指标:
- 得分是否与人工判断一致;
- 错误点是否真正命中;
- 改进建议是否可采纳;
- 输出格式是否始终符合预期。
测试集不大时,人工复核成本其实很低。把每次调优的结果记录下来,下次回退版本时也有依据。这个方法听着笨,但效果非常稳。
5.4 发布、分享与给同事的使用说明
跑完测试后,点击“发布”。发布后的工作流会生成一个可调用的版本,可以生成浏览器访问链接,也可以作为一个API接入教学系统。
如果要给其他老师使用,建议附上一页极简说明,写清楚三件事:
- 作业按什么格式上传(图片/文本/文件);
- 哪些情况需要人工复核(字迹潦草、答案空白、模型提示“无法判断”);
- 出问题后找谁来调整配置。
千万别把未通过完整测试的工作流直接发给同事。同一份作业,你拿测试集验证过没问题,不代表在同事手里也一定没问题,尤其是他们的手机拍照质量千差万别,一旦出了问题,反而容易对整个方案失去信任。
6. 实际使用中踩过的坑:解析、成本、并发和数据安全
连续跑了一两个月真实批改场景后,我总结出几个最值得警惕的坑。写在这里,希望你可以在搭建初期就直接规避掉,不用再走一遍我踩过的弯路。
6.1 手写识别是最容易翻车的一环
不同学生的书写差异巨大,横线、涂改、连笔、拍照倾斜都会导致识别错误。识别不准,后面的批改全成了“在垃圾数据上做判断”。
目前比较实用的应对办法:
- 拍照时保证正对作业本、光线均匀,减少歪斜;
- 重要作业尽量让学生提交电子版;
- 如果必须识别手写,选择手写体识别专用模型,并把识别结果展示在页面上,让老师一眼就能发现识别错误。
我实际用下来的感受是:OCR不能完全替代人工录入,但可以显著减少工作量。只要识别准确率在七成以上,配合人工快速校对,已经比纯手工批改高效很多。你若想达到九成以上的准确率,就需要在实际使用中不断积累该班级学生的常见字体特征,这不是一两天能完成的。
6.2 成本控制:别让一次批改吃掉太多token
大模型调用一般是按token计费的。批改场景里,token消耗主要在三个地方:
- 提示词本身:角色设定、评分标准;
- 学生答案文本:答案越长越耗token;
- 模型输出:评语越长越耗token。
要控制成本,可以从几个方向入手:
- 客观题尽量走规则分支,不调用大模型;
- 提示词不要写重复内容,精简评分标准,把不必要的前缀说明删掉;
- 批改结果只输出关键字段,不要长篇大论;
- 超长答案可以截取前N个字,或在提示词中告诉模型“只关注前600字内是否出现采分点”。
如果你把工作流嵌入教学系统,建议给每份作业设置一个调用上限,比如“单份作业最多调用两次”,避免异常情况下的循环调用导致费用飞涨。模型调用次数和批改质量之间要找一个平衡点,这个平衡点是靠长期看账单和实际批改效果摸索出来的。
6.3 并发限制下,批量作业应该怎么提交
工作流在平台上通常会有并发限制。一个班几十份作业同时提交时,容易出现排队或超时。解决办法:
- 在提交端做分批处理,比如每10份一批;
- 给每份作业建一个唯一编号,方便批量提交后做结果对账;
- 如果平台支持异步处理,优先使用“创建任务—回调结果”的模式,而不是同步等待所有结果都返回。
我自己的经验是:批量批改不要贪多,稳比快重要。宁可让老师多等几分钟,也不要因为并发问题导致整个任务失败。一次任务失败后重试的代价,往往比最开始分批次慢慢提交要大得多。
6.4 学生作业的数据安全底线
学生作业内容属于个人信息,涉及姓名、学号、书写笔迹等信息。这一点必须重视。我的做法是:
- 在上传前对作业图片中的姓名、学号做脱敏处理;
- 工作流里不持久化存储完整的学生个人信息;
- 分享或导出工作流时,不携带任何真实学生数据;
- 如果系统内有历史批改记录,设置好访问权限,避免无关人员查看。
数据安全不是技术细节,而是底线问题。前期多花十分钟做好脱敏,后面
