dify工作流

一、简介

官方地址:https://docs.dify.ai/zh-hans/guides/workflow

工作流通过将复杂的任务分解成较小的步骤(节点)降低系统复杂度,减少了对提示词技术和模型推理能力的依赖,提高了 LLM 应用面向复杂任务的性能,提升了系统的可解释性、稳定性和容错性。

Dify 工作流分为两种类型:

  •   Chatflow:面向对话类情景,包括客户服务、语义搜索、以及其他需要在构建响应时进行多步逻辑的对话式应用程序。
  •   Workflow:面向自动化和批处理情景,适合高质量翻译、数据分析、内容生成、电子邮件自动化等应用程序。

为解决自然语言输入中用户意图识别的复杂性,Chatflow 提供了问题理解类节点。相对于 Workflow 增加了 Chatbot 特性的支持,如:对话历史(Memory)、标注回复、Answer 节点等。

为解决自动化和批处理情景中复杂业务逻辑,工作流提供了丰富的逻辑节点,如代码节点、IF/ELSE 节点、模板转换、迭代节点等,除此之外也将提供定时和事件触发的能力,方便构建自动化流程。

二、工作流使用

先来看一个,比较复杂的工作流

本文不会演示这么复杂的工作流,先来演示一个简单的工作流。

创建工作流

 效果如下:

增加一个功能,查询我的公网ip,需要调用api来获取,比如:http://ip-api.com/json

访问之后,会显示一段json

{
    "status": "success",
    "country": "China",
    "countryCode": "CN",
    "region": "BJ",
    "regionName": "Beijing",
    "city": "Jinrongjie",
    "zip": "",
    "lat": 39.9175,
    "lon": 116.362,
    "timezone": "Asia/Shanghai",
    "isp": "China Unicom Shanghai network",
    "org": "Unicom SH",
    "as": "AS17621 China Unicom Shanghai network",
    "query": "140.206.98.218"
}

最后需要从json里面,提取query字段,就是我们要的公网ip了。

点击中间的LLM,右键删除

 点击加号,选择条件分支

 添加条件,选择query,也就是聊天输入框,对于的变量

 条件是,包含公网ip

 点击if后面的加号,选择HTTP请求

 输入地址http://ip-api.com/json即可,其他的不需要设置

 点击加号,选择代码执行

 删除参数arg2,选择arg1变量,选择body,也就是上一步http请求的结果

arg1的变量就是http请求的body

python代码如下:

import json
def main(arg1: str) -> dict:
    content=json.loads(arg1)
    return {
        "result": content['query'],
    }

代码说明:

content变量就是将body内容转换为字典,使用json.loads

最后return字典的query字段,也就是body内容的query

设置效果如下:

连线到 直接回复,点击{x},选择变量,选择代码执行result

 最后添加else分支,选择LLM,上下文选择变量sys.query

 最后添加直接回复

 最终效果如下:

 点击发布更新,运行一下

提问

 点击Workflow Process,就可以看到执行的流程

如果不包含公网ip,就会走下面的流程

三、dify python安装模块

临时安装

dify的代码执行,是由sandbox组件来执行的。

我们可以进入到sandbox容器里面看一下

docker exec -it docker_sandbox_1 /bin/bash

查看python版本

root@3d63ec639581:/# python --version
Python 3.10.15

可以看到python版本为3.10.15

查看pip安装了哪些模块

root@3d63ec639581:/# pip list
Package            Version
------------------ -----------
anyio              4.6.2.post1
certifi            2024.8.30
charset-normalizer 3.4.0
exceptiongroup     1.2.2
h11                0.14.0
httpcore           1.0.6
httpx              0.27.2
idna               3.10
Jinja2             3.0.3
MarkupSafe         3.0.1
pip                23.0.1
PySocks            1.7.1
requests           2.32.3
setuptools         65.5.1
sniffio            1.3.1
socksio            1.0.0
typing_extensions  4.12.2
urllib3            2.2.3
wheel              0.44.0

[notice] A new release of pip is available: 23.0.1 -> 25.0.1
[notice] To update, run: pip install --upgrade pip

安装pandas

pip install pandas

查看已经安装的模块

pip freeze

过滤pandas

pip freeze|grep pandas

输出:
pandas==2.2.3

这只是临时安装了pandas,下次容器启动,安装的模块就会消失。

永久安装

如果需要永久安装模块,需要修改配置文件python-requirements.txt

进入目录/opt/dify/docker/volumes

volumes就是所有模块的持久化目录

编辑文件volumes/sandbox/dependencies/python-requirements.txt

默认文件内容是空的,增加一行

pandas==2.2.3

最后重启dify应用,就会生效了。

cd /opt/dify/docker
docker-compose down
docker-compose up -d
### Dify 工作流简介 Dify 是一种基于领域特定语言 (DSL) 的工具,用于简化复杂的工作流程自动化过程。通过定义清晰的任务逻辑和依赖关系,用户可以轻松创建高效的工作流[^1]。 #### 配置方法 要配置 Dify 工作流,通常需要以下几个核心组件: 1. **安装环境** 安装 Dify 所需的基础运行环境通常是 Python 或其他支持的语言版本。具体可以通过官方文档获取详细的依赖列表并完成初始化设置[^1]。 2. **编写 DSL 文件** 用户需要根据需求设计自己的工作流文件。这些文件一般采用 YAML 格式来描述任务及其执行顺序。例如: ```yaml version: '1' tasks: task_1: action: echo "Starting Task" task_2: depends_on: task_1 action: python script.py ``` 3. **运行工作流** 使用命令行启动已编写的 DSL 脚本。假设脚本名为 `workflow.yaml`,则可通过如下方式运行: ```bash dify run workflow.yaml ``` 4. **调试与优化** 如果遇到错误或者性能瓶颈,建议利用日志功能定位问题所在,并逐步调整参数直至满足预期效果。 ### 示例代码展示 下面是一个简单的例子,演示如何构建一个多阶段处理管道: ```python import subprocess def execute_command(command_string): result = subprocess.run(command_string.split(), capture_output=True, text=True) return {"stdout": result.stdout.strip(), "stderr": result.stderr.strip()} if __name__ == "__main__": output_data = execute_command("echo Hello World") print(output_data["stdout"]) ``` 此片段展示了调用外部 shell 命令的方法,在实际应用中可扩展至更复杂的场景下操作数据流转。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值