掘金 人工智能 06月05日 16:53
超实用!Dify调用Java的3种实现方式!
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文探讨了在 Dify 平台中调用 Java 程序的多种实现方案,主要包括通过 HTTP 请求、自定义工具以及 MCP 通讯三种方式。文章详细介绍了每种方法的配置步骤、适用场景以及优缺点,旨在帮助开发者根据实际业务需求选择最合适的集成方案,实现 Dify 与 Java 后端服务的有效互通。

🌐 **HTTP 请求**:这是最直接的方式,Dify 通过 HTTP 协议与 Java 程序交互。用户只需在 Dify 工作流中添加“HTTP 请求”节点,配置请求参数即可。Java 端只需提供 HTTP 接口,实现简单,适用于获取外部数据、webhook、生成图片等场景。

🛠️ **自定义工具**:这种方法需要将 Java 程序封装成 Dify 中的自定义工具。配置时,需要遵循 OpenAPI 协议,定义工具的接口信息。Java 服务端同样提供 HTTP 接口,供 Dify 调用。此方法更适合工具性质的调用,而非纯粹的业务逻辑。

📡 **MCP 通讯**:MCP 通讯方式相对复杂,需要 Java 程序实现 MCP 服务器端,并在 Dify 中配置相应的 Agent 策略。Dify 支持通过 HTTP 协议调用 MCP 服务,需配置 MCP 服务地址、Agent 策略、LLM 以及指令和查询问题。虽然实现复杂,但适合一次性注入多个工具方法供 Dify 使用。

在一些复杂的业务中,我们可能需要使用 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 请求”节点即可,如下图所示:

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

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

对于被调用方 Java 来说,只需要提供一个 HTTP 接口即可,当然生成环境要考虑添加 APIKey 以保证调用的安全性,这里提供一个简单的 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 中的自定义工具,才能正常调用,如下图所示:

配置的 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": false      }    }  },  "components": {    "schemas": {    }  }}

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

4.MCP通讯

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

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

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": "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": {        "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 策略:

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

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

测试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、多模态、向量数据库、嵌入模型等内容。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Dify Java HTTP 请求 自定义工具 MCP 通讯
相关文章