|
|
|
@ -143,7 +143,7 @@ public class DeepSeekServiceImpl implements DeepSeekService {
|
|
|
|
|
SseEmitter sseEmitter = new SseEmitter(-1L);
|
|
|
|
|
StringBuilder strContent = new StringBuilder();
|
|
|
|
|
StringBuilder strReasoning = new StringBuilder();
|
|
|
|
|
executorService.execute(()-> {
|
|
|
|
|
//executorService.execute(()-> {
|
|
|
|
|
try {
|
|
|
|
|
log.info("流式回答开始,问题:{}", chatCompletionReqDto.getText());
|
|
|
|
|
try (CloseableHttpClient client = HttpClients.createDefault()) {
|
|
|
|
@ -152,13 +152,21 @@ public class DeepSeekServiceImpl implements DeepSeekService {
|
|
|
|
|
httpPost.setHeader("Accept", "application/json");
|
|
|
|
|
httpPost.setHeader("Authorization", "Bearer " + DeepSeekClient.API_Key);
|
|
|
|
|
|
|
|
|
|
Map<String, Object> question = new HashMap<>();
|
|
|
|
|
question.put("role", "user");
|
|
|
|
|
question.put("content", chatCompletionReqDto.getText());
|
|
|
|
|
|
|
|
|
|
List<Map<String, Object>> messages = new ArrayList<>();
|
|
|
|
|
//助手的角色
|
|
|
|
|
Map<String, Object> systemMessage = new HashMap<>();
|
|
|
|
|
systemMessage.put("role", "system");
|
|
|
|
|
systemMessage.put("content", "你是一个教师助手");
|
|
|
|
|
messages.add(systemMessage);
|
|
|
|
|
//用户的消息
|
|
|
|
|
Map<String, Object> userMessage = new HashMap<>();
|
|
|
|
|
userMessage.put("role", "user");
|
|
|
|
|
userMessage.put("content", chatCompletionReqDto.getText());
|
|
|
|
|
messages.add(userMessage);
|
|
|
|
|
//向DeepSeek发送请求
|
|
|
|
|
Map<String, Object> requestMap = new HashMap<>();
|
|
|
|
|
requestMap.put("model", chatCompletionReqDto.getModel());
|
|
|
|
|
requestMap.put("messages", Collections.singletonList(question));
|
|
|
|
|
requestMap.put("messages", messages);
|
|
|
|
|
requestMap.put("stream", true);
|
|
|
|
|
requestMap.put("max_tokens", 1024);
|
|
|
|
|
|
|
|
|
@ -173,13 +181,17 @@ public class DeepSeekServiceImpl implements DeepSeekService {
|
|
|
|
|
String jsonData = line.substring(6);
|
|
|
|
|
if ("[DONE]".equals(jsonData)) {
|
|
|
|
|
sseEmitter.send("[DONE]");
|
|
|
|
|
//断开连接
|
|
|
|
|
sseEmitter.complete();
|
|
|
|
|
// 会话完成,更新历史会话记录
|
|
|
|
|
ChatSession.Message message = ChatSession.Message.of(chatCompletionReqDto.getText(), strContent.toString(),chatCompletionReqDto.getModel(),strReasoning.toString());
|
|
|
|
|
HistoryCache.updateContext(chatCompletionReqDto.getSessionId(), message);
|
|
|
|
|
CosmosPatchOperations options = CosmosPatchOperations.create()
|
|
|
|
|
.replace("/updateTime", Instant.now().toEpochMilli())
|
|
|
|
|
.add("/history/-", message);
|
|
|
|
|
chatSessionRepository.save(chatCompletionReqDto.getSessionId(), PK.of(PK.CHAT_SESSION), ChatSession.class, options);
|
|
|
|
|
if (chatCompletionReqDto.isSave()){
|
|
|
|
|
ChatSession.Message message = ChatSession.Message.of(chatCompletionReqDto.getText(), strContent.toString(),chatCompletionReqDto.getModel(),strReasoning.toString());
|
|
|
|
|
HistoryCache.updateContext(chatCompletionReqDto.getSessionId(), message);
|
|
|
|
|
CosmosPatchOperations options = CosmosPatchOperations.create()
|
|
|
|
|
.replace("/updateTime", Instant.now().toEpochMilli())
|
|
|
|
|
.add("/history/-", message);
|
|
|
|
|
chatSessionRepository.save(chatCompletionReqDto.getSessionId(), PK.of(PK.CHAT_SESSION), ChatSession.class, options);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
JsonNode node = objectMapper.readTree(jsonData);
|
|
|
|
@ -204,8 +216,8 @@ public class DeepSeekServiceImpl implements DeepSeekService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.info("流式回答结束,{}",question);
|
|
|
|
|
sseEmitter.complete();
|
|
|
|
|
log.info("流式回答结束,{}",messages);
|
|
|
|
|
//sseEmitter.complete();
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("处理 Deepseek 请求时发生错误", e);
|
|
|
|
@ -215,7 +227,7 @@ public class DeepSeekServiceImpl implements DeepSeekService {
|
|
|
|
|
log.error("处理 Deepseek 请求时发生错误", e);
|
|
|
|
|
sseEmitter.completeWithError(e);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
//});
|
|
|
|
|
|
|
|
|
|
return sseEmitter;
|
|
|
|
|
}
|
|
|
|
|