《扣子编程:从零开始搭建智能体 卢欣欣 清华大学出版社》【摘要 书评 试读】- 京东图书
《扣子编程:从零开始搭建智能体》全书案例持续更新-CSDN博客
11.3.1创建数据库
为实现错题的持久化归档,本案例需存储错题信息,以便后续通过错题分析为用户提供针对性的强化训练。具体创建步骤如下。
步骤1:创建数据库。在扣子编程主页,单击左侧导航栏的"资源库"进入资源管理页面;随后单击右上角的"+ 资源"按钮,在下拉菜单中选择"数据库"选项,如图11-3所示。

图11-3 创建数据库
步骤2:选择数据库类型。 在弹出的"创建数据库"对话框中,选择"扣子数据库",如图11-4所示。

图11-4 选择数据库创建方式
步骤3:配置基本信息。 在"创建数据库"对话框中,输入数据表名称"error_question_list"及其描述信息,单击图标生成按钮
自动生成专属图标。确认无误后,单击"确认"按钮,如图11-5所示。

图11-5 填写数据表基本信息
步骤4:配置字段结构。系统将自动进入"新建数据表"窗口,权限模式保持默认的"单用户模式"。本案例中,错题表(error_question_list)的结构设计如表11-1所示。
表11-1 错题表的结构
|------------------|----------|----------|--------|
| 字段名称 | 数据类型 | 是否必填 | 描述 |
| question_content | String | 是 | 题目描述 |
| student_answer | String | 是 | 学生作答 |
| standard_answer | String | 是 | 正确答案 |
| error_analysis | String | 是 | 错误分析 |
| knowledge_point | String | 是 | 对应知识点 |
单击"+ 添加存储字段"按钮新增一行,根据表11-1依次录入字段名称、描述、数据类型以及是否必填,完成后单击"保存"按钮即可,如图11-6所示。

图11-6 添加数据表字段
11.3.2工作流的实现
智能作业批改工作流的核心逻辑可概括为"一源输入、核心批改、双线并行"。首先,用户拍照上传的作业图片由"开始"节点接收,并提交至"作业批改"大模型节点。该节点作为核心引擎,负责精准识别手写作答内容,并逐一判定对错、给出批改结果与详细解析。然后,基于批改结果,工作流接下来进行分支处理,将信息分别传递给下游两个并行的大模型节点。
- 生成学情报告分支:负责学情分析的"大模型节点"接收到数据后,会从多维度深度剖析学习情况,包括分知识点统计答题正确率、精准定位优势与薄弱环节,并输出具有指导意义的诊断意见。分析结果最终推送到"生成文档"节点,渲染输出一份直观的PDF学情报告。
- 提取并录入错题分支:负责错题提取的"大模型节点"则聚焦于错题要素的结构化剥离。它从批改结果中精准抽取错题内容、学生作答、参考答案、错题解析及对应知识点等核心信息。为将多条错题逐条写入数据库,提取出的数据会流转至"循环"节点,在循环体内调用"添加数据"节点,依次将错题信息持久化存储至扣子数据库中。
最终,完成各自任务的双线分支汇合,统一连接至"结束"节点,形成完整的业务闭环。完整的智能批改工作流如图11-7所示。

图11-7 工作流整体预览
接下来,将按上面图示逻辑,详细介绍各节点的搭建与参数配置过程。
1.创建工作流
步骤1:新建工作流。在扣子编程页面中,单击左侧"资源库",进入资源库管理页面。然后,单击右上角的"+ 资源"按钮,在弹出的菜单中选择"工作流",如图11-8所示。

图11-8 新建工作流
步骤2:填写工作流信息。在创建工作流的窗口中,填写本案例的工作流名称"correct_papers"及其描述信息。最后,单击"确认"按钮完成工作流的创建,如图11-9所示。

图11-9 填写工作流信息
2.开始节点的配置
本案例中,用户只需发送拍照的作业图片即可。选中"开始"节点,在右侧参数配置面板中,修改默认输入参数名为"paper_img",为变量选择"File"类型中的"Image"数据类型,并勾选"必填"选项,参数配置如图11-10所示。

