当前位置: 首页 > news >正文

Dify工作流节点(二)

代码执行节点

代码节点支持运行 Python / NodeJS 代码以在工作流程中执行数据转换。该节点极大地增强了   开发人员的灵活性,使他们能够在工作流程中嵌入自定义的 Python 或 Javascript 脚本,并以预 设节点无法达到的方式操作变量。

代码执行节点设置页如下:

通过配置选项,你可以指明所需的输入和输出变量,并撰写相应的执行代码。 案例四:创建chatflow,执行指定sql通过python代码读取数据库数据。

1) 在mysql中准备表及数据

mysql搭建省略。按照如下方式创建mysql库、表及插入数据:

create database mydb;
use mydb;-- 学生表
CREATE TABLE mydb.students (id INT COMMENT '学生id',
name VARCHAR(100) COMMENT '学生姓名',
age INT COMMENT '学生年龄' ) COMMENT='学生表';
INSERT INTO mydb.students (id, name, age) VALUES
(1,'张三',18),
(2,'李四',19),
(3,'王五',20),
(4,'赵六',21),
(5,'孙七',18),
(6,'周八',19),
(7,'吴九',20),
(8,'郑十',18),
(9,'钱十一',18),   (10,'刘十二',20);-- 分数表
CREATE TABLE mydb.scores ( id INT COMMENT '学生id',
course_name VARCHAR(50) COMMENT '课程',
score INT COMMENT '成绩' ) COMMENT='分数表';
INSERT INTO mydb.scores (id, course_name, score) VALUES (1, '数学', 85),
(1, '语文', 78),
(2, '数学', 92), (2, '英语', 88),
(3, '数学', 76), (3, '物理', 82),
(4, '化学', 95), (5, '生物', 89),
(6, '历史', 79), (7, '地理', 91);

2) 创建开始节点并命名为“准备参数”

这里配置连接Mysql的host、port、user、password、database,sys.query作为用户输入的查 询SQL。

3) 创建代码执行节点并命名为“查询MySQL

第六步骤中查询MySQL的代码如下:import pymysql import re
import jsondef main(
host: str = '192.168.1.105',
port: int = 3306,
user: str = 'root',
password: str = '123456',
database: str = 'mydb',
sql: str = ''
):
"""
参数:
host: 数据库主机地址(默认: 192.168.1.105 )
port: 数据库端口(默认:3306)
user: 数据库用户名(默认: root)
password: 数据库密码(默认:123456)
database: 数据库名称(默认: mydb)
sql: 要执行的SELECT语句(必需)返回:
- 总是返回 {"result": "完整字符串"} 格式
"""
# 校验必填参数
if not sql.strip():
return {"result": "SQL语句不能为空"}
# 严格校验SQL类型
cleaned_sql = re.sub(r'[\s\t\n]+', ' ', sql.strip().lower())
if not cleaned_sql.startswith("select"):
return {"result": "仅允许执行SELECT查询语句"}
# 阻止危险操作
forbidden_keywords = ['insert', 'update', 'delete', 'drop', 'alter', 'create', 'truncate'] if any(keyword in cleaned_sql for keyword in forbidden_keywords):
return {"result": "检测到非查询操作语句"}try:
# 建立数据库连接
connection = pymysql.connect(
host=host,
port=port,
user=user,
password=password,database=database,
cursorclass=pymysql.cursors.DictCursor )
with connection:
with connection.cursor() as cursor:
# 执行SQL
cursor.execute(sql)
result = cursor.fetchall()
# 将结果转换为完整字符串
if not result:
result_str = "查询成功,但结果为空"
else:
# 将结果转换为格式化的JSON字符串
result_str = json.dumps(result, indent=2, ensure_ascii=False) result_str = f"查询成功,结果如下:\n{result_str}"
return {"result": result_str}
except pymysql.Error as err:
return {"result": f"数据库错误: {str(err)}"} except Exception as e:
return {"result": f"未知错误: {str(e)}"}

4) 创建LLM节点并命名为“结果转换成表格”

在以上提示词中写入如下内容,让LLM将结果表格化。

如果结果{{result}}是一个json字符串而非单独的字符串,请将{{result}}给我整理一个表格进行展示

5) 创建直接回复节点并命名为“展示结果”

6) 测试并发布chatflow

预览测试:

发布使用:

问题分类器节点

问题分类器能够根据用户输入的问题,使用 LLM 推理与之相匹配的分类并输出分类结果,向下游 节点提供更加精确的信息。

问题分类节点设置页如下:

 模型:将用户问题进行分类所使用的LLM模型。

  输入变量:用户输入的内容,该内容用于LLM进行问题分类。客服问答场景下一般为用户输 入的问题 sys.query。

  视觉:开启视觉功能将允许模型输入图片,并根据图像内容的理解回答用户问题。

  分类:手动添加多个分类,通过编写分类的关键词或者描述语句,让大语言模型更好的理解 分类依据。

  高级设置:可以在 高级设置-指令 里补充附加指令,比如更丰富的分类依据,以增强问题分 类器的分类能力

  记忆:开启记忆后问题分类器的每次输入将包含对话中的聊天历史,以帮助 LLM 理解上文, 提高对话交互中的问题理解能力。

  输出变量:class_name 存储了分类模型的预测结果。当分类完成后,这个变量会包含具体 的类别标签,你可以在后续的处理节点中引用这个分类结果来执行相应的逻辑。

案例五:创建chatflow,对用户的问题记性分类,根据本地知识库进行回复。

1) 创建开始及问题分类节点

问题分类节点改名为“使用LLM对问题分类”,输入变量设置“sys.query”,分类问题设置三 类:“与内科学相关问题”、“与法律相关问题”、“其他问题”,输出变量为class_name。

