学生成绩查询 Agent 从 0 到 1(MySQL + ChatFlow 整合版)

张开发
2026/4/20 20:52:10 15 分钟阅读

分享文章

学生成绩查询 Agent 从 0 到 1(MySQL + ChatFlow 整合版)
本文将01-Mysql数据库操作.md与02-学生成绩查询ChatFlow.md合并为一篇完整实操文档覆盖MySQL 数据库与student_grades表准备Dify ChatFlow 节点编排NLP2SQL 数据分析 ECharts查询结果文本与图表联合输出1. 项目目标与整体思路目标是实现一个“学生成绩查询 Agent”用户用自然语言提问例如“查询全校各科平均分”大模型将问题转换为 SQL执行 SQL 获取结果大模型对结果做总结并按需生成 ECharts 数据工作流输出文本结论并可附带折线图/柱状图/饼图2. 环境与工具准备本方案主要依赖以下能力Database 工具连接 MySQL代码执行节点Python 解析/转换数据大模型节点SQL 生成与结果总结ECharts 图表节点图表渲染可选时间工具Database 插件安装后需要配置 API Key并设置数据库连接 URImysqlpymysql://root:你的密码host.docker.internal:3306/你的数据库名示例mysqlpymysql://root:123456host.docker.internal:3306/dify_test3. MySQL 数据准备核心基础3.1 登录 MySQL本地: mysql -u root -p 远程: mysql -u root -h 192.168.1.100 -p3.2 创建数据库并切换CREATEDATABASEdify_test;USEdify_test;3.3 创建成绩表CREATETABLEstudent_grades(idINTAUTO_INCREMENTPRIMARYKEY,student_idVARCHAR(20)NOTNULL,student_nameVARCHAR(50)NOTNULL,class_nameVARCHAR(50)NOTNULL,subjectVARCHAR(50)NOTNULL,scoreDECIMAL(5,2)NOTNULL,exam_dateDATENOTNULL,semesterVARCHAR(50)NOTNULL,gradeVARCHAR(50)NOTNULL,created_atDATETIMENOTNULL,updated_atDATETIMENOTNULL);3.4 导入测试数据将原文中的批量INSERT INTO student_grades ... VALUES (...)语句一次性执行即可数据量约 100 条。3.5 验证数据SELECTCOUNT(*)FROMstudent_grades;SELECT*FROMstudent_gradesLIMIT10;4. ChatFlow 工作流搭建逐节点4.1 开始节点接收用户输入问题无需特别修改。4.2 大模型节点生成 SQL职责根据用户问题输出可执行 SQLJSON 数组格式。关键配置模型qwen3-maxSystem Prompt约束表名为student_grades、字段定义、SQL 质量要求、JSON 输出规范User Prompt 示例查询全校各科目平均分情况建议要求模型避免SELECT *并尽量按semester、grade、class_name、subject等维度聚合。4.3 直接回复SQL 生成中用于改善交互体验可选。### SQL 正在生成中4.4 代码执行解析 LLM 输出 JSON职责从json ...代码块中提取并解析 SQL 数组。输入建议input_string: LLM/{x}text输出建议result -- Array[Object]4.5 直接回复SQL 生成完毕### SQL 生成完毕4.6 循环迭代逐条 SQL 执行职责遍历 SQL 数组逐条查询并汇总结果。关键配置输入代码执行/{x}result输出SQL Execute/{x}json错误处理可选择移除错误输出避免单条 SQL 失败导致全流程中断4.7 循环体-代码执行提取title/sql职责从当前迭代对象提取title与sql字段传给 SQL 执行节点。4.8 循环体-SQL 执行输入循环体代码执行{x}sql4.9 代码执行循环结果转字符串职责将迭代后的查询结果拼接便于后续 LLM 做统一总结。4.10 直接回复模型汇总中### SQL 计算完毕,模型正在汇总中...4.11 大模型节点结果总结 图表决策职责优先回答用户问题Markdown 文本判断是否需要图表ECHarts1或0若需要图表返回图表类型、标题、数据与 X 轴建议输出 JSON 结构{results:Markdown总结,ECHarts:1,chartType:线性图/柱状图/饼状图,chartTitle:图表标题,chartData:10;20;30,chartXAxis:高一;高二;高三}4.12 代码执行解析总结 JSON职责容错解析 LLM 返回结果补齐缺省字段统一输出resultsECHartscharType/charTitle/charData/charXAxis按你的节点命名保持一致4.13 直接回复返回文本结果回复内容示例代码执行生成ECHART/{x}results4.14 条件分支是否绘图职责根据ECHarts与chartType走不同图表分支折线/柱状/饼图。4.15 ECharts 图表节点通用输入参数标题charTitle数据charDataX 轴或分类charXAxis4.16 结果输出节点最终向用户输出文本结果并在满足条件时附带图表。5. 运行效果6. 常见问题与优化建议SQL 解析失败重点检查 LLM 输出是否严格包裹在 json 代码块中。SQL 执行报错检查数据库连接、表名字段名是否一致student_grades以及 SQL 语法是否符合 MySQL。图表不显示检查ECHarts是否为1并确认chartType/chartData/chartXAxis是否完整。结果不够准确强化 SQL 生成提示词增加 few-shot 示例限制查询范围与维度。性能优化高频查询字段如semester、grade、class_name、subject可考虑建立索引避免无条件全表扫描。7. 一句话总结你现在可以通过“自然语言提问 - 自动 SQL 查询 - 智能总结 - 图表展示”的完整链路快速搭建一个可用的学生成绩查询 Agent并可按业务继续扩展到班级分析、年级对比、成绩预警等场景。

更多文章