Dify調(diào)用Java的三種實現(xiàn)方式
引言
在一些復(fù)雜的業(yè)務(wù)中,我們可能需要使用 Dify 調(diào)用外部程序(如 Java 程序),因為這樣才能滿足業(yè)務(wù)的特殊需求。
例如,當(dāng)我們使用 Dify 實現(xiàn)“AI 簡歷自動篩選器”的時候,我們首先會使用 AI 篩選出符合招聘要求的簡歷,然后再將簡歷存放到公司的“人才庫”系統(tǒng)中,完成后續(xù)流程的招聘需要(預(yù)約面試、面試評價、發(fā)送 Offer 等操作),這個時候就需要讓 Dify 調(diào)用 Java 程序了。
那么問題來了,使用 Dify 調(diào)用 Java 程序的實現(xiàn)方式有哪些呢?今天我們就來盤點一下。
1.解決方案概述
Dify 調(diào)用 Java 程序的解決方案有以下幾種:
- 通過 “HTTP 請求” 的方式調(diào)用 Java 程序。
- 通過 “自定義工具” 的方式調(diào)用 Java 程序。
- 通過 MCP 的方式調(diào)用 Java 程序。
接下來,我們分別來看。
2.HTTP請求
HTTP 請求允許通過 HTTP 協(xié)議發(fā)送服務(wù)器請求,適用于獲取外部數(shù)據(jù)、webhook、生成圖片、下載文件等情景。它讓你能夠向指定的網(wǎng)絡(luò)地址發(fā)送定制化的 HTTP 請求,實現(xiàn)與各種外部服務(wù)的互聯(lián)互通。
它的使用也很簡單,我們只需要在 Dify 的工作流中添加“HTTP 請求”節(jié)點即可,如下圖所示:

它的參數(shù)配置包含以下這些:

當(dāng)然,我們也可以利用它來發(fā)送文件給 Java 程序,并且可以自定義失敗重試配置和錯誤異常配置。
對于被調(diào)用方 Java 來說,只需要提供一個 HTTP 接口即可,當(dāng)然生成環(huán)境要考慮添加 APIKey 以保證調(diào)用的安全性,這里提供一個簡單的 Java 服務(wù)接口:
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) {
// 執(zhí)行數(shù)據(jù)庫添加操作
System.out.println(user.toString());
return true;
}
}
3.自定義工具
自定義工具的調(diào)用方式,需要先把 Java 程序發(fā)不成 Dify 中的自定義工具,才能正常調(diào)用,如下圖所示:

配置的 Schema 需要滿足 OpenAPI 協(xié)議,配置如下:
{
"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 服務(wù)器端只需要提供一個可以使用 HTTP 協(xié)議訪問的接口即可。
4.MCP通訊
這種通訊方式實現(xiàn)最麻煩,有點大炮打蚊子的感覺,但也可以實現(xiàn) Dify 調(diào)用 Java 程序,此時要求先試用 Java 程序,例如 Spring AI 實現(xiàn)一個 MCP 服務(wù)器端,然后再使用 Dify 添加支持 MCP 調(diào)用的 Agent 策略,來調(diào)用 Java 的 MCP 服務(wù),如下圖所示:
安裝 Agent 策略(支持 MCP 工具)如下圖所示:

MCP SSE 選裝,非必須,可以為后續(xù) Agent 提供 MCP 工具列表,方便 LLM 正確理解和調(diào)用工具。
配置MCP服務(wù)地址
Dify 只支持 HTTP 協(xié)議的 MCP 服務(wù)調(diào)用,它的配置格式如下:
{
"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 服務(wù),或者是以下 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調(diào)用
我們創(chuàng)建的是一個 ChatFlow,執(zhí)行效果如下:

執(zhí)行符合預(yù)期。
Spring AI 實現(xiàn) MCP 服務(wù)器端參考我之前發(fā)的文章,這里就不再贅述。
小結(jié)
Dify 調(diào)用 Java 程序的實現(xiàn)方式有 3 種:HTTP 請求、自定義工具、MCP 通訊方式。其中最簡單、最靈活的實現(xiàn)方式為 HTTP 請求方式;自定義工具適合偏工具性質(zhì)(而非業(yè)務(wù)性質(zhì))的調(diào)用;MCP 適合一次性注入多個工具方法給 Dify 使用的場景。
以上就是Dify調(diào)用Java的三種實現(xiàn)方式的詳細(xì)內(nèi)容,更多關(guān)于Dify調(diào)用Java方式的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在MyBatis的XML映射文件中<trim>元素所有場景下的完整使用示例代碼
在MyBatis的XML映射文件中,<trim>元素用于動態(tài)添加SQL語句的一部分,處理前綴、后綴及多余的逗號或連接符,示例展示了如何在UPDATE、SELECT、INSERT和SQL片段中使用<trim>元素,以實現(xiàn)動態(tài)的SQL構(gòu)建,感興趣的朋友一起看看吧2025-01-01
jxl操作excel寫入數(shù)據(jù)不覆蓋原有數(shù)據(jù)示例
網(wǎng)上很多例子,都是用Jxl讀或者寫excel,本文實現(xiàn)的功能就是將數(shù)據(jù)源in.xls的第幾行第幾列數(shù)據(jù)寫入到out.xls的第幾行第幾列,不覆蓋out.xls其他原有的數(shù)據(jù)。2014-03-03
Spring的自定義擴展標(biāo)簽NamespaceHandler解析
這篇文章主要介紹了Spring的自定義擴展標(biāo)簽NamespaceHandler解析,在很多情況下,我們需要為系統(tǒng)提供可配置化支持,簡單的做法可以直接基于Spring的標(biāo)準(zhǔn)Bean來配置,Spring提供了可擴展Schema的支持,這是一個不錯的折中方案,需要的朋友可以參考下2023-12-12
Spring MVC url提交參數(shù)和獲取參數(shù)
本文重要講述通過url提交參數(shù)和獲取參數(shù)的具體操作與實現(xiàn)。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04
JAVA構(gòu)造函數(shù)不能使用void關(guān)鍵字問題
這篇文章主要介紹了JAVA構(gòu)造函數(shù)不能使用void關(guān)鍵字問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03

