Dify 是一个开源的 AI 应用开发平台,它允许开发者创建基于大型语言模型的应用程序。如果你想要从你的 Java 应用程序(使用 Spring Boot 2.2.13.RELEASE 和 JDK 1.8)请求 Dify 的工作流并获取流式响应,你需要确保 Dify 提供了相应的 API 接口,并且这些接口支持流式传输。
在 Java 中处理 HTTP 流式响应,你可以使用 Spring WebFlux 或者 OkHttp 等库来实现非阻塞的 HTTP 请求,这样可以在数据到达时立即处理,而不是等待整个响应体下载完成。下面我将给出一个简单的示例代码,展示如何使用 WebClient(属于 Spring WebFlux 模块)来发起一个异步的 GET 请求以接收流式响应。
✅ 实现目标
- 使用 JDK 1.8 和 Spring Boot 2.2.13.RELEASE
- 发起 POST 请求到 Dify 的
/api/workflows/run - 设置请求头(包括
Authorization,Content-Type) - 传递 JSON body(包含 [inputs](file://D:\Code\ddcp-1a\source\service\yfk-java-services\znyfk1a-java-srv\yfk-acq-configuration-server\src\main\java\ut\yfk\acq\iot\entity\IotProduceAll.java#L354-L354) 和
response_mode: "streaming") - 获取并处理流式响应(逐行读取)
📦 添加依赖(pom.xml)
你需要添加 OkHttp 依赖到你的 pom.xml 文件中:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
🧠 Java 示例代码(OkHttp 流式处理)
import okhttp3.*;
import java.io.IOException;
public class DifyStreamingClient {
private static final String API_URL = "http://localhost/api/workflows/run";
private static final String BEARER_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI5YTM3NmZkNS01MzVhLTRmZWUtOGRkYS1mNTNkZDA5YjhhYTYiLCJzdWIiOiJXZWIgQVBJIFBhc3Nwb3J0IiwiYXBwX2lkIjoiOWEzNzZmZDUtNTM1YS00ZmVlLThkZGEtZjUzZGQwOWI4YWE2IiwiYXBwX2NvZGUiOiJodDB2dE9KampYWkZ5RXFWIiwiZW5kX3VzZXJfaWQiOiI5OGVmMjgwYS0wMTdmLTQ3NmQtYjI1Mi1lZDk3NDJiNDRhZWMifQ.pGj_RzApUL_aQP1URzPmniOxB7_GIC9P-a-9n-S1it0";
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
// 构建 JSON 请求体
String jsonBody = "{\"inputs\":{\"user_input\":\"2222\"},\"response_mode\":\"streaming\"}";
Request request = new Request.Builder()
.url(API_URL)
.post(RequestBody.create(jsonBody, MediaType.get("application/json")))
.header("Authorization", "Bearer " + BEARER_TOKEN)
.header("Accept", "*/*")
.header("Content-Type", "application/json")
.build();
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
// 检查响应体是否为流式
ResponseBody body = response.body();
if (body == null) throw new IOException("Empty response body");
// 使用字符流读取响应(逐行处理)
BufferedReader reader = new BufferedReader(body.charStream());
String line;
while ((line = reader.readLine()) != null) {
// 处理每一行流式响应
System.out.println("Received: " + line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
📌 注意事项
- OkHttp 支持流式响应,适用于 Server-Sent Events(SSE)或流式 JSON。
- 如果你使用的是 Spring Boot Web MVC(非 WebFlux),这是目前最推荐的方式。
- 如果你需要将这段代码集成进 Spring Boot 应用中,可以封装成一个
@Service。 - 确保你的网络环境允许访问 ,并确认 token 有效。
- 如果 Dify 返回的是 Event Stream(text/event-stream),你可能需要解析
data:字段。
5453

被折叠的 条评论
为什么被折叠?