图11-10 开始节点的配置
- 如果要支持用户批量上传作业图片,可为"开始"节点选择"Array>File>Image"类型。
3.作业批改
步骤1:添加大模型节点。从"开始"节点的输出端点拖拽出连接线,在弹出的节点类型菜单中选择"大模型"节点。
步骤2:配置视觉理解输入参数。选中该节点,在右侧参数配置面板中,单击默认的输入参数"input"后的"-"按钮删除该参数;然后,在视觉理解输入中单击右侧的"+"按钮,新增一个名为"paper_img"的参数,并将其与"开始"节点的"paper_img"变量绑定,如图11-11所示。

图11-11 配置输入参数
- 大模型节点的默认输入参数主要接收文本与结构化数据,适用于文字生成与逻辑推理;而"视觉理解输入"参数专用于接收图片格式数据,负责图像识别与画面信息提取。本例需识别作业图片,故使用"视觉理解输入"。
步骤3:编写系统提示词。为批改作业"大模型"节点编写如下的系统提示词,明确其角色、技能、输出规范与约束条件。
## 角色定义
中小学手写作业专属批改员,识别图片作业内容,拆分题目、学生作答、标准答案,完成正误判定,输出规整清晰的批改明细。
## 技能
-
图像识别提取内容,拆分原题、学生作答、参考答案,内容完整无改动
-
判定作答状态:正确、错误、存疑;字迹模糊、内容残缺无法辨认时,只标记存疑,不主观臆断猜测答案
-
统计总题、正确、错误、存疑数量,开篇优先展示数据
-
排序优先级:错题优先→存疑题→正确题
-
错题附加思路解析,梳理对应考查知识点
-
配色规则:仅学生作答区域标色,错误红色、存疑橙色、正确无颜色,不破坏排版换行
## 输出格式
- 开头统计
本次一共**X**道题目,正确**X**道,错误**X**道,存疑**X**道。
- 逐题明细,每题独立换行,单题结束添加浅色分割线***
-
第X题
-
原题:xxx
-
学生作答:错误用<span style="color:red">内容</span>,存疑用<span style="color:orange">内容</span>,正确正常展示
-
参考答案:xxx
-
批改结果:正确/错误/存疑,存疑标注原因
-
错题解析:仅错题填写,简明说明考点与出错问题
-
对应知识点:xxx
***
## 语言规范
语气温和贴合中小学生,简洁直白,只输出批改内容,不生成总结评价、知识点分析。
## 约束
-
内容提取客观准确,不篡改题目与答案
-
判定严谨,模糊不清内容只标存疑,绝不自行猜测作答内容下定论
-
标色只作用于学生作答行,无错乱嵌套
-
严格排序,每题末尾加分隔线,排版整洁换行正常
-
仅输出批改明细模块,其余报告内容不输出
-
严格遵守配色高亮规则,错题红、存疑题橙、正确题无高亮,做到不漏标、不错标、不混标,保证批改页面清晰规整、层次分明
步骤4:编写用户提示词。为该节点编写用户提示词,将视觉理解输入的图片传入大模型,如图11-12所示。

图11-12 用户提示词
4.学情报告生成与导出
步骤1:添加大模型节点。在作业批改大模型节点的下游添加一个新的大模型节点,用于分析答题情况并生成学情报告。
步骤2:选择轻量模型。学情报告仅需基于批改数据进行归纳统计与文案排版,无需深度逻辑推演。选用轻量模型可在保证质量的同时降低运行耗时与调用成本。选中该节点,在右侧配置面板的模型下拉列表中选择"豆包·通用·Lite",如图11-13所示。

图11-13 选择模型
步骤3:配置输入参数。 选中该节点,在右侧参数配置面板中,将默认的输入参数"input"重命名为"correct_result",并引用绑定上游作业批改大模型节点的输出变量output,如图11-14所示。

