游乐游手机版
首页/AI热点日报/热点详情

Dify实战:零SQL,用自然语言提问即可查询

类型:热点整理2026-05-31
告别繁琐的SQL编写,通过自然语言轻松实现数据库查询,Dify让数据交互变得零门槛! 核心内容: Dify自然语言转SQL的架构与工作原理 测试数据库搭建与只读账户配置 数据库插件安装及Agent应用配置步骤 无需Navicat、不用编写SQL,只需提问即可获取结果;今天我们将使用Dify搭建一个自

告别繁琐的SQL编写,通过自然语言轻松实现数据库查询,Dify让数据交互变得零门槛!

核心内容:

  1. Dify自然语言转SQL的架构与工作原理
  2. 测试数据库搭建与只读账户配置
  3. 数据库插件安装及Agent应用配置步骤

无需Navicat、不用编写SQL,只需提问即可获取结果;今天我们将使用Dify搭建一个自然语言数据库查询助手。

01 功能演示与效果预览

自然语言转SQL的架构原理

工作流程十分简洁:用户提出问题,AI将其转换为SQL语句,随后执行数据库查询,最后将结果返回给用户。

02 前期准备与环境搭建

开始之前需要完成两项任务:准备一个测试数据库,并安装所需的插件。

2.1 搭建测试数据库

为便于演示,我们创建一个简单的产品表,执行以下SQL语句:

-- 创建测试数据库
CREATE DATABASE IF NOT EXISTS dify_demo;
USE dify_demo;

-- 创建产品表
CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) COMMENT '产品名称',
    category VARCHAR(50) COMMENT '产品分类',
    price DECIMAL(10,2) COMMENT '价格',
    stock INT COMMENT '库存数量',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- 插入几条测试数据
INSERT INTO products (name, category, price, stock) VALUES
('机械键盘', '外设', 299.00, 150),
('游戏鼠标', '外设', 89.00, 300),
('4K显示器', '显示设备', 1999.00, 50),
('降噪耳机', '音频', 499.00, 80),
('无线充电器', '配件', 99.00, 200);

数据库表创建完成。

2.2 配置只读数据库账户

建议使用只读账户,即使AI生成错误SQL,也能避免数据被误删或修改。

-- 创建一个只能查询的账号
CREATE USER 'dify_reader'@'%' IDENTIFIED BY '你的密码';
GRANT SELECT ON dify_demo.* TO 'dify_reader'@'%';
FLUSH PRIVILEGES;

2.3 安装数据库连接插件

Dify插件市场提供了现成的数据库连接工具。登录Dify后,依次点击顶部导航栏的「插件」→「插件市场」。

搜索「Database」或「MySQL」。

安装数据库连接插件。

装完后,插件会出现在插件列表里。

2.4 配置数据库连接参数

插件安装完成后,返回Agent应用编排页面,在「工具」区域点击「添加」,选择刚安装的database插件。

配置数据库连接URI:

我的Dify部署在VMware虚拟机上,192.168.1.2是本地Windows电脑的IP。

mysql+pymysql://dify_reader:123456@192.168.1.2:3306/dify_demo

数据库连接配置完成。

03 创建Agent应用

3.1 创建新应用

点击「工作室」→「创建空白应用」,在应用类型中选择「Agent」。

将应用名称设置为「SQL查询助手」,点击创建。

3.2 选择大语言模型

选择已配置好的大语言模型,本示例使用的是DeepSeek。

3.3 编写系统提示词

将以下代码复制到「提示词」输入框中:

你是一个 SQL 查询助手。用户会用自然语言提问,你需要根据数据库表结构生成 SQL 并查询。

## 数据库表结构

products 表:
- id: 产品ID (INT)
- name: 产品名称 (VARCHAR)
- category: 产品分类 (VARCHAR),可选值:外设、显示设备、音频、配件
- price: 价格 (DECIMAL)
- stock: 库存数量 (INT)
- created_at: 创建时间 (DATETIME)

