面试官:Dify如何调用外部程序?

Dify 有多种调用外部程序的方式,例如调用外部 Java、Python 等程序。

常见的调用方式有以下几种:

  1. HTTP 调用方式。
  2. 自定义工具调用。
  3. 使用 MCP 方式调用。

具体实现如下。

1.HTTP调用方式

具体实现:

1.Dify 配置

在工作流中添加 HTTP 请求节点 ,填写目标 Java 服务的 URL(如 http://your-java-service/api)。

设置请求方法(GET/POST)、请求头(如 Content-Type: application/json)和请求体(如 JSON 参数)。

2.Java 服务端实现

提供 HTTP 接口,例如使用 Spring Boot 的 @RestController 注解暴露接口:

java 复制代码
@RestController
@RequestMapping("/api")
public class MyController {
    @PostMapping("/process")
    public String handleRequest(@RequestBody String input) {
        // 处理逻辑
        return "Result";
    }
}

生产环境需添加 API 鉴权(如 API Key)。

优点:简单灵活,无需额外依赖。

缺点:需手动处理重试和错误逻辑。

适用场景:适合需要与 Java 服务进行简单、直接的 HTTP 交互(如调用 RESTful API)。

2.自定义工具调用方式

实现步骤

1.Dify 配置

自定义工具 中导入 OpenAPI Schema,绑定 Java 服务的 URL(如 http://java-service/tool/convert)。

提供符合 OpenAPI 规范 的接口,并定义 Schema 文件(如 openapi.json):

json 复制代码
{
  "openapi": "3.1.0",
  "paths": {
    "/tool/convert": {
      "post": {
        "parameters": [{"name": "input", "in": "query", "type": "string"}]
      }
    }
  }
}

2.Java 服务端实现

提供 HTTP 接口,例如使用 Spring Boot 的 @RestController 注解暴露接口:

java 复制代码
@RestController
@RequestMapping("/tool")
public class MyController {
    @PostMapping("/convert")
    public String handleRequest(@RequestBody String input) {
        // 处理逻辑
        return "Result";
    }
}

生产环境需添加 API 鉴权(如 API Key)。

优点:标准化接口,适合工具化场景(可复用)。

缺点:实现相对复杂,需维护 OpenAPI 规范等内容。

适用场景:将 Java 程序封装为可复用的工具(如生成图片、数据转换等)。

3.MCP调用方式

实现步骤

1.MCP 服务端 : 使用 Spring AI 或类似框架实现 MCP 服务端,支持 SSE(Server-Sent Events)或标准(Stdio)协议。

2.Dify 配置

添加 MCP 服务:

配置 MCP 服务地址(地址中通常会包含 APIKey)。

2.使用 MCP 服务:

优点:支持多工具动态调用。

缺点:配置复杂,适合高阶通用场景。

适用场景:更通用的对接方式,从 MCP 应用商店可以直接获取通用的服务场景,通用性更强。

小结

方式 推荐场景 技术复杂度
HTTP 请求 简单接口调用、批量任务
自定义工具 标准化工具复用(如数据转换)
MCP 智能体需动态调用 Java 服务(如决策引擎)

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:场景题、SpringAI、SpringAIAlibaba、并发编程、MySQL、Redis、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、JVM、设计模式、消息队列、Dify、AI常见面试题等。

相关推荐
都叫我大帅哥4 分钟前
Spring AI MCP:让AI开发像“拼乐高”一样简单
java·spring·ai编程
亲爱的非洲野猪7 分钟前
如何优雅解决缓存与数据库的数据一致性问题?
java·分布式·缓存·kafka·lock
我不是星海9 分钟前
原型设计模式
java·开发语言
百度Geek说15 分钟前
首发!百度百科全系能力上线千帆,权威知识增强Agent一键打造
后端
csgo打的菜又爱玩25 分钟前
17.TaskExecutor与ResourceManager交互
java·大数据·flink
玩代码42 分钟前
原型设计模式
java·原型设计模式
贰拾wan42 分钟前
Spring中的设计模式
java·spring·设计模式
瑾曦44 分钟前
Maven高级
后端
bobz9651 小时前
操作系统驱动崩溃为什么会导致系统卡顿?
后端
JVM高并发1 小时前
MySQL 中处理 JSON 数组并为每个元素拼接字符串
后端·mysql