java怎么调用dify
时间: 2025-06-21 16:16:27 浏览: 30
### Java 调用 Dify API 示例
为了在 Java 中调用 Dify 提供的 API,可以使用 `HttpClient` 或其他 HTTP 客户端库(如 OkHttp、Apache HttpClient 等)。以下是基于标准 JDK 的 `HttpClient` 实现的一个简单示例。
#### 1. 文本生成请求 (`POST /completion-messages`)
此接口用于向文本生成型应用发送消息并接收响应。以下是一个完整的 Java 示例:
```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class DifyApiExample {
public static void main(String[] args) throws Exception {
String apiKey = "YOUR_API_KEY"; // 替换为实际的 API 密钥
String apiUrl = "http://localhost/completion-messages"; // 替换为目标服务器地址
// 构建基本认证头
String authHeader = "Bearer " + Base64.getEncoder().encodeToString(apiKey.getBytes(StandardCharsets.UTF_8));
// 创建 JSON 请求体
String requestBody = "{ \"prompt\": \"你好,世界\", \"model\": \"gpt-3.5-turbo\" }";
// 初始化 HttpClient 和 HttpRequest
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(apiUrl))
.header("Authorization", authHeader)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
// 执行请求并处理响应
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Status Code: " + response.statusCode());
System.out.println("Response Body: " + response.body());
}
}
```
上述代码实现了对 `/completion-messages` 接口的 POST 请求,并附带了一个简单的提示词 `"你好,世界"`[^3]。
---
#### 2. 文件上传 (`POST /files/upload`)
该接口允许上传文件(目前仅支持图片),并将返回一个可供后续使用的文件 ID。下面是一个文件上传的例子:
```java
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import org.apache.commons.codec.binary.Base64;
public class FileUploadExample {
public static void main(String[] args) throws IOException, InterruptedException {
String apiKey = "YOUR_API_KEY";
String apiUrl = "http://localhost/files/upload";
// 加载文件内容
File file = new File("path/to/image.png");
byte[] fileBytes = readFile(file);
// 将文件编码为 Base64 字符串
String base64File = Base64.encodeBase64String(fileBytes);
// 构造 JSON 请求体
String requestBody = "{\"file\":\"data:image/png;base64," + base64File + "\"}";
// 设置请求头部和主体
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(apiUrl))
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
// 处理响应
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Status Code: " + response.statusCode());
System.out.println("Response Body: " + response.body());
}
private static byte[] readFile(File file) throws IOException {
try (FileInputStream fis = new FileInputStream(file)) {
byte[] data = new byte[(int) file.length()];
fis.read(data);
return data;
}
}
}
```
以上代码展示了如何读取本地文件并通过 Base64 编码将其作为 JSON 数据的一部分提交给 Dify API。
---
#### 3. 停止任务 (`POST /completion-messages/:task_id/stop`)
当需要停止正在进行的任务时,可以调用此接口。假设我们已经知道任务 ID 是 `TASK_ID`,则如下所示:
```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class StopTaskExample {
public static void main(String[] args) throws Exception {
String apiKey = "YOUR_API_KEY";
String taskId = "TASK_ID"; // 替换为实际的任务 ID
String apiUrl = "http://localhost/completion-messages/" + taskId + "/stop";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(apiUrl))
.header("Authorization", "Bearer " + apiKey)
.POST(HttpRequest.BodyPublishers.noBody()) // 不需要附加任何数据
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Status Code: " + response.statusCode());
System.out.println("Response Body: " + response.body());
}
}
```
这个例子演示了如何通过指定任务 ID 来终止某个正在运行的任务。
---
### 注意事项
- **API 密钥安全性**:确保 API 密钥不会泄露到公共仓库或其他不安全的地方。
- **错误处理**:生产环境中应加入更完善的异常捕获机制以及日志记录功能。
- **依赖版本**:如果使用第三方库(例如 Apache Commons Codec 进行 Base64 编解码),需确认其兼容性和许可证合规性。
阅读全文
相关推荐


















