【GPT】Coze使用开放平台接口-【6】Dify 也来一遍

embedded/2024/9/20 1:20:02/ 标签: gpt, coze, dify, 开放平台, 工作流

前面讲了 coze 的相关用法,这边想着用 Dify 也来一遍,刚开始的时候接触的是 Dify,后面才是 coze。Dify 和 coze 的侧重点不同,我个人是更倾向用 Dify 构建工作流就可以了,coze 还是相对全能。

本节用 Dify 也会创建插件,工具,工作流,API 调用,机器人就不在这边描述了(个人感觉不是很好用)


1. 创建工具

Dify 创建工具的方式只有通过 OpenAPI-Swagger 的 json 数据,方式是可以直接贴,或者 URL 导入,但是没有其他办法。

所以,就需要自己生成 OpenApi-Swagger 啦,还不支持 swagger 2.0。本身用的代码 web 框架还是 Gin,这点有点难受,有需求的可以看这篇 【Go】Swagger v2 转 OpenApi v3 CLI - swag2op。

所有接口的调整,也都只能在这个 Schema 里面修改,导入成功后,就只能有对应的子工具了。

有留意之前 coze 创建插件那一篇的朋友,应该感受到一个很大的区别,不过这个区别不在这边讲,见下一篇,或者见下面内容。

在这里插入图片描述

2. 创建工作流

创建的步骤就不赘述了,直接看进入工作流后的面板,这边我们用短语音识别来作为例子。

所有工作流的编排,测试,API,请求日志(这个是通过API接口调的),分析,都在一个页面。

在这里插入图片描述

画布上一开始也只有一个节点,开始节点,这意味着可以有多个结束节点。注意,每个节点有且仅有一个子节点

创建下一个节点的方式,只有在节点左右 2 侧的添加按钮(开始节点只有右侧有,结束节点就只有左侧有)。这样子的方式也挺直觉的,下一个节点要做什么,就在右侧显而易见。

2.1. 开始节点

开始节点的参数,只有 4 种:

  • 文本:如果最大长度不设置,就是无限
  • 段落:如果最大长度不设置,就是无限
  • 下拉选项
  • 数字

不设置是指,删除掉,而不是写 0

相对来说是比较少一点的,而且比较固定。

在这里插入图片描述

2.2. 工具节点

点击开始节点右侧创建按钮,选择到自定义工具,找到刚才创建的工具,点击即可。

在这里插入图片描述

点击后,会自动弹出这个节点的编辑页面,可能你要输入参数什么的,就会让你直接编辑。

选择参数的办法是通过 / 就会出来可以选择的参数,选择的参数也是在当前节点之前,以及开始节点的参数。

在这里插入图片描述

按照第二篇的方式,调用完授权接口,就要调实际的 AI 能力接口,同样的方法加入短语音识别的节点。这时候要配置 Authorization 变量,发现只有授权节点的一个 text 输出变量。而这个 text 其实是,auth 接口返回的整个 json 结构体,而不是 Authorization。

在这里插入图片描述

这里其实很不方便,如果字段多一点的,就很麻烦。所以 Dify 的工作流可能更倾向于对话的工作流,而不是这种有很多返回变量。因此,我们就要在每个工具调用后,添加一个代码节点,转换出我们要的变量。

修改节点也不用删除节点,再添加,可以直接点击节点右上角有一个更改节点,就可以替换成代码执行节点。

注意,千万要想清楚你的整个流程,再去创建流程,没有 Ctrl + z 回退。如果你的这个节点配置好了所有参数,或者 LLM 节点配置了prompt,一替换就是全部消失(不要问我怎么知道的)。

在这里插入图片描述

2.3. 代码执行节点

代码执行节点,支持 python3 和 javaScript 代码。输入变量的赋值,就是上一个节点的 text,解析这个 json object ,然后把你需要的值返回出来。输出变量的名称要跟代码里面的一致,不然会一直报错,也不会告诉你因为变量不同。

在这里插入图片描述

这样子提取出来后,就可以复制给下一个工具节点

在这里插入图片描述

2.4 配置结束节点

假设我们配置好了短语音识别工具,再用代码提取出来 result 结果,这个结果就可以给 End 节点输出。

在这里插入图片描述

2.6. 整体

在这里插入图片描述

2.7. 大模型节点

这个工作流没有用到 LLM,但还是想提一下。Dify 的 LLM 节点就是可以配置自己的大模型,也可以在本地部署开源大模型,可以用到比较多的大模型。在 Agent中,用户最多可同时选用 4 个大型模型进行协同测试,这一设计使得 Dify 平台更倾向于为工作流程或 Agent 提供一个环境,让使用者能够集中精力于工作流程的精细打磨与优化。

在这里插入图片描述

2.8. 调试工作流

右上角点击运行就是调试页面,调试结果就是呈现在右侧的这么一小条里面,即使是点了展开,宽度也是一样。这样在对长的内容,其实不是很友好,不过每个节点的信息还是记得详细的。

在这里插入图片描述

3. API 调用

