1.想要在后端通过api调用Dify智能体首选要看懂api文档
1.1看懂api文档
基础URL: 相当于前缀
鉴权: 需要将api_key添加在head中,(后面有获取api_key方式)
api的访问路径是什么呢? 基础URL + 对应方法的路径
例如:假如我想要使用发送对话消息的api,我的访问路径就应该是
http://localhost/v1/chat-messages
1.2读懂请求Body
Request Body对应了应该使用怎样的格式来发送数据
最省事的方法就是复制红框CRUL的内容,打开apifox,选择导入CURL
这样apifox可以自动识别api接口形式
这样就可以很方便的对接口进行调试了
1.3获取api_key
- 前提是你已经创建了agent或者工作流并且发布,我这里是拿上一篇文章(dify部署本地化ollama模型)发布的agent智能体举例,如果你是工作流就要换成工作流对应的api文档
- 点击红框这里获取api_key,
- Dify实际上就是通过api_key来定位你的agent,并不需要id
- 获取api_key之后可以将它添加到刚刚添加的apifox接口上:
- 如图:
-
1.4apifox测试接口
- 点击运行出现如下内容说明你的Dify这里过关了,接下来就是Spring boot的后端调用
2.spring boot的后端调用
- 我将对应的代码放在了git代码仓库中
-
public String sendMessage(ChatRequest request) { try { System.out.println("=== 开始调用Dify API(阻塞模式) ==="); // 准备发送给Dify的请求数据 Map<String, Object> difyRequest = prepareDifyRequest(request); System.out.println("发送到Dify的请求数据: " + objectMapper.writeValueAsString(difyRequest)); // 发送POST请求到Dify API String response = webClient.post() .uri(difyBaseUrl + "/chat-messages") // Dify聊天消息API端点 .header("Authorization", "Bearer " + difyApiKey) // 设置认证头 .header("Content-Type", "application/json") // 设置内容类型 .bodyValue(difyRequest) // 设置请求体 .retrieve() // 开始请求 .bodyToMono(String.class) // 转换响应为String .timeout(Duration.ofSeconds(60)) // 设置60秒超时 .block(); // 阻塞等待响应 // 输出Dify返回的响应到控制台(后续可存储到数据库) System.out.println("=== Dify API 响应 ==="); System.out.println(response); System.out.println("=== 响应结束 ==="); return response; } catch (Exception e) { System.err.println("调用Dify API时发生错误: " + e.getMessage()); e.printStackTrace(); throw new RuntimeException("Dify API调用失败", e); } }
- 后端代码其实就是将前端信息整合,通过正确的形式发送给dify,然后获取响应,起到中间商的作用
- 具体代码参考git仓库中的代码,运行起来后可以通过 http://localhost:8080/chat.html 进行访问可以直接看到效果
- (因为我使用了chat.html的前端放在了static文件夹下)
- 记得将properties配置文件中的api_key换成你自己的key