dify案例分享-数据库查询图表显示

1 前言

数据库(Database,简称 DB)作为一种专门用于存储、管理和处理数据的系统,借助计算机系统对数据进行有序组织与存储,从而实现高效的数据访问与管理。

此前,我曾为大家介绍过借助 Dify 和飞书表格来记录大语言模型(LLM)聊天信息的功能。在数据量较小时,使用飞书表格来记录信息确实是一个可行的方案。然而,随着数据量的不断增加,使用飞书表格可能会出现一些问题。

此外,数据库对应的 SQL 语句始终是信息系统中至关重要的组成部分。今天,我将带领大家完成一个 Dify 与数据库查询整合的案例。通过这个案例,大家可以了解如何实现从 Dify 对本地数据库进行数据查询,并将查询结果进行显示的功能。

接下来,让我们马上开始实际操作,一同感受其中的过程。

image-20250227173936845

上面截图是工作流整体效果。

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

1.班级平均分

image-20250227174229137

这里dify自带的图标给大家展示张三 语文、数学、英语三门课程的成绩。

2.班级平均分

image-20250227174449574

3.课程排名

image-20250227174638921

这个我们选取了语文课程的排名,显示了排名前3个学生。下面就带大家详细展示工作流的制作。

2.数据库查询图表工作流

2.1 开始

首选我们先定义一个开始节点,这个开始节点我们默认就用系统自带的聊天输入信息,所以这里没有需要设置的。

image-20250227175137874

2.2 LLM大语言模型

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

image-20250227181121143

系统提示词

# 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#}}进行判断

image-20250227181254114

image-20250227181314741

2.3 条件分支

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

image-20250227181559382

2.3 接口调用

上面我们提到这个数据库查询包含3个接口,每个接口查询返回的内容是不相同的。这样我们就定义了3 个http 请求。在这3个http请求执行我们需要先把数据库和服务端接口写好。下面我们重点讲解这个知识点。

1.数据库

这里我们使用了MYSQL8 数据库,关于数据库安装这里我们就不在详细展开,感兴趣小伙伴可以网上搜索这个方面的内容。我们这里有1个叫做student_score数据库。数据库里面有3张表分别是students、courses、scores。内容信息看下面截图

image-20250227211336668

建表语句和初始化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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

军哥说AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值