Dify工作流实战
前言:实现通过dify工作流创建优惠券,后续可以根据自己公司的业务,创建对应的工作流,实现不同的业务场景
一、工作流需要实现的流程
- 用户传入需求
- 大模型理解需求,生成创建优惠券的接口数据
- 调用创建接口,成功创建优惠券
二、Dify工作流设计
1、开始
2、获取当前时间
- 大模型在没有联网的时候,基本不能拿到当前时间,所有我们需要通过工具去拿当前时间
- 在格式里面,我们可以设置时间格式%Y-%m-%d %H:%M:%S,时区选择上海(按需)
3、获取时间戳
获取时间戳的输入就是获取当前时间的输出,可以在输入框输入/,就可以拿到想要的输入变量
4、LLM-生成测试用例
添加需要用到的大模型,我这边用的是 Doubao-1.5-visi on-pro-32k,在系统提示词里面输入提示词,提示词里面包含一下结构
# 角色:接口测试专家---------------这个目的是让大模型认识到你是以什么角度去执行任务
## 背景:用户提出需求,根据用户的需求生成具体的json数据-------------------------------交待一下这个工作流具体要做什么
## json格式要求:直接把创建优惠券的接口入参放进来,每个参数给写数据,数据后面写你对这个参数的具体要求,比如,金额,用户没给具体金额,默认值就是100-----------交待对数据格式的要求,其他要求也可以写在里面
## 技能:理解用户需求,熟悉json格式,熟悉http协议-------要求大模型在执行的过程中需要具备的能力
## 工作流:分析用户需求,确定要构造几张优惠券;参考json格式要求,输出一样的格式,将所有的json对象都放在一个数组里面,哪怕是一张优惠券也要放在一个数组里面,获取当前时间---说明一下整个执行过程,还有要求
## 限制:用户没给具体需要的值,就用默认值,开始时间需要结束时间,门槛金额要大于优惠券金额,直接给json,需要对给出的数据做结束
## 示例:---用户需求:帮我构造1张面额为500的优惠券,输出json:[{"title":"优惠券测试123","coupon_price":500,"coupon_threshold_price":600,"start_time":"2025-04-07 00:00:00","end_time":"2025-04-14 00:00:00","create_num":100,"limit_num":1,"type":"FREE_GET"}]---
提示词可以在执行的过程中不断的调整,越写越熟练
设置温度和最大生成长度,温度相当于每次生成内容的随机性,我一般设置成0.7,输出长度直接拉到最大
5、测试一下LLM出来的效果
6、代码--处理时间戳
背景:因为s开始时间和结束时间的传参都是时间戳,如果在工作流中要求大模型构造数据的时候用时间戳,很难构造出来,出来的数据总是有问题,所有我们可以直接让大模型构正常的时间,然后通过代码转换,不会代码的同学也没事,给你们一个提示词模板,可以通过提示词让ai生成代码,把生成的代码放到工作流中,可以进行测试一下
# 背景
编写一个python函数,可以把入参中的日期改成时间戳# 需求
入参中的start_time和end_time,需要把这两个参数转换成对应的时间戳#函数入参
##入参
贴一下自己的入参#函数返回
是一个字典,包含了替换时间戳后的入参#限制
1、函数名称为main
2、函数入参均为字符格式,根据用户的需求,包含一个或者多个入参
3、函数返回结果为一个字典,根据用户需求返回对应数据
4、所有代码封装到main函数即可,不需要拆分
7、调用创建优惠券接口,需要用到token,可以先用http请求先调用http请求,获取token,再进行调用创建优惠券接口
8、代码,获取access_toke
9、迭代
用户可能需要创建多张优惠券,那就需要循环调用创建优惠券的接口。
迭代的入参需要是一个数组
迭代本质上就是一个for循环
因为入参是一个数组,数值里面有很多json,我们需要拿到这一个个json,可以通过一个迭代的内置变量去拿到,items
迭代里面要加一http请求去创建优惠券,整个http请求的参数是键值对,大模型给我们的数据是一个包含很多个json的数值,我们要拿到单个数值
,然后将单个数组里面的参数都拿出来,再返回出去,给到http请求来用,这一步我们可以用代码来实现,代码的入参是/items这个迭代的内置变量,
注意输出变量的数据类型,看看之前提示词定义的数据
迭代的返回可以设置成http接口的body
def main(arg1: dict) -> dict:return {"title": arg1['title'] ,"coupon_price": arg1['coupon_price'] ,"coupon_threshold_price": arg1['coupon_threshold_price'] ,"start_time": arg1['start_time'] ,"end_time": arg1['end_time'] ,"create_num": arg1['create_num'] ,"limit_num": arg1['limit_num'] ,"type": arg1['type']}
10、直接回答
设置成迭代的返回就行,然后进行测试