图11-14 配置输入参数
步骤4:编写系统提示词。为学情报告大模型节点编写如下的系统提示词,指定其分析维度与输出模板。
## 角色定义
作业数据分析员,依托批改数据规整生成学情报告,归纳提炼薄弱知识点,按固定模板排版输出,适配PDF查看。
## 技能
-
提取答题统计数据,汇总答题整体表现
-
统计各知识点作答情况,精准定位薄弱知识板块
-
表格可视化呈现考点数据,分层总结问题
-
规整文案评价与实操学习建议
## 输出格式
作业综合学习报告
1. 整体答题概况
概括本次作业完成情况、答题亮点与整体问题。
2. 核心知识点考查统计
掌握等级:优秀、良好、一般、薄弱
| 考查知识点 | 考查题数 | 对应题号 | 答对数量 | 答错数量 | 正确率 | 掌握情况 |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- |
3. 答题情况分析
结合错题分布,分析失分题型、审题习惯、作答规范等问题。
4. 薄弱知识点专项分析
结合错题与正确率,明确列出掌握不足的知识点,说明易错原因与漏洞所在。
5. 综合评价
给予鼓励性评价,客观点明现存不足。
6. 学习小贴士
针对薄弱知识点给出对应的巩固练习、复盘方法。
## 约束
-
所有分析严格依据实际批改数据,不凭空杜撰内容
-
精准划分强弱知识点,分析贴合实际答题情况
-
模块间统一使用---分隔,排版整洁规范
-
仅做分析总结,不重复展示原题批改明细
步骤5:编写用户提示词。为该节点编写用户提示词,将作业批改数据传入大模型节点。
作业批改数据:{{correct_result}}
步骤6:添加文档生成插件。在学情报告大模型节点的下游添加一个插件节点。在插件市场中搜索"文档"关键字,在搜索结果中展开官方提供的"Doc Maker"插件,单击"create_document"工具右侧的"添加"按钮完成挂载,如图11-15所示。

图11-15 添加插件
步骤7:配置插件输入参数。选中该节点,在右侧参数配置面板中进行如下设置:将"formatted_markdown"参数与上游学情报告大模型节点的输出变量output绑定;将"title"参数值设为"学情分析报告";将"to_format"参数值设为"pdf"。配置详情如图11-16所示。

图11-16 插件节点的输入参数配置
步骤8:完成分支闭环。将"Doc Maker"插件节点连接至"结束"节点,完成"学情报告生成"分支的流程闭环。
5.错题整理
步骤1:添加大模型节点。从作业批改大模型节点的输出端点拖拽出一条新连线,在其下游再添加一个大模型节点,用于从批改结果中结构化提取错题内容、学生作答、解析等相关要素信息。
步骤2:选择轻量模型。错题提取仅涉及数据过滤与格式转换,无需深度推理,因此同样选择"豆包·通用·Lite"轻量模型。
步骤3:配置输入参数。 选中该节点,将默认的输入参数"input"重命名为"correct_result",并引用绑定上游作业批改"大模型"节点的输出变量output,如图11-17所示。

图11-17 配置输入参数
步骤4:编写系统提示词。为提取错题信息的大模型节点编写如下提示词,严格规范输出的JSON格式,以确保后续数据能顺利写入数据库。
## 角色定义
错题结构化提取专员,读取作业批改数据,仅筛选错误题目,规整内容生成标准JSON,用于写入扣子数据库。
## 技能
-
只筛选错误题目,自动过滤正确题、存疑题目
-
剔除颜色标签、表情、分割线等排版符号,只保留纯净文本
-
严格固定字段名称,不修改键名,去除题号相关字段
-
保证JSON语法合法无报错,字段内容与原文一致
## 固定输出结构(字段名称禁止改动)
{
"question_content": "原题内容",
"student_answer": "学生作答纯文本",
"standard_answer": "参考答案",
"error_analysis": "错题解析",
"knowledge_point": "对应知识点"
}
## 约束要求
-
输出仅保留JSON数据,不附加任何多余文字、解释说明
-
字段名称严格固定,绝对不修改、增减键名
-
清空所有样式符号,文本干净整洁
-
仅收录错题数据,不混入其他类型题目
-
括号、引号、逗号格式规范,可直接解析入库
步骤5:编写用户提示词。为该节点编写用户提示词,将作业批改数据传入大模型节点。
作业批改数据:{{correct_result}}
步骤6:设置输出变量。将默认输出变量名"output"修改为"error_question_list",变量类型选择"Array<Object>"。然后,单击"新增子项"按钮
添加5个子项,并依次填写子项变量名和数据类型。其中,子项的变量名称必须和系统提示词中JSON的键名完全一致。该节点的输出配置如图11-18所示。

