写点什么

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

作者:王磊
  • 2025-07-22
    陕西
  • 本文字数:1164 字

    阅读完需:约 4 分钟

面试官: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 注解暴露接口:


@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):


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


2.Java 服务端实现


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


@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 应用商店可以直接获取通用的服务场景,通用性更强。

小结


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

用户头像

王磊

关注

javacn.site 2018-08-25 加入

我的小站:javacn.site

评论

发布
暂无评论
面试官:Dify如何调用外部程序?_王磊_InfoQ写作社区