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