图11-18 大模型节点的输出配置
6.数据入库
提取错题大模型节点的输出结果是一个对象数组(即便只有一道错题,也是一个包含单个对象的数组),数据结构示例如下。
{ "question_content": "37个0.01与23个0.1的和是( )", "standard_answer": "2.67", "student_answer": "2.61", "error_analysis": "计算失误,37个0.01是0.37,23个0.1是2.3,两者相加得0.37+2.3=2.67", "knowledge_point": "小数的计数单位、小数加法运算" }, { "question_content": "用3、5、8三个数字和小数点组成的两位小数中,最大的两位小数与最小的两位小数的和是( )", "standard_answer": "12.11", "student_answer": "16.888", "error_analysis": "对两位小数概念理解有误,最大的两位小数是8.53,最小的两位小数是3.58,两者相加得8.53+3.58=12.11", "knowledge_point": "小数的组成、小数加法运算" }, ......
根据以上示例数据可以看出,数组中的每个元素都是一个单独的对象,每个对象包含了题目内容、学生作答、参考答案、错误分析、对应知识点5项内容。要将此类数组数据批量写入扣子数据库,需要借助"循环"节点逐一处理。在每次循环中,系统从数组中提取一个对象赋值给系统默认的循环变量Item,随后将Item的属性与数据表字段建立映射,即可完成数据写入。具体实现步骤如下。
步骤1:添加循环节点。在提取错题大模型节点的下游添加一个"循环"节点。
步骤2:配置循环条件。选中该节点,在右侧参数配置面板中,循环类型选择"使用数组循环",循环数组变量input引用上游提取错题"大模型"节点的输出变量error_question_list,配置如图11-19所示。

图11-19 循环节点的配置
步骤3:添加数据库操作节点。在循环体内部添加一个数据库分类下的"新增数据"节点,并将该节点的左右输出端点与循环体的左右端点相连,形成循环体内闭环。
步骤4:绑定目标数据表。选中"新增数据"节点,在右侧参数配置面板中,单击"数据表"右侧的"+"按钮。在弹出的"选择数据库"窗口中,单击11.3.1节创建的错题记录数据表"error_question_list"右侧的"添加"按钮,完成数据表的绑定,如图11-20所示。

图11-20 绑定数据表
步骤5:映射数据字段。 单击"选择并设置字段"右侧的"+"按钮,将error_question_list数据表中的5个字段全部添加进来。然后,将每个字段分别绑定至"循环"节点下循环变量Item中对应的属性值,完成数据映射,如图11-21所示。

图11-21 选择并设置字段
步骤6:完成分支闭环。 将"循环"节点连接至"结束"节点,完成"错题入库"分支的流程闭环。
7.结束节点的配置
本工作流需输出"作业批改结果"与"学情报告"两个结果,在"结束"节点中进行汇聚与格式化配置,具体操作如下。
步骤1:切换输出模式。选中"结束"节点,在右侧配置面板中单击"返回文本",将输出模式切换为文本模式,以便支持多变量的拼接与自定义排版输出。
步骤2:添加并绑定输出变量。新增"correct_result"和"report"两个输出变量。将correct_result绑定至作业批改"大模型"节点的输出变量output;将"report"绑定至生成文档"插件"节点的输出变量data。
步骤3:配置回答内容。在"回答内容"文本框中,通过引用上述变量(如 {{correct_result}}与{{report}})将两项内容组合输出。该节点的完整配置如图11-22所示。

图11-22 结束节点配置
8.测试、发布工作流
步骤1:试运行。单击画布底部工具栏中的"试运行"按钮,在右侧弹出的试运行面板中,上传一幅学生手写作答照片。然后,单击面板底部的"试运行"按钮启动测试,如图11-23所示。

图11-23 试运行
步骤2:验证整体批改情况。观察工作流的执行路径与各节点运行状态,验证大模型能否正常识别并批改作业。测试结果如图11-24所示。

图11-24 工作流执行结果
步骤3:验证学情报告:单击学情报告下载链接下载报告文件,检查报告内容是否完整,排版是否规范。测试结果如图11-25所示。

图11-25 生成的学情报告
步骤4:验证错题数据入库。进入扣子资源库管理页面,打开对应的数据库,核实错题是否已成功写入数据表。测试结果如图11-26所示。

图11-26 数据入库结果
步骤5:发布上线。确认各项测试无误后(建议使用不同作业进行多次运行验证),单击界面右上角的"发布"按钮将工作流发布上线,方便后续在智能体中正式调用。
11.3.3创建智能体
步骤1:进入智能体创建入口。返回扣子编程首页,单击页面右侧"低代码模式"下方的"智能体开发",进入智能体创建页面,如图11-27所示。

图11-27 创建智能体
步骤2:填写智能体信息。在弹出的窗口中,输入智能体名称("小睿智评")及其功能介绍,单击默认图标旁的"生成"按钮
自动生成一个图标。最后,单击"确认"按钮,完成智能体的创建,如图11-28所示。

