1 Docker方式部署Dify
1.1 官方教程
1.2 部署
1.2.1 下载源码
git clone https://github.com/langgenius/dify.git
1.2.2 部署
cd dify/docker
cp .env.example .env
# 启动
docker compose up -d
# 查看容器状态
docker compose ps
1.2.3 Troubleshooting
如果docker compose up -d
报以下错:
validating /mnt/d/krow/ws/dify/docker/docker-compose.yaml: volumes Additional property ./volumes/db/data is not allowed
解决: 检查dify/docker
目录下是否已经有./volumes/db/data
文件夹,如果有,将其删掉,再手动创建,重新运行
1.2.4 访问
http://localhost:80
2 接入ollama模型
2.1 安装OpenAI-API-compatible插件
安装成功后
后台docker-plugin_daemon-1
的日志也显示安装成功:
2.2 接入ollama模型
2.2.1 查看模型名字
ollama list
NAME ID SIZE MODIFIED
qwen3:32b 030ee887880f 20 GB 6 days ago
2.2.2 配置qwen3:32b
LLM
qwen3:32b
http://localhost:11434/v1
点保存
时报错:
后台日志报错:
2.2.2.1 解决方式1
将http://localhost:11434/v1
改为http://host.docker.internal:11434/v1
2.2.2.2 解决方式2
- 指定ollama允许全部IP访问
# 在windows的powershell中操作 $env:OLLAMA_HOST="0.0.0.0:11434" ollama serve
- 查看本机IP
ipconfig
- 测试
curl http://192.168.31.244:11434/api/tags | jq
- 将
http://localhost:11434/v1
改为http://192.168.31.244:11434/v1
3 安装database插件
3.1 【可选】安装mysql数据库
3.1.1 拉取mysql8镜像
docker pull mysql:8.0
3.1.2 启动mysql8容器
docker run --name mysql8 `
-e MYSQL_ROOT_PASSWORD=123qwe `
-p 3306:3306 `
-v D:\docker-ws\data\mysql\data:/var/lib/mysql `
-v D:\docker-ws\data\mysql\conf:/etc/mysql/conf.d `
-d mysql:8.0 `
--character-set-server=utf8mb4 `
--collation-server=utf8mb4_unicode_ci `
--bind-address=0.0.0.0
3.1.3 连接,并创建数据库
docker exec -it mysql8 mysql -u root -h 192.168.31.244 -p
3.2 安装database插件
安装成功
3.3 配置database插件
回到插件列表
在数据库URI
中输入mysql+pymysql://root:123qwe@192.168.31.244:3306/dify
配置成功
3.4 Troubleshooting
因为网络问题,可能显示database插件
安装成功了,但它的依赖并没有安装成功,这时配置数据库 URI
时,就会报
internal server error
查看docker-plugin_daemon-1
后台日志:
解决:编辑dify/docker/.env
,配置PIP国内源
PIP_MIRROR_URL=https://pypi.tuna.tsinghua.edu.cn/simple
# PIP_MIRROR_URL=
4 使用qwen3模型和database插件
4.1 创建表和插入数据
use dify;
CREATE TABLE customers
(
customer_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
phone VARCHAR(20),
registration_date DATE,
vip_status BOOLEAN DEFAULT FALSE
);
-- 产品表
CREATE TABLE products
(
product_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
category VARCHAR(50),
price DECIMAL(10, 2) NOT NULL,
stock_quantity INT DEFAULT 0,
description TEXT
);
-- 订单表(关联客户和产品)
CREATE TABLE orders
(
order_id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT,
product_id INT,
order_date DATETIME DEFAULT CURRENT_TIMESTAMP,
quantity INT NOT NULL,
total_amount DECIMAL(10, 2) NOT NULL,
status ENUM ('pending', 'shipped', 'delivered', 'cancelled') DEFAULT 'pending',
FOREIGN KEY (customer_id) REFERENCES customers (customer_id),
FOREIGN KEY (product_id) REFERENCES products (product_id)
);
-- 插入客户数据
INSERT INTO customers (name, email, phone, registration_date, vip_status)
VALUES ('张三', 'zhangsan@example.com', '13800138001', '2022-01-15', TRUE),
('李四', 'lisi@example.com', '13800138002', '2022-03-22', FALSE),
('王五', 'wangwu@example.com', '13800138003', '2022-05-10', TRUE),
('赵六', 'zhaoliu@example.com', '13800138004', '2022-07-18', FALSE),
('钱七', 'qianqi@example.com', '13800138005', '2022-09-05', FALSE);
-- 插入产品数据
INSERT INTO products (name, category, price, stock_quantity, description)
VALUES ('智能手机X', '电子产品', 5999.00, 100, '最新款旗舰智能手机'),
('无线耳机Pro', '电子产品', 899.00, 200, '高音质无线蓝牙耳机'),
('智能手表', '电子产品', 1299.00, 150, '健康监测智能手表'),
('咖啡机', '家用电器', 799.00, 50, '全自动美式咖啡机'),
('电动牙刷', '个人护理', 299.00, 300, '声波震动电动牙刷'),
('笔记本电脑', '电子产品', 8999.00, 30, '高性能轻薄笔记本');
-- 插入订单数据
INSERT INTO orders (customer_id, product_id, quantity, total_amount, status)
VALUES (1, 1, 1, 5999.00, 'delivered'),
(1, 3, 2, 2598.00, 'shipped'),
(2, 2, 1, 899.00, 'pending'),
(3, 4, 1, 799.00, 'delivered'),
(3, 6, 1, 8999.00, 'shipped'),
(4, 5, 3, 897.00, 'delivered'),
(5, 1, 1, 5999.00, 'cancelled'),
(5, 2, 2, 1798.00, 'delivered');
4.2 创建工作流
4.2.1 创建简单工作流
4.2.2 创建开始节点
4.2.3 创建Text2SQL节点
4.2.4 创建LLM节点
4.2.5 创建python代码节点
import re
def main(text: str) -> dict:
pattern = r'```sql(.*?)```'
sqls = re.findall(pattern, text, re.DOTALL)
sql = [sql.strip() for sql in sqls][0]
idx = sql.lower().find('limit')
sql = sql if idx == -1 else sql[:idx]
return {'sql': sql}
4.2.6 创建SQL Execute节点
4.2.7 创建python代码节点
import json
def main(ret_json: list) -> dict:
str_json = json.dumps(
ret_json[0].get("result")
)
return {
"str_json": str_json
}
4.2.8 创建LLM节点
"""
{{#1749356861528.question#}}
"""
这是"用户问题"。
"""
{{#1749358161409.sql#}}
"""
这是将用户问题转成的SQL语句。
"""
{{#1749358848014.str_json#}}
"""
这是根据SQL查询数据库的结果。
现在请将以上内容按以下格式返回:
# 用户问题
`用户问题内容`
# SQL语句
`SQL语句内容`
# 查询结果
`查询结果内容`
注意,不要改动内容,并且”查询结果内容“要以mardown表格进行展示。