1 前言
数据库(Database,简称 DB)作为一种专门用于存储、管理和处理数据的系统,借助计算机系统对数据进行有序组织与存储,从而实现高效的数据访问与管理。
此前,我曾为大家介绍过借助 Dify 和飞书表格来记录大语言模型(LLM)聊天信息的功能。在数据量较小时,使用飞书表格来记录信息确实是一个可行的方案。然而,随着数据量的不断增加,使用飞书表格可能会出现一些问题。
此外,数据库对应的 SQL 语句始终是信息系统中至关重要的组成部分。今天,我将带领大家完成一个 Dify 与数据库查询整合的案例。通过这个案例,大家可以了解如何实现从 Dify 对本地数据库进行数据查询,并将查询结果进行显示的功能。
接下来,让我们马上开始实际操作,一同感受其中的过程。

上面截图是工作流整体效果。
我们这里有3个接口,一个是学生成绩查询,一个是班级平均分,一个是课程排名,三个接口对应不同功能,主要都是通过后端服务接口实现查询。第一个带有个图标展示,后面2个我们就用mardown语法显示生产表格。下面是实现的效果。
1.班级平均分

这里dify自带的图标给大家展示张三 语文、数学、英语三门课程的成绩。
2.班级平均分

3.课程排名

这个我们选取了语文课程的排名,显示了排名前3个学生。下面就带大家详细展示工作流的制作。
2.数据库查询图表工作流
2.1 开始
首选我们先定义一个开始节点,这个开始节点我们默认就用系统自带的聊天输入信息,所以这里没有需要设置的。

2.2 LLM大语言模型
这个地方我们需要接入一个大语言模型,因为用户会输入各种问题,我们需要借助大语言模型的推理能力把用户输入的信息转换成规定的参数 方便后面程序走流程分支。这里我们不需要LLM大语言模型发散思考,所以把模型能力温度到0.1。模型这块我们选择书生浦语internlm3-8b-instruct 模型,这个模型是2025年1月15日由上海人工智能实验室正式发布的。这一版本是书生·浦语3.0(InternLM3)的重要升级。

系统提示词
# Role: 教学考试系统查询专家
# Goal: 根据用户输入的信息,提取关键信息,并将查询归类到以下类别,并只返回类别编号:
# - 学生成绩 (类别编号: 1)
# - 平均分 (类别编号: 2)
# - 课程的排名 (类别编号: 3)
# - 查询不到 (类别编号: 0)
# Constraints:
- 1. 只能从用户输入中提取信息。
- 2. 必须将查询归类到预定义的类别。
- 3. 输出必须只包含类别编号。
- 4. 如果查询无法归类到 1, 2, 3,则返回 0。
## Output Format
{
{
category_number}}
# Examples:
## 学生成绩类 (类别编号: 1):
- 查询学生成绩
- 查询"张三"程序
- 查询该班级所有学生成绩
## 平均分 (类别编号: 2):
- 查询班级平均分
- 查询某个人平均成绩
## 课程的排名 (类别编号: 3):
- 查询课程的排名
- 查询数学课程排名
## 查询不到 (类别编号: 0):
- 无法识别的查询
# 用户输入:
{
{
user_input}}
# 分析结果:
{
{
category_number}}
用户提示词
请根据用户输入提示词{
{#sys.query#}}进行判断


2.3 条件分支
这里我们需要根据上个流程节点的判断输出 1、学生成绩、2 、平均分 3、课程的排名 4、查询不到 等4个值分别做条件分支判断

2.3 接口调用
上面我们提到这个数据库查询包含3个接口,每个接口查询返回的内容是不相同的。这样我们就定义了3 个http 请求。在这3个http请求执行我们需要先把数据库和服务端接口写好。下面我们重点讲解这个知识点。
1.数据库
这里我们使用了MYSQL8 数据库,关于数据库安装这里我们就不在详细展开,感兴趣小伙伴可以网上搜索这个方面的内容。我们这里有1个叫做student_score数据库。数据库里面有3张表分别是students、courses、scores。内容信息看下面截图

建表语句和初始化SQL 脚本如下:
student_score.sql
-- 创建学生表
CREATE TABLE students (
student_id INT PRIMARY KEY,
student_name VARCHAR(50) NOT NULL,
gender CHAR(1),
class_name VARCHAR(20),
admission_date DATE
);
-- 创建课程表
CREATE TABLE courses (
course_id INT PRIMARY KEY,
course_name VARCHAR(50) NOT NULL,
credit DECIMAL(3,1)
);
-- 创建成绩表
CREATE TABLE scores (
score_id INT PRIMARY KEY,
student_id INT,
course_id INT,
score DECIMAL(5,2),
exam_date DATE,
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
-- 插入测试数据
-- 1. 插入学生数据
INSERT INTO students (student_id, student_name, gender, class_name, admission_date) VALUES
(1001, '张三', 'M', '高一(1)班', '2023-09-01'),
(1002, '李四', 'F', '高一(1)班', '2023-09-01'),
(1003, '王五', 'M', '高一(2)班', '2023-09-01'),
(1004, '赵六', 'F', '高一(2)班', '2023-09-01'),
(1005, '孙七', 'M', '高一(3)班', '2023-09-01');
-- 2. 插入课程数据
INSERT INTO courses (course_id, course_name, credit) VALUES
(1, '语文', 4.0),
(2, '数学', 4.0),
(3, '英语', 4.0),
(4, '物理', 3.0),
(5, '化学', 3.0);
-- 3. 插入成绩数据
INSERT INTO scores (score_id, student_id, course_id, score, exam_date) VALUES
(1, 1001, 1, 85.5, '2023-12-20'),
(2, 1001, 2, 92.0, '2023-12-20'),
(3, 1001

最低0.47元/天 解锁文章
967

被折叠的 条评论
为什么被折叠?