## 规则

1. 根据用户问题,生成对应的 SQL 查询
2. 只生成 SELECT 查询,禁止 UPDATE、DELETE、INSERT
3. 查询结果用自然语言回复用户
4. 如果用户问题与数据库无关,礼貌告知无法回答

## 示例

用户问:最贵的产品是什么?
回复:最贵的产品是「4K显示器」,价格 1999 元。

用户问:库存低于100的有哪些?
回复:以下产品库存低于100:4K显示器(50件)、降噪耳机(80件)。

以上为单表示例,多表场景请参考第06节。

3.4 添加工具组件

在「工具」区域,从database插件列表中选择并添加「Text to SQL」和「SQL Execute」两个工具。

完成后点击右上角的「发布」按钮。

04 效果测试与验证

测试一:基础查询

查询:产品列表有哪些?

测试二:条件筛选查询

查询:库存低于100的产品有哪些?

测试三:聚合函数查询

查询:最贵的产品是什么?

测试过程中若遇到问题,不必担心,以下是常见问题及解决方法。

05 常见问题与解决方案

1. 无法连接MySQL,提示权限拒绝

请检查以下两项配置:

  1. Windows防火墙是否已开放3306端口。
  2. MySQL是否已允许远程连接。
-- 查看用户允许的访问来源
SELECT user, host FROM mysql.user;

-- 如果dify_reader的host是localhost,改成%
UPDATE mysql.user SET host = '%' WHERE user = 'dify_reader';
FLUSH PRIVILEGES;

2. 认证方式不兼容错误

MySQL 8默认使用caching_sha2_password认证插件,pymysql不支持该方式,需执行以下命令修改:

ALTER USER 'dify_reader'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;

3. AI未调用工具而直接生成答案

系统提示词中未明确指示AI使用工具,需在指令中添加以下内容:

当用户问数据库相关问题时,你必须使用Text to SQL和SQL Execute工具来查询,不能自己编造答案。

06 多表场景的处理方法

以上演示仅涉及单张表,且提示词中硬编码了表结构。若数据库包含数十甚至上百张表,手动写入所有结构显然不现实,此时需要动态获取表结构。

database插件提供了「Get Table Schema」工具,能够自动读取数据库中所有表的字段结构,无需手动编写。

6.1 添加Get Table Schema工具

返回Agent编排页面,在「工具」区域勾选「Get Table Schema」工具。

6.2 更新系统提示词

将「提示词」框中的内容替换为以下代码:

你是一个 SQL 查询助手。用户会用自然语言提问,你需要查询数据库并返回结果。

## 工作流程

1. 先用Get Table Schema工具获取数据库中的所有表结构
2. 根据用户问题,找到相关的表
3. 用Text to SQL生成SQL语句
4. 用SQL Execute执行查询
5. 用自然语言回复用户

## 规则

- 只生成SELECT查询,禁止UPDATE、DELETE、INSERT
- 如果用户问题与数据库无关,礼貌告知无法回答

这样便无需手动书写表结构,AI将自动查询数据库获取最新结构信息。

接下来我们向数据库中添加两张新表。

6.3 重新测试

重新发布应用后再次进行测试。

查询:数据库里有哪些表?

查询:数据库里有哪些表?仅返回表名即可。

07 总结与回顾

回顾本文的主要步骤:

  1. 准备测试数据库及示例数据表。
  2. 创建只读数据库账户以确保安全。
  3. 安装database插件并配置数据库连接。
  4. 创建Agent应用,编写系统提示词,添加工具组件。
  5. 验证自然语言查询效果。
  6. 多表场景优化:使用Get Table Schema动态获取表结构。

今后查询数据,无需打开Navicat、无需手动编写SQL,只需直接提问即可。

本方案的核心要点:

为AI提供充分的上下文信息,并配备正确的工具,即可实现通过自然语言查询数据库。

来源:https://www.53ai.com/news/dify/2026041829076.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。