在win11上部署Dify,并接入ollama、安装database插件和使用

1 Docker方式部署Dify

1.1 官方教程

Docker Compose 部署 - Dify Docs

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

在这里插入图片描述

  1. LLM
  2. qwen3:32b
  3. http://localhost:11434/v1
    在这里插入图片描述
    保存时报错:
    在这里插入图片描述
    后台日志报错:
    在这里插入图片描述
2.2.2.1 解决方式1

http://localhost:11434/v1改为http://host.docker.internal:11434/v1

2.2.2.2 解决方式2
  1. 指定ollama允许全部IP访问
    # 在windows的powershell中操作
    $env:OLLAMA_HOST="0.0.0.0:11434"
    ollama serve
    
  2. 查看本机IP
    ipconfig
    
    在这里插入图片描述
  3. 测试
    curl http://192.168.31.244:11434/api/tags | jq
    
    在这里插入图片描述
  4. 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表格进行展示。

在这里插入图片描述

4.2.9 创建结束节点

在这里插入图片描述

4.3 运行

4.3.1 查询所有VIP客户

在这里插入图片描述

4.3.2 查询所有订单及客户和产品信息

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值