Skip to content
This repository was archived by the owner on Jan 20, 2026. It is now read-only.

Commit 4f726a3

Browse files
author
元宝宝
authored
Merge pull request #25 from yuanbaobaoo/feature/webconsole
Add web console api support and dify new api
2 parents 4aaa931 + 0cf8c1f commit 4f726a3

38 files changed

+1819
-900
lines changed

README.md

Lines changed: 56 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -36,46 +36,56 @@ implementation group: 'io.github.yuanbaobaoo', name: 'dify-java-client', version
3636
```
3737

3838
## 快速开始
39-
```DifyClientBuilder```: 用于创建各类客户端实例
39+
使用 ```DifyClientBuilder``` 创建各类客户端实例
4040
```java
4141
/**
42-
* 支持 base()、chat()、flow()、completion()、dataset(),其对应返回类型也是不一致的
42+
* 创建一个对话类型客户端对象,支持 base()、chat()、flow()、completion() 其对应返回类型也是不一致的
4343
*/
44-
IDifyBaseClient client = DifyClientBuilder.base().apiKey("app-xxxx").baseUrl("http://localhost:4000").build();
44+
IAppChatClient appClient = DifyClientBuilder.app().chat().apiKey("app-xxx").baseUrl("https://api.dify.ai/v1").build();
45+
46+
/**
47+
* 创建一个知识库类型客户端对象
48+
*/
49+
IDatasetClient datasetClient = DifyClientBuilder.dataset().apiKey("app-xxx").baseUrl("https://api.dify.ai/v1").build();
50+
51+
/**
52+
* 创建一个WebConsole类型客户端对象,用于模拟Dify控制台操作(试验特性)
53+
*/
54+
IWebConsoleClient webClient = DifyClientBuilder.web("${server}", "${userName}", "${password}").connect();
4555
```
4656

47-
## 对话类型 Client
48-
app客户端是指适用于 ChatBot、Agent、ChatFlow、Completion 类型的应用,提供了会话相关的API,支持会话的流式返回。主要包含如下:
49-
- [```IDifyBaseClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/feature/knowledge-api/src/main/java/io/github/yuanbaobaoo/dify/app/IDifyBaseClient.java)
50-
- [```IDifyChatClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/feature/knowledge-api/src/main/java/io/github/yuanbaobaoo/dify/app/IDifyChatClient.java)
51-
- [```IDifyFlowClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/feature/knowledge-api/src/main/java/io/github/yuanbaobaoo/dify/app/IDifyFlowClient.java)
52-
- [```IDifyCompletion```](https://github.com/yuanbaobaoo/dify-java-client/blob/feature/knowledge-api/src/main/java/io/github/yuanbaobaoo/dify/app/IDifyCompletion.java)
57+
## 创建 App 类型的 Client
58+
在代码中,使用 ```DifyClientBuilder.app()``` 即可创建App类型的客户端对象。
59+
App客户端是指适用于 ChatBot、Agent、ChatFlow、Completion 类型的应用,提供了会话相关的API,支持会话的流式返回。主要包含如下:
60+
- [```IAppBaseClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/master/src/main/java/io/github/yuanbaobaoo/dify/app/IAppBaseClient.java)
61+
- [```IAppChatClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/master/src/main/java/io/github/yuanbaobaoo/dify/app/IAppChatClient.java)
62+
- [```IAppFlowClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/master/src/main/java/io/github/yuanbaobaoo/dify/app/IAppFlowClient.java)
63+
- [```IAppCompletion```](https://github.com/yuanbaobaoo/dify-java-client/blob/master/src/main/java/io/github/yuanbaobaoo/dify/app/IAppCompletion.java)
5364

54-
### 1、IDifyBaseClient
55-
基础Client,提供Dify公共API,具体可查阅 ```IDifyBaseClient```
65+
### 1、IAppBaseClient
66+
基础Client,提供Dify公共API,具体可查阅 ```IAppBaseClient```
5667
```java
57-
IDifyBaseClient client = DifyClientBuilder.base().apiKey("app-xxxx").baseUrl("http://localhost:4000").build();
68+
IAppBaseClient client = DifyClientBuilder.app().base().apiKey("app-xxxx").baseUrl("https://api.dify.ai/v1").build();
5869

5970
// 调用接口
6071
String metaInfo = client.getAppMetaInfo();
6172
// 上传文件
6273
DifyFileResult result = client.uploadFile(new File("pom.xml"), "abc-123");
6374
```
6475

65-
### 2、IDifyChatClient
66-
适用于 ChatBot、Agent、ChatFlow 类型应用,继承自 ```IDifyBaseClient```,提供了会话相关的API:
76+
### 2、IAppChatClient
77+
适用于 ChatBot、Agent、ChatFlow 类型应用,继承自 ```IAppBaseClient```,提供了会话相关的API:
6778
```java
68-
IDifyChatClient chatClient = DifyClientBuilder.chat().apiKey("app-xxxx").baseUrl("http://localhost:4000").build();
79+
IAppChatClient client = DifyClientBuilder.app().chat().apiKey("app-xxxx").baseUrl("https://api.dify.ai/v1").build();
6980

7081
// 创建消息
71-
ParamMessage m = ParamMessage.builder().query("你是谁").user("abc-123").inputs(new HashMap<>() {{
72-
put("test", "value");
73-
put("file1", ParamFile.builder()
74-
.type(ParamFile.FileType.audio)
75-
.transferMethod(ParamFile.TransferMethod.remote_url)
76-
.build()
77-
);
78-
}}).build();
82+
ParamMessage m = ParamMessage.builder().query("你是谁").user("abc-123").inputs(Map.of(
83+
"test", "value",
84+
"file1", ParamFile.builder()
85+
.type(ParamFile.FileType.audio)
86+
.transferMethod(ParamFile.TransferMethod.remote_url)
87+
.build()
88+
)).build();
7989

8090
// 发送阻塞消息
8191
DifyChatResult result = chatClient.sendMessages(m);
@@ -86,16 +96,16 @@ CompletableFuture<Void> future = client.sendMessagesAsync(m, (r) -> {
8696
});
8797
```
8898

89-
### 3、IDifyFlowClient
90-
适用于 WorkFlow 类型应用,继承自 ```IDifyBaseClient```,提供了工作流相关的API:
99+
### 3、IAppFlowClient
100+
适用于 WorkFlow 类型应用,继承自 ```IAppBaseClient```,提供了工作流相关的API:
91101
```java
92-
IDifyFlowClient flowClient = DifyClientBuilder.flow().apiKey("app-xxxx").baseUrl("http://localhost:4000").build();
102+
IAppFlowClient flowClient = DifyClientBuilder.app().flow().apiKey("app-xxxx").baseUrl("https://api.dify.ai/v1").build();
93103

94104
// 创建消息
95-
ParamMessage m = ParamMessage.builder().user("abc-123").inputs(new HashMap<>() {{
96-
put("name", "元宝宝");
97-
put("text", "Java为什么叫Java?");
98-
}}).build();
105+
ParamMessage m = ParamMessage.builder().user("abc-123").inputs(Map.of(
106+
"name", "元宝宝",
107+
"text", "Java为什么叫Java?"
108+
)).build();
99109

100110
// 阻塞式运行工作流
101111
DifyChatResult result = flowClient.runBlocking(m);
@@ -106,10 +116,10 @@ CompletableFuture<Void> future = client.runStreaming(m, (r) -> {
106116
});
107117
```
108118

109-
### 4、IDifyCompletion
110-
适用于 Completion 类型应用,继承自 ```IDifyBaseClient```,提供了文本生成相关的API:
119+
### 4、IAppCompletion
120+
适用于 Completion 类型应用,继承自 ```IAppBaseClient```,提供了文本生成相关的API:
111121
```java
112-
IDifyCompletion completion = DifyClientBuilder.completion().apiKey("app-xxxx").baseUrl("http://localhost:4000").build();
122+
IAppCompletion completion = DifyClientBuilder.completion().flow().apiKey("app-xxxx").baseUrl("https://api.dify.ai/v1").build();
113123

114124
// 创建消息
115125
ParamMessage m = ParamMessage.builder().query("Java为什么叫Java").user("abc-123").build();
@@ -123,15 +133,15 @@ CompletableFuture<Void> future = completion.sendMessagesAsync(m, (r) -> {
123133
});
124134
```
125135

126-
## 知识库 Client
136+
## 创建 知识库 类型的 Client
127137
当前项目提供了内部知识库Client 与 外部知识库相关类型定义,其中外部知识库并没有做具体实现。
128138

129139
### Dify内置知识库: IDifyDatasetClient
130-
具体API定义,请查阅 [```io.github.yuanbaobaoo.dify.client.dataset.IDifyDatasetClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/feature/knowledge-api/src/main/java/io/github/yuanbaobaoo/dify/dataset/IDatasetClient.java)
140+
具体API定义,请查阅 [```io.github.yuanbaobaoo.dify.dataset.IDifyDatasetClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/master/src/main/java/io/github/yuanbaobaoo/dify/dataset/IDatasetClient.java)
131141

132142
#### 参考案例
133143
```java
134-
IDatasetClient client = DifyClientBuilder.dataset().apiKey("dataset-xxxx").baseUrl("http://localhost:4000").build();
144+
IDatasetClient client = DifyClientBuilder.dataset().apiKey("dataset-xxxx").baseUrl("https://api.dify.ai/v1").build();
135145

136146
// 声明参数
137147
ParamDataset dataset = ParamDataset.builder()
@@ -149,7 +159,7 @@ client.create(dataset);
149159
- 案例一:新增文档
150160
```java
151161
// dify 配置
152-
DifyConfig config = DifyConfig.builder().server("http://localhost:4000").apiKey("dataset-xxxx").build();
162+
DifyConfig config = DifyConfig.builder().server("https://api.dify.ai/v1").apiKey("dataset-xxxx").build();
153163

154164
// 声明参数
155165
ParamDocument document = ParamDocument.builder()
@@ -178,7 +188,7 @@ dataset.insertTxt(document);
178188
- 案例2:更新文档
179189
```java
180190
// dify 配置
181-
DifyConfig config = DifyConfig.builder().server("http://localhost:4000").apiKey("dataset-xxxx").build();
191+
DifyConfig config = DifyConfig.builder().server("https://api.dify.ai/v1").apiKey("dataset-xxxx").build();
182192

183193
// 声明参数
184194
ParamDocument document = ParamDocument.builder()
@@ -236,7 +246,14 @@ class KnowledgeService implements IKnowledgeService {
236246
}
237247
```
238248

239-
### 异常处理
249+
## 请求自定义接口
250+
任意的Client对象,都拥有一个httpClient()方法,
251+
该方法会返回一个已经注入了 api key 和 server url 或者 login token属性的 SimpleHttpClient 对象,你可以使用该对象进行自定义接口请求。
252+
```java
253+
SimpleHttpClient http = client.httpClient();
254+
```
255+
256+
## 异常处理
240257
- **DifyException**
241258
>默认情况下,当正常的请求返回了 http status >= 400 时,都会抛出一个异常对象 ```DifyException```
242259
该对象接收了Dify返回的 ```status``````code``````message``````params``` 这几个属性。

README_EN.md

Lines changed: 51 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ The Simple and Easy-to-Use Dify Java Client, Support the use of [Dify](https://d
1414

1515
[中文](./README.md) | English
1616

17-
### Install
18-
- env requirements
17+
### Installation
18+
- Requirements
1919
```code
2020
Java : >= 17
2121
Dify Version: <= 1.x
2222
```
2323

24-
- maven
24+
- Maven
2525
```xml
2626
<dependency>
2727
<groupId>io.github.yuanbaobaoo</groupId>
@@ -30,43 +30,53 @@ Dify Version: <= 1.x
3030
</dependency>
3131
```
3232

33-
- gradle
33+
- Gradle
3434
```gradle
3535
implementation group: 'io.github.yuanbaobaoo', name: 'dify-java-client', version: '1.3.5'
3636
```
3737

3838
## Quick Start
39-
```DifyClientBuilder```: Used to create various client instances
39+
Create client instances using ```DifyClientBuilder```
4040
```java
4141
/**
42-
* Support base()、chat()、flow()、completion()、dataset(),which have inconsistent return types
42+
* Create a chat-type client for ChatBot/Agent/ChatFlow/Completion apps
4343
*/
44-
IDifyBaseClient client = DifyClientBuilder.base().apiKey("app-xxxx").baseUrl("http://localhost:4000").build();
44+
IAppChatClient appClient = DifyClientBuilder.app().chat().apiKey("app-xxx").baseUrl("https://api.dify.ai/v1").build();
45+
46+
/**
47+
* Create a dataset client
48+
*/
49+
IDatasetClient datasetClient = DifyClientBuilder.dataset().apiKey("app-xxx").baseUrl("https://api.dify.ai/v1").build();
50+
51+
/**
52+
* Create a WebConsole client (experimental)
53+
*/
54+
IWebConsoleClient webClient = DifyClientBuilder.web("${server}", "${userName}", "${password}").connect();
4555
```
4656

47-
## Chat Type Client
48-
Chat type clients refers to applications applicable to ChatBot, Agent, ChatFlow, and Completion.
57+
## App Clients
58+
Use ```DifyClientBuilder.app()``` to create app-type clients for ChatBot, Agent, ChatFlow, and Completion applications.
4959
It provides session related APIs and supports streaming return of sessions. It mainly includes the following:
50-
- [```IDifyBaseClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/feature/knowledge-api/src/main/java/io/github/yuanbaobaoo/dify/app/IDifyBaseClient.java)
51-
- [```IDifyChatClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/feature/knowledge-api/src/main/java/io/github/yuanbaobaoo/dify/app/IDifyChatClient.java)
52-
- [```IDifyFlowClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/feature/knowledge-api/src/main/java/io/github/yuanbaobaoo/dify/app/IDifyFlowClient.java)
53-
- [```IDifyCompletion```](https://github.com/yuanbaobaoo/dify-java-client/blob/feature/knowledge-api/src/main/java/io/github/yuanbaobaoo/dify/app/IDifyCompletion.java)
60+
- [```IAppBaseClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/master/src/main/java/io/github/yuanbaobaoo/dify/app/IAppBaseClient.java)
61+
- [```IAppChatClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/master/src/main/java/io/github/yuanbaobaoo/dify/app/IAppChatClient.java)
62+
- [```IAppFlowClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/master/src/main/java/io/github/yuanbaobaoo/dify/app/IAppFlowClient.java)
63+
- [```IAppCompletion```](https://github.com/yuanbaobaoo/dify-java-client/blob/master/src/main/java/io/github/yuanbaobaoo/dify/app/IAppCompletion.java)
5464

55-
### 1、IDifyBaseClient
56-
base client, encapsulates some public APIs and authentication logic, and provides simple and easy-to-use calling methods
65+
### 1、IAppBaseClient
66+
Base client providing common Dify APIs:
5767
```java
58-
IDifyBaseClient client = DifyClientBuilder.base().apiKey("app-xxxx").baseUrl("http://localhost:4000").build();
68+
IAppBaseClient client = DifyClientBuilder.app().base().apiKey("app-xxxx").baseUrl("https://api.dify.ai/v1").build();
5969

6070
// Call preset API
6171
String metaInfo = client.getAppMetaInfo();
6272
// Upload file
6373
DifyFileResult result = client.uploadFile(new File("pom.xml"), "abc-123");
6474
```
6575

66-
### 2、IDifyChatClient
67-
scope = ChatBotAgentChatFlow, extends ```IDifyBaseClient```, provides conversation APIs
76+
### 2、IAppChatClient
77+
For ChatBot/Agent/ChatFlow apps (extends IAppBaseClient):
6878
```java
69-
IDifyChatClient chatClient = DifyClientBuilder.chat().apiKey("app-xxxx").baseUrl("http://localhost:4000/v1").build();
79+
IAppChatClient client = DifyClientBuilder.app().chat().apiKey("app-xxxx").baseUrl("https://api.dify.ai/v1").build();
7080

7181
// create message
7282
ParamMessage m = ParamMessage.builder().query("Who are you").user("abc-123").inputs(new HashMap<>() {{
@@ -87,10 +97,10 @@ CompletableFuture<Void> future = client.sendMessagesAsync(m, (r) -> {
8797
});
8898
```
8999

90-
### 3、IDifyFlowClient
91-
scope = WorkFlow, extends ```IDifyBaseClient```, provides workflow APIs
100+
### 3、IAppFlowClient
101+
For WorkFlow apps (extends IAppBaseClient):
92102
```java
93-
IDifyFlowClient flowClient = DifyClientBuilder.flow().apiKey("app-xxxx").baseUrl("http://localhost:4000/v1").build();
103+
IAppFlowClient flowClient = DifyClientBuilder.app().flow().apiKey("app-xxxx").baseUrl("https://api.dify.ai/v1").build();
94104

95105
// create message
96106
ParamMessage m = ParamMessage.builder().user("abc-123").inputs(new HashMap<>() {{
@@ -107,10 +117,10 @@ CompletableFuture<Void> future = client.runStreaming(m, (r) -> {
107117
});
108118
```
109119

110-
### 4、IDifyCompletion
120+
### 4、IAppCompletion
111121
scope = Completion, extends ```IDifyBaseClient```, provides completion APIs
112122
```java
113-
IDifyCompletion completion = DifyClientBuilder.completion().apiKey("app-xxxx").baseUrl("http://localhost:4000/v1").build();
123+
IAppCompletion completion = DifyClientBuilder.completion().flow().apiKey("app-xxxx").baseUrl("https://api.dify.ai/v1").build();
114124

115125
// create message
116126
ParamMessage m = ParamMessage.builder().query("Java为什么叫Java").user("abc-123").build();
@@ -124,16 +134,16 @@ CompletableFuture<Void> future = completion.sendMessagesAsync(m, (r) -> {
124134
});
125135
```
126136

127-
## Dataset(Knowledge) Client
137+
## Dataset Clients
128138
The current project provides the definition of internal knowledge base client and external knowledge base related types,
129139
of which the external knowledge base has not been specifically implemented.
130140

131141
### Dify Dataset: IDifyDatasetClient
132142
For specific API definitions, please refer to [```io.github.yuanbaobaoo.dify.client.dataset.IDifyDatasetClient```](https://github.com/yuanbaobaoo/dify-java-client/blob/feature/knowledge-api/src/main/java/io/github/yuanbaobaoo/dify/dataset/IDatasetClient.java)
133143

134-
#### Reference
144+
#### Examples
135145
```java
136-
IDatasetClient client = DifyClientBuilder.dataset().apiKey("dataset-xxxx").baseUrl("http://localhost:4000").build();
146+
IDatasetClient client = DifyClientBuilder.dataset().apiKey("dataset-xxxx").baseUrl("https://api.dify.ai/v1").build();
137147

138148
// create params
139149
ParamDataset dataset = ParamDataset.builder()
@@ -144,14 +154,14 @@ ParamDataset dataset = ParamDataset.builder()
144154
client.create(dataset);
145155
```
146156

147-
#### Hero Class
157+
#### Hero Classes
148158
In the project, for the tool class of the knowledge base, in addition to providing related methods based on ```IDatasetClient```,
149159
it also provides Hero class to support the operation of the knowledge base.Which way to use depends on your needs.
150160

151161
- Case 1: add document
152162
```java
153163
// dify config
154-
DifyConfig config = DifyConfig.builder().server("http://localhost:4000").apiKey("dataset-xxxx").build();
164+
DifyConfig config = DifyConfig.builder().server("https://api.dify.ai/v1").apiKey("dataset-xxxx").build();
155165

156166
// create params
157167
ParamDocument document = ParamDocument.builder()
@@ -171,7 +181,7 @@ Mode2、use DifyClientBuilder to build the Hero object
171181
DatasetHero dataset = DifyClientBuilder.dataset().config(config).of("Dataset Id");
172182
dataset.insertTxt(document);
173183
```
174-
Mod3、use Hero Class
184+
Mode3、use Hero Class
175185
```java
176186
DatasetHero dataset = DatasetHero.of("Dataset Id", config);
177187
dataset.insertTxt(document);
@@ -180,7 +190,7 @@ dataset.insertTxt(document);
180190
- Case 2: update document
181191
```java
182192
// dify config
183-
DifyConfig config = DifyConfig.builder().server("http://localhost:4000").apiKey("dataset-xxxx").build();
193+
DifyConfig config = DifyConfig.builder().server("https://api.dify.ai/v1").apiKey("dataset-xxxx").build();
184194

185195
// create params
186196
ParamDocument document = ParamDocument.builder()
@@ -204,7 +214,7 @@ DocumentHero documentHero = DocumentHero.of("Dataset ID", "Document ID", config)
204214
documentHero.updateByText(document);
205215
```
206216

207-
### Dify External Dataset: IKnowledgeService
217+
### External Dataset: IKnowledgeService
208218
The current project dose not implement the knowledge API, and only declare parameter objects and interfaces
209219
```java
210220
public interface IKnowledgeService {
@@ -238,7 +248,15 @@ class KnowledgeService implements IKnowledgeService {
238248
}
239249
```
240250

241-
### Exception Type
251+
## Custom Requests
252+
Any Client object has an httpClient () method,
253+
This method will return a SimpleFHIR object that has been injected with API key and server URL or login token attributes.
254+
You can use this object to make custom interface requests.
255+
```java
256+
SimpleHttpClient http = client.httpClient();
257+
```
258+
259+
## Exception Type
242260
- **DifyException**
243261
>By default, when the normal request returns http status>=400, an exception object ```DiffyException``` will be thrown.
244262
This object receives the '```status```, ```code```, ```message```, ```params```.

0 commit comments

Comments
 (0)