Skip to content

Commit 04e100c

Browse files
author
leven.chen
committed
feature: add dify-chat-ai type in config
1 parent 74ea1b8 commit 04e100c

7 files changed

Lines changed: 133 additions & 22 deletions

File tree

chat2db-client/src/blocks/Setting/AiSetting/aiTypeConfig.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const AITypeName = {
1414
[AIType.TONGYIQIANWENAI]: i18n('setting.tab.aiType.tongyiqianwen'),
1515
[AIType.OPENAI]: 'Open AI',
1616
[AIType.AZUREAI]: 'Azure AI',
17+
[AIType.DIFYCHAT]: 'Dify AI',
1718
[AIType.RESTAI]: i18n('setting.tab.custom'),
1819
};
1920

@@ -53,6 +54,10 @@ const AIFormConfig: Record<AIType, IAiConfigBooleans> = {
5354
apiHost: true,
5455
model: true,
5556
},
57+
[AIType.DIFYCHAT]: {
58+
apiKey: true,
59+
apiHost: true,
60+
},
5661
[AIType.RESTAI]: {
5762
apiKey: true,
5863
apiHost: true,

chat2db-client/src/typings/ai.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
export enum AIType {
22
CHAT2DBAI = 'CHAT2DBAI',
33
ZHIPUAI = 'ZHIPUAI',
4-
BAICHUANAI='BAICHUANAI',
5-
WENXINAI='WENXINAI',
4+
BAICHUANAI = 'BAICHUANAI',
5+
WENXINAI = 'WENXINAI',
66
// TONGYIQIANWENAI='TONGYIQIANWENAI',
77
OPENAI = 'OPENAI',
88
AZUREAI = 'AZUREAI',
99
RESTAI = 'RESTAI',
10+
DIFYCHAT = 'DIFYCHAT',
11+
1012
}
1113

1214
export interface IRemainingUse {

chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/enums/AiSqlSourceEnum.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ public enum AiSqlSourceEnum implements BaseEnum<String> {
6262
*/
6363
FASTCHATAI("FAST CHAT AI"),
6464

65+
/**
66+
* FAST CHAT AI
67+
*/
68+
DIFYCHAT("DIFY CHAT AI"),
69+
6570
;
6671

6772
final String description;

chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/ChatController.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,41 @@ private SseEmitter chatWithAzureAi(ChatQueryRequest queryRequest, SseEmitter sse
363363
return sseEmitter;
364364
}
365365

366+
/**
367+
* chat with azure openai
368+
*
369+
* @param queryRequest
370+
* @param sseEmitter
371+
* @param uid
372+
* @return
373+
* @throws IOException
374+
*/
375+
private SseEmitter chatWithDifyChat(ChatQueryRequest queryRequest, SseEmitter sseEmitter, String uid) throws IOException {
376+
String prompt = buildPrompt(queryRequest);
377+
if (prompt.length() / TOKEN_CONVERT_CHAR_LENGTH > MAX_PROMPT_LENGTH) {
378+
log.error("提示语超出最大长度:{},输入长度:{}, 请重新输入", MAX_PROMPT_LENGTH,
379+
prompt.length() / TOKEN_CONVERT_CHAR_LENGTH);
380+
throw new ParamBusinessException();
381+
}
382+
List<AzureChatMessage> messages = (List<AzureChatMessage>)LocalCache.CACHE.get(uid);
383+
if (CollectionUtils.isNotEmpty(messages)) {
384+
if (messages.size() >= contextLength) {
385+
messages = messages.subList(1, contextLength);
386+
}
387+
} else {
388+
messages = Lists.newArrayList();
389+
}
390+
AzureChatMessage currentMessage = new AzureChatMessage(AzureChatRole.USER).setContent(prompt);
391+
messages.add(currentMessage);
392+
393+
buildSseEmitter(sseEmitter, uid);
394+
395+
AzureOpenAIEventSourceListener sourceListener = new AzureOpenAIEventSourceListener(sseEmitter);
396+
AzureOpenAIClient.getInstance().streamCompletions(messages, sourceListener);
397+
LocalCache.CACHE.put(uid, messages, LocalCache.TIMEOUT);
398+
return sseEmitter;
399+
}
400+
366401
/**
367402
* chat with fast chat openai
368403
*
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package ai.chat2db.server.web.api.controller.ai.dify.client;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
5+
@Slf4j
6+
public class DifyChatAIClient {
7+
8+
/**
9+
* ZHIPU OPENAI KEY
10+
*/
11+
public static final String DIFYCHAT_API_KEY = "difychat.apiKey";
12+
13+
/**
14+
* ZHIPU OPENAI HOST
15+
*/
16+
public static final String DIFYCHAT_HOST = "difychat.host";
17+
18+
19+
public static void refresh() {
20+
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package ai.chat2db.server.web.api.controller.ai.dify.model;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
5+
import java.util.Map;
6+
7+
public class DifyChatMessage {
8+
9+
@JsonProperty(value = "query")
10+
private String query;
11+
12+
@JsonProperty(value = "inputs")
13+
private Map<String,String> inputs;
14+
15+
@JsonProperty(value = "conversation_id")
16+
private String conversation_id;
17+
18+
private String user;
19+
20+
21+
22+
}

chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/config/ConfigController.java

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import ai.chat2db.server.web.api.controller.ai.azure.client.AzureOpenAIClient;
1616
import ai.chat2db.server.web.api.controller.ai.baichuan.client.BaichuanAIClient;
1717
import ai.chat2db.server.web.api.controller.ai.chat2db.client.Chat2dbAIClient;
18+
import ai.chat2db.server.web.api.controller.ai.dify.client.DifyChatAIClient;
1819
import ai.chat2db.server.web.api.controller.ai.fastchat.client.FastChatAIClient;
1920
import ai.chat2db.server.web.api.controller.ai.rest.client.RestAIClient;
2021
import ai.chat2db.server.web.api.controller.ai.tongyi.client.TongyiChatAIClient;
@@ -47,7 +48,7 @@ public class ConfigController {
4748
@PostMapping("/system_config")
4849
public ActionResult systemConfig(@RequestBody SystemConfigRequest request) {
4950
SystemConfigParam param = SystemConfigParam.builder().code(request.getCode()).content(request.getContent())
50-
.build();
51+
.build();
5152
configService.createOrUpdate(param);
5253
if (OpenAIClient.OPENAI_KEY.equals(request.getCode())) {
5354
OpenAIClient.refresh();
@@ -72,7 +73,7 @@ public ActionResult addChatGptSystemConfig(@RequestBody AIConfigCreateRequest re
7273
aiSqlSourceEnum = AiSqlSourceEnum.CHAT2DBAI;
7374
}
7475
SystemConfigParam param = SystemConfigParam.builder().code(RestAIClient.AI_SQL_SOURCE).content(sqlSource)
75-
.build();
76+
.build();
7677
configService.createOrUpdate(param);
7778

7879
switch (Objects.requireNonNull(aiSqlSourceEnum)) {
@@ -103,21 +104,34 @@ public ActionResult addChatGptSystemConfig(@RequestBody AIConfigCreateRequest re
103104
case ZHIPUAI:
104105
saveZhipuChatAIConfig(request);
105106
break;
107+
case DIFYCHAT:
108+
saveDifyChatAIConfig(request);
109+
break;
106110
}
107111
return ActionResult.isSuccess();
108112
}
109113

114+
private void saveDifyChatAIConfig(AIConfigCreateRequest request) {
115+
SystemConfigParam param = SystemConfigParam.builder().code(DifyChatAIClient.DIFYCHAT_API_KEY).content(
116+
request.getApiKey()).build();
117+
configService.createOrUpdate(param);
118+
SystemConfigParam hostParam = SystemConfigParam.builder().code(DifyChatAIClient.DIFYCHAT_HOST).content(
119+
request.getApiHost()).build();
120+
configService.createOrUpdate(hostParam);
121+
DifyChatAIClient.refresh();
122+
}
123+
110124
/**
111125
* save chat2db ai config
112126
*
113127
* @param request
114128
*/
115129
private void saveChat2dbAIConfig(AIConfigCreateRequest request) {
116130
SystemConfigParam param = SystemConfigParam.builder().code(Chat2dbAIClient.CHAT2DB_OPENAI_KEY).content(
117-
request.getApiKey()).build();
131+
request.getApiKey()).build();
118132
configService.createOrUpdate(param);
119133
SystemConfigParam hostParam = SystemConfigParam.builder().code(Chat2dbAIClient.CHAT2DB_OPENAI_HOST).content(
120-
request.getApiHost()).build();
134+
request.getApiHost()).build();
121135
configService.createOrUpdate(hostParam);
122136
SystemConfigParam modelParam = SystemConfigParam.builder().code(Chat2dbAIClient.CHAT2DB_OPENAI_MODEL).content(
123137
request.getModel()).build();
@@ -132,16 +146,16 @@ private void saveChat2dbAIConfig(AIConfigCreateRequest request) {
132146
*/
133147
private void saveOpenAIConfig(AIConfigCreateRequest request) {
134148
SystemConfigParam param = SystemConfigParam.builder().code(OpenAIClient.OPENAI_KEY).content(
135-
request.getApiKey()).build();
149+
request.getApiKey()).build();
136150
configService.createOrUpdate(param);
137151
SystemConfigParam hostParam = SystemConfigParam.builder().code(OpenAIClient.OPENAI_HOST).content(
138-
request.getApiHost()).build();
152+
request.getApiHost()).build();
139153
configService.createOrUpdate(hostParam);
140154
SystemConfigParam httpProxyHostParam = SystemConfigParam.builder().code(OpenAIClient.PROXY_HOST).content(
141-
request.getHttpProxyHost()).build();
155+
request.getHttpProxyHost()).build();
142156
configService.createOrUpdate(httpProxyHostParam);
143157
SystemConfigParam httpProxyPortParam = SystemConfigParam.builder().code(OpenAIClient.PROXY_PORT).content(
144-
request.getHttpProxyPort()).build();
158+
request.getHttpProxyPort()).build();
145159
configService.createOrUpdate(httpProxyPortParam);
146160
OpenAIClient.refresh();
147161
}
@@ -153,10 +167,10 @@ private void saveOpenAIConfig(AIConfigCreateRequest request) {
153167
*/
154168
private void saveRestAIConfig(AIConfigCreateRequest request) {
155169
SystemConfigParam restParam = SystemConfigParam.builder().code(RestAIClient.REST_AI_URL).content(
156-
request.getApiHost()).build();
170+
request.getApiHost()).build();
157171
configService.createOrUpdate(restParam);
158172
SystemConfigParam methodParam = SystemConfigParam.builder().code(RestAIClient.REST_AI_STREAM_OUT).content(
159-
request.getStream().toString()).build();
173+
request.getStream().toString()).build();
160174
configService.createOrUpdate(methodParam);
161175
RestAIClient.refresh();
162176
}
@@ -168,16 +182,16 @@ private void saveRestAIConfig(AIConfigCreateRequest request) {
168182
*/
169183
private void saveAzureAIConfig(AIConfigCreateRequest request) {
170184
SystemConfigParam apikeyParam = SystemConfigParam.builder().code(AzureOpenAIClient.AZURE_CHATGPT_API_KEY)
171-
.content(
172-
request.getApiKey()).build();
185+
.content(
186+
request.getApiKey()).build();
173187
configService.createOrUpdate(apikeyParam);
174188
SystemConfigParam endpointParam = SystemConfigParam.builder().code(AzureOpenAIClient.AZURE_CHATGPT_ENDPOINT)
175-
.content(
176-
request.getApiHost()).build();
189+
.content(
190+
request.getApiHost()).build();
177191
configService.createOrUpdate(endpointParam);
178192
SystemConfigParam modelParam = SystemConfigParam.builder().code(AzureOpenAIClient.AZURE_CHATGPT_DEPLOYMENT_ID)
179-
.content(
180-
request.getModel()).build();
193+
.content(
194+
request.getModel()).build();
181195
configService.createOrUpdate(modelParam);
182196
AzureOpenAIClient.refresh();
183197
}
@@ -308,17 +322,17 @@ public DataResult<AIConfig> getChatAiSystemConfig(String aiSqlSource) {
308322
config.setApiKey(Objects.nonNull(apiKey.getData()) ? apiKey.getData().getContent() : "");
309323
config.setApiHost(Objects.nonNull(apiHost.getData()) ? apiHost.getData().getContent() : "");
310324
config.setHttpProxyHost(
311-
Objects.nonNull(httpProxyHost.getData()) ? httpProxyHost.getData().getContent() : "");
325+
Objects.nonNull(httpProxyHost.getData()) ? httpProxyHost.getData().getContent() : "");
312326
config.setHttpProxyPort(
313-
Objects.nonNull(httpProxyPort.getData()) ? httpProxyPort.getData().getContent() : "");
327+
Objects.nonNull(httpProxyPort.getData()) ? httpProxyPort.getData().getContent() : "");
314328
break;
315329
case CHAT2DBAI:
316330
DataResult<Config> chat2dbApiKey = configService.find(Chat2dbAIClient.CHAT2DB_OPENAI_KEY);
317331
DataResult<Config> chat2dbApiHost = configService.find(Chat2dbAIClient.CHAT2DB_OPENAI_HOST);
318332
DataResult<Config> chat2dbModel = configService.find(Chat2dbAIClient.CHAT2DB_OPENAI_MODEL);
319333
config.setApiKey(Objects.nonNull(chat2dbApiKey.getData()) ? chat2dbApiKey.getData().getContent() : "");
320334
config.setApiHost(
321-
Objects.nonNull(chat2dbApiHost.getData()) ? chat2dbApiHost.getData().getContent() : "");
335+
Objects.nonNull(chat2dbApiHost.getData()) ? chat2dbApiHost.getData().getContent() : "");
322336
config.setModel(Objects.nonNull(chat2dbModel.getData()) ? chat2dbModel.getData().getContent() : "");
323337
break;
324338
case AZUREAI:
@@ -334,7 +348,7 @@ public DataResult<AIConfig> getChatAiSystemConfig(String aiSqlSource) {
334348
DataResult<Config> restAiHttpMethod = configService.find(RestAIClient.REST_AI_STREAM_OUT);
335349
config.setApiHost(Objects.nonNull(restAiUrl.getData()) ? restAiUrl.getData().getContent() : "");
336350
config.setStream(Objects.nonNull(restAiHttpMethod.getData()) ? Boolean.valueOf(
337-
restAiHttpMethod.getData().getContent()) : Boolean.TRUE);
351+
restAiHttpMethod.getData().getContent()) : Boolean.TRUE);
338352
break;
339353
case FASTCHATAI:
340354
DataResult<Config> fastChatApiKey = configService.find(FastChatAIClient.FASTCHAT_API_KEY);
@@ -376,6 +390,12 @@ public DataResult<AIConfig> getChatAiSystemConfig(String aiSqlSource) {
376390
config.setApiHost(Objects.nonNull(zhipuApiHost.getData()) ? zhipuApiHost.getData().getContent() : "");
377391
config.setModel(Objects.nonNull(zhipuModel.getData()) ? zhipuModel.getData().getContent() : "");
378392
break;
393+
case DIFYCHAT:
394+
DataResult<Config> difyChatApiKey = configService.find(DifyChatAIClient.DIFYCHAT_API_KEY);
395+
DataResult<Config> difyChatApiHost = configService.find(DifyChatAIClient.DIFYCHAT_HOST);
396+
config.setApiKey(Objects.nonNull(difyChatApiKey.getData()) ? difyChatApiKey.getData().getContent() : "");
397+
config.setApiHost(Objects.nonNull(difyChatApiHost.getData()) ? difyChatApiHost.getData().getContent() : "");
398+
break;
379399
default:
380400
break;
381401
}

0 commit comments

Comments
 (0)