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

1.前言

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

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

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

2.开发后台接口

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

@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: true
          schema:
            type: "string"
        - name: "taskDate"
          in: "query"
          required: true
          schema:
            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自定义工具和参数提取器的用法。自定义工具是通用能力的封装,可以增强流程编排的能力,用于特定的业务场景,并且容易在不同流程编排中复用。

### 自定义 Dify 聊天界面设计与实现 对于希望自定义 Dify 的聊天界面的设计与实现,主要涉及前端开发的知识和技术栈。通常情况下,Dify 提供了一定程度上的可配置性和扩展接口来支持用户定制化需求。 #### 修改 HTML 和 CSS 文件 如果想要调整页面布局、颜色主题或是增加特定组件,则需要编辑项目中的HTML和CSS文件[^1]。通过修改这些静态资源文件可以改变网页的整体外观以及交互效果。例如: ```html <!-- index.html --> <div class="chat-container"> <!-- Chat messages will be displayed here --> </div> <button id="sendButton">Send Message</button> ``` ```css /* styles.css */ body { background-color: #f0f2f5; } .chat-container { width: 80%; margin: auto; } ``` #### 使用 JavaScript 实现动态功能 为了增强用户体验并提供更丰富的互动方式,在JavaScript中编写逻辑代码是非常重要的一步。这可能涉及到AJAX请求处理消息发送接收流程,或者是利用WebSocket建立实时通讯连接等功能特性[^2]。 ```javascript // main.js document.getElementById('sendButton').addEventListener('click', function() { const message = document.querySelector('#messageInput').value; fetch('/api/messages', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ text: message }) }).then(response => response.json()) .then(data => console.log(data)); }); ``` #### 集成第三方库或框架 当有更高层次的需求时,比如图表展示、语音输入输出等高级特性,可以通过引入流行的开源工具包如React, Vue 或者 Angular 来构建更加复杂的应用程序结构;也可以考虑集成一些专门用于自然语言处理(NLP)的任务型对话管理平台APIs,从而让应用程序具备更强的语言理解和生成能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值