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

1.前言

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

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

实现效果如下:
大模型应用编排工具Dify之自定义工具_第1张图片

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工具定义里面就可以创建一个工具,如下:
大模型应用编排工具Dify之自定义工具_第2张图片

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

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

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

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

大致流程是

  1. 问题分类

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

  2. 参数提取

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

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

    {{#context#}}

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

  3. 调用自定义工具

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

  4. 输出答复

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

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

完整的流程编排和效果如下:
大模型应用编排工具Dify之自定义工具_第3张图片

5.总结

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

你可能感兴趣的:(LLM,Java开发,chatgpt,spring,boot,ai,java)