2) 对“问题分类节点”输出设置不同的“知识检索”节点

“知识检索”节点中修改对应名称,并指定使用的知识库。对于分类3“其他问题”设置“直接回 复”节点,内容为“对于/class_name 相关问题,没有找到你咨询的问题答案!”。

3) 对每个“知识检索”节点设置LLM并修改名称

内科学LLM中设置SYSTEM提示词为:

你是一个精通内科学的高手,使用以下内容作为你所学习的知识,这些内容已经放在<context></context>标签内 <context>

{{上下文}}

</context>

回答用户时,仅能根据知识库中的内容来回复用户问题,避免提及你是从上下文中获取的信息,如果你不知道,就

家庭教育促进法LLM设置SYSTEM提示词为:

你是一个对家庭教育促进法比较精通的高手,使用以下内容作为你所学习的知识,这些内容已经放在<context></ <context>

</context>

回答用户时,仅能根据知识库中的内容来回复用户问题,避免提及你是从上下文中获取的信息,如果你不知道,就

4) 对LLM输出text结果设置“直接回复”节点

5) 测试并发布chatflow

预览测试:

发布使用:

条件分支节点

条件分支节点可以根据 If/else/elif 条件将 Chatflow / Workflow 流程拆分成多个分支。 条件分支节点设置页如下:

条件类型支持如下:

  包含(Contains

  不包含(Not contains

  开始是(Start with

  结束是(End with

  是(Is

  不是(Is not)

   为空(Is empty

  不为空(Is not empty)

案例六:创建chatflow,对用户提问使用条件分支决定从本地知识库回复还是大模型通用回复。

1) 创建开始及条件分支节点

条件分支中判断用户输入问题如果是以“医学:”开头的提问,那么就从知识库中检索答案回 复,否则使用通用回复。

条件分支中判断用户输入问题如果是以“医学:”开头的提问,那么就从知识库中检索答案回 复,否则使用通用回复。

2) 对于IF分支设置“知识检索”节点进行问题回复

LLM2中内容如下:

你是一个精通内科学的高手,使用以下内容作为你所学习的知识,这些内容已经放在<context></context>标签内 <context>

{{上下文}}

</context>

回答用户时,仅能根据知识库中的内容来回复用户问题,避免提及你是从上下文中获取的信息,如果你不知道,就

3) 对于ELSE分支设置“LLM”节点进行通用回复

4) 测试并发布chatflow

预览测试:

发布使用:


文章转载自:

http://YaDKY8wC.chrbp.cn
http://Aynrbl7s.chrbp.cn
http://Qqv7xyIu.chrbp.cn
http://Oe0pDKWw.chrbp.cn
http://eGOGgRTM.chrbp.cn
http://msKzn8YG.chrbp.cn
http://x5IJ9fy6.chrbp.cn
http://2LgMN3jg.chrbp.cn
http://DyIhMSXG.chrbp.cn
http://pWkDcng3.chrbp.cn
http://rRGwSv5k.chrbp.cn
http://n32ZQ3OZ.chrbp.cn
http://DVSrHsl4.chrbp.cn
http://D8N0YuCx.chrbp.cn
http://Bo63R0V5.chrbp.cn
http://kZi1ShOT.chrbp.cn
http://Q6BrkueM.chrbp.cn
http://mubJv29e.chrbp.cn
http://m09sJXK0.chrbp.cn
http://WwybGLVX.chrbp.cn
http://izy5warP.chrbp.cn
http://FFaaGRmb.chrbp.cn
http://WfbJ9lt5.chrbp.cn
http://Bq1DRjlR.chrbp.cn
http://3CDJhVld.chrbp.cn
http://3xlZVo5w.chrbp.cn
http://Ydl41jap.chrbp.cn
http://22R2evCP.chrbp.cn
http://PWJ6fkqT.chrbp.cn
http://S2tSRXfn.chrbp.cn
http://www.dtcms.com/a/372530.html

相关文章:

  • Hologres自增序列Serial使用简介
  • SpringBoot-Web开发-内容协商——多端内容适配内容协商原理HttpMessageConverter
  • ESWA修改后投稿流程
  • 可能断更说明
  • Batch Normalization:深度学习中的“加速器”与“稳定器”
  • 【Docker-Day 25】深入理解 Kubernetes Namespace:实现多租户与环境隔离的利器
  • Java工业通信实战(三):Modbus RTU串口通信实现
  • Referential Integrity 引用完整性
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(27):文法+单词第8回4+考え方7
  • Verilog三段式FSM,实现十字路口红绿灯
  • Java-面试八股文-JVM篇
  • Android开发-Activity附加信息
  • linux内核 - 获取单调计时时间戳的方法
  • 文献阅读 250907-Humans have depleted global terrestrial carbon stocks by a quarter
  • 装饰(Decorator)模式可以在不修改对象外观和功能的情况下添加或者删除对象功能
  • Java-Spring入门指南(三)深入剖析IoC容器与Bean核心机制
  • JavaScript 创建型设计模式详解
  • 【深度学习】CNN 卷积层
  • 洛谷 B4071 [GESP202412 五级] 武器强化
  • 0. 系统架构设计师考试大纲核心内容速览
  • [C/C++学习] 6.弹跳小球(B)
  • Easysearch 证书:Windows 上创建自签名证书的 7 种方法
  • Kafka基础理论
  • JavaScript 设计模式概览
  • Jenkins与Kubernetes集成部署流水线
  • arduino uno小车开发接线与程序记录
  • 【LeetCode 热题 100】128. 最长连续序列
  • 在object-c中方法多个参数怎么接收?
  • 蓓韵安禧DHA高含量好吸收特性深度解析
  • Pandas 合并数据集:merge 和 join