找回密码
 立即注册
首页 业界区 业界 超实用!Dify调用Java的3种实现方式!

超实用!Dify调用Java的3种实现方式!

申屠梓彤 前天 14:50
在一些复杂的业务中,我们可能需要使用 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 请求”节点即可,如下图所示:
1.png

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

当然,我们也可以利用它来发送文件给 Java 程序,并且可以自定义失败重试配置和错误异常配置。
对于被调用方 Java 来说,只需要提供一个 HTTP 接口即可,当然生成环境要考虑添加 APIKey 以保证调用的安全性,这里提供一个简单的 Java 服务接口:
  1. import com.ai.difyhttpserver.entity.User;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RestController;
  4. @RestController
  5. @RequestMapping("/it")
  6. public class InterviewController {
  7.     @RequestMapping("/add")
  8.     public boolean add(User user) {
  9.         // 执行数据库添加操作
  10.         System.out.println(user.toString());
  11.         return true;
  12.     }
  13. }
复制代码
3.自定义工具

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

配置的 Schema 需要满足 OpenAPI 协议,配置如下:
  1. {
  2.   "openapi": "3.1.0",
  3.   "info": {
  4.     "title": "html to image tools",
  5.     "description": "Generate image files based on HTML code",
  6.     "version": "v1.0.0"
  7.   },
  8.   "servers": [
  9.     {
  10.       "url": "http://192.168.3.94:8080"
  11.     }
  12.   ],
  13.   "paths": {
  14.     "/html2img/gen": {
  15.       "get": {
  16.         "description": "Generate image files based on HTML code",
  17.         "operationId": "html2image",
  18.         "parameters": [
  19.           {
  20.             "name": "html",
  21.             "in": "query",
  22.             "description": "HTML code",
  23.             "required": true,
  24.             "schema": {
  25.               "type": "string"
  26.             }
  27.           }
  28.         ],
  29.         "deprecated": false
  30.       }
  31.     }
  32.   },
  33.   "components": {
  34.     "schemas": {
  35.     }
  36.   }
  37. }
复制代码
同样,Java 服务器端只需要提供一个可以使用 HTTP 协议访问的接口即可。
4.MCP通讯

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

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

Dify 只支持 HTTP 协议的 MCP 服务调用,它的配置格式如下:
  1. {
  2.   "server_name1": {
  3.     "transport": "sse",
  4.     "url": "http://127.0.0.1:8000/sse",
  5.     "headers": {},
  6.     "timeout": 50,
  7.     "sse_read_timeout": 50
  8.   },
  9.   "server_name2": {
  10.     "transport": "sse",
  11.     "url": "http://127.0.0.1:8001/sse"
  12.   },
  13.   "server_name3": {
  14.     "transport": "streamable_http",
  15.     "url": "http://127.0.0.1:8002/mcp",
  16.     "headers": {},
  17.     "timeout": 50
  18.   },
  19.   "server_name4": {
  20.     "transport": "streamable_http",
  21.     "url": "http://127.0.0.1:8003/mcp"
  22.   }
  23. }
复制代码
支持配置多个 MCP 服务,或者是以下 JSON 格式也支持:
  1. {
  2.   "mcpServers": {
  3.       "server_name1": {
  4.         "transport": "sse",
  5.         "url": "http://127.0.0.1:8000/sse",
  6.         "headers": {},
  7.         "timeout": 50,
  8.         "sse_read_timeout": 50
  9.       },
  10.       "server_name2": {
  11.         "transport": "sse",
  12.         "url": "http://127.0.0.1:8001/sse"
  13.       },
  14.       "server_name3": {
  15.         "transport": "streamable_http",
  16.         "url": "http://127.0.0.1:8002/mcp",
  17.         "headers": {},
  18.         "timeout": 50
  19.       },
  20.       "server_name4": {
  21.         "transport": "streamable_http",
  22.         "url": "http://127.0.0.1:8003/mcp"
  23.       }
  24.     }
  25. }
复制代码
配置Agent

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

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

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

测试MCP调用

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

执行符合预期。
Spring AI 实现 MCP 服务器端参考我之前发的文章,这里就不再赘述。
小结

Dify 调用 Java 程序的实现方式有 3 种:HTTP 请求、自定义工具、MCP 通讯方式。其中最简单、最灵活的实现方式为 HTTP 请求方式;自定义工具适合偏工具性质(而非业务性质)的调用;MCP 适合一次性注入多个工具方法给 Dify 使用的场景。
本文已收录到我的技术小站 www.javacn.site,其中包含的内容有:Spring AI、LangChain4j、Dify、AI Agent、MCP、Function Call、RAG、向量数据库、Prompt、多模态、向量数据库、嵌入模型等内容。
   

关注公众号(加好友):

            
作者:        王磊的博客        
出处:        http://vipstone.cnblogs.com/        
   

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册