mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-07-31 11:42:41 +08:00
feature: modify dify chat liistner
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
package ai.chat2db.server.web.api.controller.ai.chat2db.model;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Map;
|
||||
@ -21,12 +22,14 @@ public class DifyChatCompletionsOptions {
|
||||
* blocking 阻塞型,等待执行完毕后返回结果。(请求若流程较长可能会被中断)
|
||||
* streaming 流式返回。基于 SSE(Server-Sent Events)实现流式返回。
|
||||
*/
|
||||
private String response_mode = "blocking";
|
||||
@JsonProperty("response_mode")
|
||||
private String responseMode = "blocking";
|
||||
|
||||
/**
|
||||
* (必填)‼️ 会话标识符,首次对话为 conversation_id: "" ‼️,如果要继续对话请传入上下文返回的 conversation_id
|
||||
*/
|
||||
private String conversation_id;
|
||||
@JsonProperty("conversation_id")
|
||||
private String conversationId;
|
||||
|
||||
/**
|
||||
* 用户标识,由开发者定义规则,需保证用户标识在应用内唯一。
|
||||
|
@ -134,8 +134,8 @@ public class DifyChatAiStreamClient {
|
||||
try {
|
||||
DifyChatCompletionsOptions chatCompletionsOptions = new DifyChatCompletionsOptions();
|
||||
chatCompletionsOptions.setQuery(lastMessage);
|
||||
chatCompletionsOptions.setResponse_mode("streaming");
|
||||
chatCompletionsOptions.setConversation_id(conversationId);
|
||||
chatCompletionsOptions.setResponseMode("streaming");
|
||||
//chatCompletionsOptions.setConversationId(conversationId);
|
||||
chatCompletionsOptions.setUser(uid);
|
||||
|
||||
EventSource.Factory factory = EventSources.createFactory(this.okHttpClient);
|
||||
@ -148,6 +148,7 @@ public class DifyChatAiStreamClient {
|
||||
String url = this.apiHost + "v1/chat-messages";
|
||||
Request request = new Request.Builder()
|
||||
.url(url)
|
||||
.header("Authorization","Bearer "+apiKey)
|
||||
.post(RequestBody.create(MediaType.parse(ContentType.JSON.getValue()), requestBody))
|
||||
.build();
|
||||
//创建事件
|
||||
|
@ -1,10 +1,16 @@
|
||||
package ai.chat2db.server.web.api.controller.ai.dify.listener;
|
||||
|
||||
|
||||
import ai.chat2db.server.web.api.controller.ai.azure.model.AzureChatChoice;
|
||||
import ai.chat2db.server.web.api.controller.ai.azure.model.AzureChatCompletions;
|
||||
import ai.chat2db.server.web.api.controller.ai.azure.model.AzureChatMessage;
|
||||
import ai.chat2db.server.web.api.controller.ai.azure.model.AzureCompletionsUsage;
|
||||
import ai.chat2db.server.web.api.controller.ai.dify.model.DifyChatStreamEvent;
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.google.gson.Gson;
|
||||
import com.unfbx.chatgpt.entity.chat.Message;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
@ -23,6 +29,9 @@ public class DifyChatAIEventSourceListener extends EventSourceListener {
|
||||
|
||||
private SseEmitter sseEmitter;
|
||||
|
||||
private ObjectMapper mapper = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
|
||||
|
||||
|
||||
public DifyChatAIEventSourceListener(SseEmitter sseEmitter) {
|
||||
this.sseEmitter = sseEmitter;
|
||||
}
|
||||
@ -41,8 +50,27 @@ public class DifyChatAIEventSourceListener extends EventSourceListener {
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public void onEvent(@NotNull EventSource eventSource, @Nullable String id, @Nullable String type, @NotNull String data) {
|
||||
log.info("DifyChatAI:{}", data);
|
||||
DifyChatStreamEvent event = mapper.readValue(data, DifyChatStreamEvent.class);
|
||||
if ("message_end".equals(event.getEvent())) {
|
||||
log.info("DifyChatAI返回数据结束了");
|
||||
sseEmitter.send(SseEmitter.event()
|
||||
.id("[DONE]")
|
||||
.data("[DONE]")
|
||||
.reconnectTime(3000));
|
||||
return;
|
||||
}
|
||||
|
||||
String text = event.getAnswer();
|
||||
log.info("Model ID={} is created at {}.", event.getId(), event.getCreatedAt());
|
||||
Message message = new Message();
|
||||
message.setContent(text);
|
||||
sseEmitter.send(SseEmitter.event()
|
||||
.id(null)
|
||||
.data(message)
|
||||
.reconnectTime(3000));
|
||||
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,21 @@
|
||||
package ai.chat2db.server.web.api.controller.ai.dify.model;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
|
||||
@Data
|
||||
@ToString
|
||||
public class DifyChatStreamEvent {
|
||||
|
||||
private String event;
|
||||
@JsonProperty("task_id")
|
||||
private String taskId;
|
||||
private String id;
|
||||
private String answer;
|
||||
@JsonProperty("created_at")
|
||||
private long createdAt;
|
||||
@JsonProperty("conversation_id")
|
||||
private String conversationId;
|
||||
|
||||
}
|
Reference in New Issue
Block a user