图11-28 创建智能体
11.3.4添加工作流
步骤1:进入添加工作流入口。在智能体编排页面中,单击"技能"区域下"工作流"右侧的"+"按钮,如图11-29所示。

图11-29 添加工作流
步骤2:选择工作流。在弹出的添加工作流窗口中,单击11.3.2节发布的工作流"correct_papers"右侧的"添加"按钮,将其挂载到智能体中。如图11-30所示。

图11-30 选择工作流
11.3.5设置人设和回复逻辑
"小睿智评"智能体在系统架构设计上采用智能体主导交互调度,工作流承载核心逻辑的协同模式。作为一款作业批改助手,其核心的复杂业务逻辑,如:正误判定、学情分析及错题自动入库,均交由底层工作流高效且稳定地执行。而智能体本体则专注于前端的用户体验,它利用大模型强大的自然语言理解能力,与用户进行拟人化沟通,对用户上传的图片和文本进行前置校验(如判断图片是否清晰、是否为作业内容),并主动引导用户按规范输入,从而为下游工作流筛选出高质量的数据源。为确保智能体能精准扮演好这一"引导者"的角色,为其设定如下的人设与回复逻辑提示词。
## 角色
作业批改智能体,但不参与批改、分析、内容创作具体业务,仅负责调用{correct_papers}工作流并反馈结果,同时校验用户输入合法性。
## 核心规则
-
输入校验:仅接收清晰的作业图片,如果用户输入的是文字、表情包、文件、空白内容等非图片形式,统一引导用户提交拍照清晰的作业原图。
-
无自主处理能力:批改全由{correct_papers}工作流完成,自身不批改、不解析、不续写、不修改内容。
-
结果原样输出:工作流返回内容完整直接展示,不增删文字、格式、符号、排版。
-
异常提示:工作流执行失败,仅回复固定提示语。
## 交互话术
-
非图片输入统一引导:请上传拍照清晰的作业图片,我将为你完成作业批改。
-
工作流异常提示:批改工作流执行异常,请稍后重试。
## 交互流程
-
识别用户输入类型,非作业图片则输出引导语,终止后续操作。
-
合法图片输入,触发{correct_papers}工作流运行。
-
成功则原样返回工作流全部输出内容;失败输出异常提示。
## 约束
-
不主动解答题目、不评价学习情况、不额外补充话术。
-
严格按判定标准区分输入格式,不擅自处理文本类请求。
-
全程只执行校验、调用、回显动作,不参与任何批改逻辑。
11.3.6设置开场白
为了让用户打开智能体就能"秒懂"如何操作,在智能体编排页面的"对话体验"模块下,设置开场白文案及其预置问题,如图11-31所示。通过友好的问候与直观的快捷提问示例,迅速打破冷启动的僵局,也能有效引导用户按预期格式上传作业,实现零门槛快速上手使用。

图11-31 设置开场白文案和预置问题
11.3.7添加快捷指令
快捷指令是封装了特定话术与功能关联的快捷交互入口。它能让用户一键触发对应能力,不仅大幅简化操作步骤,还能精准规范对话意图,有效降低使用门槛。接下来,将配置一条专属的"批改作业"快捷指令,具体操作步骤如下。
步骤1:添加指令。在智能体编排页面中,单击"快捷指令"右侧的"+"按钮,进入创建快捷指令窗口,如图11-32所示。

图11-32 添加指令
步骤2:填写基本信息。在打开的"创建快捷指令"对话框中,填写按钮名称、指令名称和指令描述等信息,如图11-33所示。

图11-33 填写指令基本信息
步骤3:绑定目标工作流。在"创建快捷指令"对话框中勾选"直接使用插件、工作流"选项。然后,在打开的页面中单击"工作流"标签,选中并添加此前创建的批改作业工作流"correct_papers",如图11-34所示。

图11-34 绑定工作流
步骤4:配置输入组件。由于绑定的工作流需要一个图片输入参数,系统会在组件模块中自动生成一个与之对应的组件。将该组件类型设为"上传文件",并在支持的文件类型中勾选"图片",从而限制用户只能上传图片格式的作业,确保数据源合规,如图11-35所示。

图11-35 绑定工作流
步骤5:组装指令内容。在指令内容文本框中,通过引用的方式将步骤4创建的组件变量插入到会话查询模板中,使指令能将用户上传的图片数据准确传递给工作流。确认无误后单击"确认"按钮完成创建,如图11-36所示。

图11-36 组件及指令内容设置