Dify 对工作流的所有功能都集中在一个页面,这样不用去别的地方找,编排下面就是访问 API。访问 API 页面右上角就是 API 密钥的管理,创建。接口文档也在同一个页面,这样子就很快可以让开发者去实现接口调用。前提一样,要发布这个工作流,也不用别人审批。

在这里插入图片描述

我们只列一下 Blocking 模式的接口

鉴权

API 密钥申请

请求地址

http://{IP跟每个人部署时候配置的 HOST 有关}/v1/workflows/run

Header
参数取值说明
AuthorizationBearer $Access_Token用于验证客户端身份的访问令牌,API 密钥
Content-Typeapplication/json解释请求正文的方式。
Body

inputs

类型:json object

是否可选:可选

说明:开始节点需要传入的参数

response_mode

类型:string

是否可选:必选

说明:

返回响应模式,支持

  • streaming 流式模式(推荐)。基于 SSE 实现类似打字机输出方式的流式返回。
  • blocking 阻塞模式,等待执行完毕后返回结果。(请求若流程较长可能会被中断)。

user

类型:string

是否可选:必选

说明:用户标识

响应字段
参数类型说明
workflow_run_idIntegerworkflow 执行 ID
task_idString任务 ID,用于请求跟踪和下方的停止响应接口
dataString工作流执行结果,通常为 JSON 序列化字符串,部分场景下可能返回非 JSON 结构的字符串。
- idStringworkflow 执行 ID
- workflow_idString关联 Workflow ID
- statusString执行状态, running / succeeded / failed / stopped
- outputsObject输出内容,响应字段里面的 outputs 就是 end 节点里面配置的结果。如果里面是 result,那 output 里面就是 {“result”:“xxxx”}。
- errorString错误原因
- elapsed_timeInteger耗时(s)
- total_tokensInteger总使用 tokens
- total_stepsInteger总步数(冗余),默认 0
- created_atInteger开始时间
- finished_atInteger结束时间
示例

在这里插入图片描述

4. API 日志

发布之后的所有调用日志都可以查到,用接口返回的日志 ID 搜索,就可以找到刚才调用的结果,详情及追踪,这个还是很好用的。

不过有一个不好的是,返回的 log id 和 task id 并不能用来做搜索,必须得自己在输入加一个 uuid,然后才能搜索出来。

在这里插入图片描述

总结

初步用下来,Dify 挺适合团队内部构建工作流使用的。虽然有一些体验上不是很好,但是适合创建大模型的一些中间应用。而且工作流创建完之后,有一个日志追踪的,省掉了再加一个监控的系统(当然是对测试的时候)。给到其他开发,还是给到产品,都可以快速地体验以及分析其中的问题。如果有些小的体验上做一些优化,那这个工作流的体验其实还是很不错的,尤其是在工具节点的优化上。
最后一篇呢,就列了一些我对比 coze 和 Dify 的一些体验上的不同,Coze使用开放平台接口-【7】Dify 比较篇。


上一篇:Coze使用开放平台接口-【5】API 调用


http://www.ppmy.cn/embedded/105166.html

相关文章

代码随想录 刷题记录-24 图论 (1)理论基础 、深搜与广搜

