面試官:Dify如何調(diào)用外部程序?
Dify 有多種調(diào)用外部程序的方式,例如調(diào)用外部 Java、Python 等程序。
常見的調(diào)用方式有以下幾種:
- HTTP 調(diào)用方式。
- 自定義工具調(diào)用。
- 使用 MCP 方式調(diào)用。
具體實現(xiàn)如下。
一、HTTP調(diào)用方式
具體實現(xiàn):
1.Dify 配置
在工作流中添加 HTTP 請求節(jié)點,填寫目標(biāo) Java 服務(wù)的 URL(如 http://your-java-service/api)。
圖片
設(shè)置請求方法(GET/POST)、請求頭(如 Content-Type: application/json)和請求體(如 JSON 參數(shù))。
圖片
2.Java 服務(wù)端實現(xiàn)
提供 HTTP 接口,例如使用 Spring Boot 的 @RestController 注解暴露接口:
@RestController
@RequestMapping("/api")
public class MyController {
@PostMapping("/process")
public String handleRequest(@RequestBody String input) {
// 處理邏輯
return "Result";
}
}“
生產(chǎn)環(huán)境需添加 API 鑒權(quán)(如 API Key)。
優(yōu)點:簡單靈活,無需額外依賴。
缺點:需手動處理重試和錯誤邏輯。
“
適用場景:適合需要與 Java 服務(wù)進(jìn)行簡單、直接的 HTTP 交互(如調(diào)用 RESTful API)。
二、自定義工具調(diào)用方式
實現(xiàn)步驟:
1.Dify 配置
在自定義工具中導(dǎo)入 OpenAPI Schema,綁定 Java 服務(wù)的 URL(如 http://java-service/tool/convert)。
圖片
提供符合 OpenAPI 規(guī)范 的接口,并定義 Schema 文件(如 openapi.json):
{
"openapi": "3.1.0",
"paths": {
"/tool/convert": {
"post": {
"parameters": [{"name": "input", "in": "query", "type": "string"}]
}
}
}
}2.Java 服務(wù)端實現(xiàn)
提供 HTTP 接口,例如使用 Spring Boot 的 @RestController 注解暴露接口:
@RestController
@RequestMapping("/tool")
public class MyController {
@PostMapping("/convert")
public String handleRequest(@RequestBody String input) {
// 處理邏輯
return "Result";
}
}生產(chǎn)環(huán)境需添加 API 鑒權(quán)(如 API Key)。
優(yōu)點:標(biāo)準(zhǔn)化接口,適合工具化場景(可復(fù)用)。
缺點:實現(xiàn)相對復(fù)雜,需維護(hù) OpenAPI 規(guī)范等內(nèi)容。
適用場景:將 Java 程序封裝為可復(fù)用的工具(如生成圖片、數(shù)據(jù)轉(zhuǎn)換等)。
三、MCP調(diào)用方式
實現(xiàn)步驟:
- MCP 服務(wù)端: 使用 Spring AI 或類似框架實現(xiàn) MCP 服務(wù)端,支持 SSE(Server-Sent Events)或標(biāo)準(zhǔn)(Stdio)協(xié)議。
- Dify 配置:
添加 MCP 服務(wù):
圖片
配置 MCP 服務(wù)地址(地址中通常會包含 APIKey)。
- 使用 MCP 服務(wù):
圖片
優(yōu)點:支持多工具動態(tài)調(diào)用。
缺點:配置復(fù)雜,適合高階通用場景。
適用場景:更通用的對接方式,從 MCP 應(yīng)用商店可以直接獲取通用的服務(wù)場景,通用性更強(qiáng)。
小結(jié)
方式 | 推薦場景 | 技術(shù)復(fù)雜度 |
HTTP 請求 | 簡單接口調(diào)用、批量任務(wù) | 低 |
自定義工具 | 標(biāo)準(zhǔn)化工具復(fù)用(如數(shù)據(jù)轉(zhuǎn)換) | 中 |
MCP | 智能體需動態(tài)調(diào)用 Java 服務(wù)(如決策引擎) | 高 |































