开发者

Dify调用Java的三种实现方式

目录
  • 引言
  • 1.解决方案概述
  • 2.HTTP请求
  • 3.自定义工具
  • 4.MCP通讯
    • 配置MCP服务地址
    • 配置Agent
    • 测试MCP调用
  • 小结

    引言

    在一些复杂的业务中,我们可能需要使用 Dify 调用外部程序(如 Java 程序),因为这样才能满足业务的特殊需求。

    例如,当我们使用 Dify 实现“AI 简历自动筛选器”的时候,我们首先会使用 AI 筛选出符合招聘要求的简历,然后再将简历存放到公司的“人才库”系统中,完成后续流程的招聘需要(预约面试、面试评价、发送 Offer 等操作),这个时候就需要让 Dify 调用 Java 程序了。

    那么问题来了,使用 Dify 调用 Java 程序的实现方式有哪些呢?今天我们就来盘点一下。

    1.解决方案概述

    Dify 调用 Java 程序的解决方案有以下几种:

    • 通过 “HTTP 请求” 的方式调用 Java 程序。
    • 通过 “自定义工具” 的方式调用 Java 程序。
    • 通过 MCP 的方式调用 Java 程序。

    接下来,我们分别来看。

    2.HTTP请求

    HTTP 请求允许通过 HTTP 协议发送服务器请求,适用于获取外部数据、webhook、生成图片、下载文件等情景。它让你能够向指定的网络地址发送定制化的 HTTP 请求,实现与各种外部服务的互联互通。

    它的使用也很简单,我们只需要在 Dify 的工作流中添加“HTTP 请求”节点即可,如下图所示:

    Dify调用Java的三种实现方式

    它的参数配置包含以下这些:

    Dify调用Java的三种实现方式

    当然,我们也可以利用它来发送文件给 Java 程序,并且可以自定义失败重试配置和错误异常配置。

    对于被调用方 Java 来说,只需要提供一个 HTTP 接口即可,当然生成环境要考虑添加 APIjavascriptKey 以保证调用的安全性,这里提供一个简单的 Java 服务接口:

    import com.ai.difyhttpserver.entity.User;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/it")
    public class InterviewController {
        @RequestMapping("/add")
        public boolean add(User user) {
            // 执行数据库添加操作
            System.out.println(user.toString());
            return true;
        }
    }
    

    3.自定义工具

    自定义工具的调用方式,需要先把 Java 程序发不成 Dify 中的自定义工具,才能正常调用,如下图所示:

    Dify调用Java的三种实现方式

    配置的 Schema 需要满足 OpenAPI 协议,配置如下:

    {
      "openapi": "3.1.0",
      "info": {
        "title": "html to image tools",
        "description": "Generate image files based on HTML code",
        "version": "v1.0.0"
      },
      "servers": [
        {
          "url": "http://192.168.3.94:8080"
        }
      ],
      "paths": {
        "/html2img/gen": {
          "get": {
            "description": "Generate image files based on HTML code",
            "operationId": "html2image",
            "parameters": [
              {
                "name": "html",
                "in": "query",
                "description": "HTML code",
                "required": true,
                "schema": {
                  "type": "string"
                }
              }
            ],
            "deprecated": f编程客栈alse
          }
        }
      },
      "components": {
        "schemas": {
    
        }
      }
    }
    

    同样,Java 服务器端只需要提供一个可以使用 HTTP 协议访问的接口即可。

    4.MCP通讯

    这种通讯方式实现最麻烦,有点大炮打蚊子的php感觉,但也可以实现 Dify 调用 Java 程序,此时要求先试用 Java 程序,例如 Spring AI 实现一个 MCP 服务器端,然后再使用 Dify 添加支持 MCP 调用的 Agent 策略,来调用 Java 的 MCP 服务,如下图所示:

    安装 Agent 策略(支持 MCP 工具)如下图所示:

    Dify调用Java的三种实现方式

    MCP SSE 选装,非必须,可以为后续 Agent 提供 MCP 工具列表,方便 LLM 正确理解和调用工具。

    配置MCP服务地址

    Dify 只支持 HTTP 协议的 MCP 服务调用,它的配置格式如下:

    {
      "server_name1": {
        "transport": "sse",
        "url": "http://127.0.0.1:8000/sse",
        "headers": {},
        "timeout": 50,
        "sse_read_timeout": 50
      },
      "server_name2": {
        "transport"js: "sse",
        "url": "http://127.0.0.1:8001/sse"
      },
      "server_name3": {
        "transport": "streamable_http",
        "url": "http://127.0.0.1:8002/mcp",
        "headers": {},
        "timeout": 50
      },
      "server_name4": {
        "transport": "streamable_http",
        "url": "http://127.0.0.1:8003/mcp"
      }
    }
    

    支持配置多个 MCP 服务,或者是以下 jsON 格式也支持:

    {
      "mcpServers": {
          "server_name1": {
            "transport": "sse",
            "url": "http://127.0.0.1:8000/sse",
            "headers": {},
            "timeout": 50,
            "sse_read_timeout": 50
          },
          "server_name2": {
            "transport": "sse",
            "url": "http://127.0.0.1:8001/sse"
          },
          "server_name3":javascript {
            "transport": "streamable_http",
            "url": "http://127.0.0.1:8002/mcp",
            "headers": {},
            "timeout": 50
          },
          "server_name4": {
            "transport": "streamable_http",
            "url": "http://127.0.0.1:8003/mcp"
          }
        }
    }
    

    配置Agent

    Agent 需要配置的项目比较多,首先是 Agent 策略:

    Dify调用Java的三种实现方式

    然后是 LLM,选择合适的大模型即可,之后配置 MCP 工具和 HTTP 地址,如下图所示:

    Dify调用Java的三种实现方式

    之后配置指令和查询问题:

    Dify调用Java的三种实现方式

    测试MCP调用

    我们创建的是一个 ChatFlow,执行效果如下:

    Dify调用Java的三种实现方式

    执行符合预期。

    Spring AI 实现 MCP 服务器端参考我之前发的文章,这里就不再赘述。

    小结

    Dify 调用 Java 程序的实现方式有 3 种:HTTP 请求、自定义工具、MCP 通讯方式。其中最简单、最灵活的实现方式为 HTTP 请求方式;自定义工具适合偏工具性质(而非业务性质)的调用;MCP 适合一次性注入多个工具方法给 Dify 使用的场景。

    以上就是Dify调用Java的三种实现方式的详细内容,更多关于Dify调用Java方式的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