一、理论基础 参考: 图论理论基础 深度优先搜索理论基础 广度优先搜索理论基础 dfs dfs搜索可一个方向,并需要回溯,所以用递归的方式来实现是最方便的。 有递归的地方就有回溯,例如如下代码: void dfs(参数) {…

MySQL-CGI-响应报文

账号密码涉及到: 与数据库已记录下来的进行校验。 如果也是来一个新建一个连接,必然效率低。 可以做一个数据库连接池,预生成数据库连接。 如何生成数据库连接?下面的流程做很多次。 然后放在链表中,(池&am…

macos MacPort 包管理工具安装和使用

在macos v10.15版本中, xz, python等软件无法使用brew安装, 原因是brew对于旧版本的macos不再支持, 但是我们可以使用另外一个macos下的包管理工具来安装brew无法安装的软件, macport 是一个和brew类似的macos下的一个非常优秀的软件包安装管理工具. MacPort安装前提条件 安…

科研绘图系列:R语言基因PPI互作网络图(PPI network plot )

介绍 基因的PPT互作网络图。 加载R包 导入所需要的R包,在导入前需要用户自己安装。 library("tidyverse") library("magrittr") library("here") library("janitor") library("ggpubr") library("ComplexHeatmap&…

【STM32】位带操作

一、位带操作 1.意义 回想以前写51代码 ​ P0 0x10; //将P0端口设置为0x10 P1_01; //将P1端口0号引脚设置为高电平 a P2_2; //获取P2端口2号引脚的电平 根据上述的方法,我们可以发现快速定位修改某个引脚的电平还有获取引脚的状态 2.原因 GPIO_SetBits、GPI…

Ubuntu 22.04 镜像自定义制作

Centos封装镜像> Linux Centos ISO镜像自定义制作 Ubuntu20.04封装镜像> Ubuntu 20.04 镜像自定义制作 1、下载镜像 系统环境:ubuntu 22.04 镜像地址:https://mirrors.aliyun.com/ubuntu-releases rootubuntu:~# apt install -y p7zip xorriso ro…

Python进阶08-爬虫

零、文章目录 Python进阶08-爬虫 1、爬虫介绍 (1)爬虫是什么 **网络爬虫:**又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取网络信息的程序或者脚本,另外一些不常使用的名字还有蚂蚁、自…

应用层(Web与HTTP)

目录 常见术语 1.HTTP概况 2.HTTP连接 非持久HTTP流程 响应时间模型 持久HTTP 3.HTTP报文 3.1HTTP请求报文 3.2HTTP响应报文 HTTP响应状态码 4.Cookies(用户-服务器状态) cookies:维护状态 Cookies的作用 5.Web缓冲(…

视频智能分析打手机检测算法安防监控打手机检测算法应用场景、算法源码、算法模型介绍

随着智能手机的普及,手机已成为人们生活中不可或缺的一部分。然而,在某些场合,如驾驶、会议、学校课堂等,不当使用手机可能会导致安全隐患或干扰他人。因此,开发出一种能够准确识别并阻止不当使用手机的行为检测算法显…

TPM管理咨询公司一走,企业又恢复原样,为什么?

在探讨“TPM管理咨询公司离开后,企业为何常常恢复原样”这一深刻问题时,我们不得不深入剖析TPM理念的本质、实施过程中的挑战以及企业在持续变革中面临的普遍困境。TPM作为一种以最大化设备综合效率为目标的生产维护体系,其核心理念在于通过全…

C++ 消息分发类:详细示例应用

消息分发的概念 消息分发(Message Dispatching)是一种设计模式,广泛用于处理异步事件和消息。在 C 中,消息分发类通常用来接收和分发来自多个源的消息(如网络连接、传感器数据、用户输入等),并根…

如何使用 Canvas 和 Paint 进行绘制,以及如何处理自定义属性和解析 XML 属性

在 Android 中,自定义 View 的绘制通常涉及使用 Canvas 和 Paint 两个关键类。Canvas 提供了一个用于绘制图形的界面,而 Paint 则用来定义绘制的风格和颜色。以下是如何使用 Canvas 和 Paint 进行绘制的步骤,以及如何处理自定义属性和解析 XM…

Flink 1.14.* Flink窗口创建和窗口计算源码

解析Flink如何创建的窗口,和以聚合函数为例,窗口如何计算聚合函数 一、构建不同窗口的build类1、全局窗口2、创建按键分流后的窗口 二、在使用窗口处理数据流时,不同窗口创建的都是窗口算子WindowOperator1、聚合函数实现2、创建全局窗口(入参…

APP长文本内容编辑器功能实现方案

背景 CSDN APP 中原有编辑器页面为纯H5适配,整体用户交互体验差,如何优化APP端编辑器用户体验是我们团队需要思考的问题。下面我们以iOS为例展开讨论。 一、方案调研 我们分析了几款国内内容发布的APP,如知乎、今日头条、简书,…

深度学习100问46:什么是Dropout

嘿,你知道吗?在深度学习的奇妙世界里,有个超厉害的家伙叫 Dropout。 想象一下,你正在建造一个超级复杂的神经网络,就像搭建一座巨大的城堡。但有时候这座城堡可能会变得太娇气,只认得它见过的特定东西&am…

【CF补题数学裴蜀定理】 div969 C Dora and C++

Dora and C 分析: 对于两个数x,y 我们想要通过如下操作使得他们的差变得尽可能小 我们要如何操作? 这个操作也就是相当于 d e l ∣ y − x ∣ − k 1 ∗ x − k 2 ∗ y del|y-x|-k_1*x-k_2*y del∣y−x∣−k1​∗x−k2​∗y,让这个差值最小…

【TomCat】安装部署

首先得进行Java的安装和部署java1.8对应tomcat9 TomCat下载Apache Tomcat - Apache Tomcat 10 Software Downloads

yolo-world开放词汇检测onnxruntime和tensorrt推理

onnxruntime推理 导出onnx模型: from ultralytics import YOLOWorld,YOLO model YOLOWorld(yolov8s-worldv2.pt) model.set_classes(["glasses","shoes"]) model.save("yolo_world.pt") model YOLO(yolo_world.pt) model.export(…

记录 PyQt6 / PySide 6 自定义边框窗口的 Bug 及可能可行的解决方案:窗口抖动和添加 DWM 环绕阴影的大致原理

前言: 本篇文章将要讨论我在前不久发表的关于 PyQt6 / PySide6 自定义边框窗口代码及内容中的问题: (终)PyQt6 / PySide 6 Pywin32 自定义标题栏窗口 完全还原 Windows 原生窗口边框特效_pyside6 win32 无边框窗口-CSDN博客ht…

AOP和注解的配合使用(封装通用日志处理类)

自定义注解 Inherited Documented Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface MyLog {String value() default ""; } 定义切面 Aspect Component Slf4j public class LogAop {// 定义识别自定义注解的切点Pointcut("a…