大模型应用编排工具Dify之自定义工具

news/2024/12/20 6:46:20/
aidu_pl">

1.前言

​ dify中提供了自定义工具的能力,工具十分容易复用,在需要的流程编排中进行引用即可。根据笔者的经验和理解,自定义工具有点类似微服务,可以把通用的能力封装到工具里面。同时,工具还提供了测试和鉴权等功能,对开发者比较友好。

环境信息:dify-0.8.3,spring-boot-2.7.6

实现效果如下:
在这里插入图片描述

2.开发后台接口

这里使用 spring-boot快速开发一个 post接口作为演示,代码如下:

java">@RestController
@RequestMapping("demo/tools")
public class DemoCtl {@PostMapping("/task")public ResponseEntity<String> queryTask(@RequestParam Map<String, String> params) {String taskName = params.get("taskName");String taskDate = params.get("taskDate");String result = String.format("任务:%s,执行日期:%s,状态:成功", taskName, taskDate);return ResponseEntity.ok(result);}}

上述代码接收两个参数:任务名和任务日期,用于模拟日常工作中的任务查询功能。

3.编写工具定义

这里使用 idea提供的 Generate OpenAPI draft生成接口的定义信息,然后根据实际情况进行修改形成 dify的工具定义,这里生成的接口定义如下:

openapi: "3.0.3"
info:title: "dify_tools_demo API"description: "dify_tools_demo API"version: "1.0.0"
servers:- url: "http://127.0.0.1:8080"
paths:/demo/tools/task:post:summary: "POST demo/tools/task"operationId: "queryTask"parameters:- name: "taskName"in: "query"required: trueschema:type: "string"- name: "taskDate"in: "query"required: trueschema:type: "string"responses:"200":description: "OK"content:'*/*':schema:type: "string"

把上面编写好的接口定义 yaml复制到 dify工具定义里面就可以创建一个工具,如下:
在这里插入图片描述

注意:上图中的 servers是指的接口所在服务器IP和端口号。

4.在流程编排中应用工具

在上面构建的 dify自定义工具需要输入参数进行任务状态的查询,在流程编排里面需要配合参数提取器进行使用。

补充:参数提取器,可以编写提示词让大模型从用户的提问中提取需要的信息,并存入对应字段。

大致流程是

  1. 问题分类

    填写分类依据:查询任务执行状态。

  2. 参数提取

    参数提取器里的提示词样例如下:

    你是一个平台运维人员,需要提取

    {{#context#}}

    这段话中的任务名称 taskName,任务执行日期 taskDate。

  3. 调用自定义工具

    这里需要引用第2步提取到的参数信息。

  4. 输出答复

这里笔者准备了一个接近工作场景的问题:

​ 帮我看看任务 dws-product-d 20241218 执行完了吗

完整的流程编排和效果如下:
在这里插入图片描述

5.总结

​ 本文通过一个查询指定日期任务运行状态的流程编排,介绍了 dify自定义工具和参数提取器的用法。自定义工具是通用能力的封装,可以增强流程编排的能力,用于特定的业务场景,并且容易在不同流程编排中复用。


http://www.ppmy.cn/news/1556592.html

相关文章

36. Three.js案例-创建带光照和阴影的球体与平面

36. Three.js案例-创建带光照和阴影的球体与平面 实现效果 知识点 Three.js基础 WebGLRenderer WebGLRenderer 是Three.js中最常用的渲染器&#xff0c;用于将场景渲染到网页上。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobject可选参数&#…

【Python】pandas库---数据分析

大学毕业那年&#xff0c;你成了社会底层群众里&#xff0c;受教育程度最高的一批人。 前言 这是我自己学习Python的第四篇博客总结。后期我会继续把Python学习笔记开源至博客上。 上一期笔记有关Python的NumPy数据分析&#xff0c;没看过的同学可以去看看&#xff1a;【Pyt…

SAP抓取外部https报错SSL handshake处理方法

一、问题描述 SAP执行报表抓取https第三方数据,数据获取失败。 报错消息: SSL handshake with XXX.COM:449 failed: SSSLERR_SSL_READ (-58)#SAPCRYPTO:SSL_read() failed##SapSSLSessionStartNB()==SSSLERR_SSL_READ# SSL:SSL_read() failed (536875120/0x20001070)# …

MySQL LEFT JOIN 性能优化策略

文章目录 写在文章开头详解MySQL left join场景描述讲讲join的原理能不能说说这个LEFT JOIN如何加索引left join on 左右字段是否都需要加索引?为什么?你觉得针对联表查询还有那些优化技巧小结参考写在文章开头 连接查询算是日常比较常用的数据库关联关键字涉及左外连接、右…

排序算法深度好文(图解 + 代码解析 + 误区 QA )——学排序看这一篇就够了!!!

排序算法 一、概述 1. 内部排序 (1) 冒泡排序 (2) 选择排序 a. 简单选择排序 b. 堆排序 (3) 插入排序 a. 直接插入排序 b. 希尔排序 (4) 快速排序 快速排序 hoare 版本 快速排序挖坑法 优化一随机化快速排序 优化二中位数三分法 (5) 归并排序 (6) 基数排序 2. …

1095. 格子图2

题目描述 给出一个 n ∗ m n*m n∗m的格子图,你从左上角 ( 0 , 0 ) (0,0) (0,0)出发,每次只能向右走或者向下走,问有多少种方法能走到 ( n , m ) (n,m) (n,m)这个格子? 输入 一行,两个整数 n n n, m m m,其中 n < = 1000000 n<=1000000 n<=

【机器学习】乱象中寻序,虚实间求真:统计学连接数据与真理的桥梁

文章目录 统计学基础&#xff1a;揭开机器学习的数学面纱前言一、统计学的核心概念1.1 描述统计1.1.1 集中趋势的测量1.1.2 离散程度的测量1.1.3 数据分布与偏态 1.2 推断统计1.2.1 样本与总体1.2.2 假设检验1.2.3 置信区间 二、推断统计&#xff1a;从样本到总体的桥梁2.1 样本…

HCIA-Access V2.5_3_1_1_VLAN技术原理_VLAN概述_VLAN产生的原因

本章导读 接入网设备大部分工作在二层网络&#xff0c;VLAN的产生为传统的LAN网络注入了新的活力&#xff0c;引起了LAN应用的一场变革。 本章介绍了在交换机中怎样配置VLAN&#xff0c;详细描述了VALN数据帧在交换机与交换机之间传递过程中的变化情况。 你可以带着这些问题…