up:DeepSeek对话相关接口

develop
PL 2 months ago
parent 289b34c477
commit 096710b3a6

@ -46,7 +46,12 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<!--Gson 依赖-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
<!-- pdf操作类 -->
<dependency>
<groupId>com.itextpdf</groupId>

@ -0,0 +1,178 @@
package cn.teammodel.ai.deepseek;
import cn.teammodel.common.ErrorCode;
import cn.teammodel.config.exception.ServiceException;
import cn.teammodel.model.dto.ai.deepseek.ChatRequestDto;
import cn.teammodel.model.dto.ai.deepseek.ChatResponseDto;
import cn.teammodel.model.dto.ai.deepseek.MessageDto;
import cn.teammodel.utils.JsonUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.google.gson.Gson;
import okhttp3.*;
import org.apache.http.HttpEntity;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.util.HashMap;
import java.util.Map;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
public class DeepSeekClient {
private static final String API_Key;
private static final String API_Url;
public static String API_Model;
/**
* key url
*/
static {
Properties props = new Properties();
try {
InputStream is = DeepSeekClient.class.getResourceAsStream("/DeepSeekConfig.properties");
props.load(is);
API_Key = props.getProperty("key");
API_Url = props.getProperty("url");
API_Model = props.getProperty("model");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 使
* @param mssage
*/
private static Map<String, Object> ask(MessageDto mssage)
{
Map<String, Object> mapper = new HashMap<>();
//创建消息列表
List<MessageDto> msg = new ArrayList<>();
msg.add(mssage);
//构建请求头
ChatRequestDto requestBody = new ChatRequestDto();
requestBody.setModel(API_Model);
requestBody.setMessages(msg);
requestBody.setTemperature(0);
requestBody.setMax_tokens(1024);
long startTime = System.currentTimeMillis();
//发起请求
ChatResponseDto response = SendRequests(requestBody);
//Map<String, Object> response = SendRequest(requestBody);
Long endTime = System.currentTimeMillis();
//思考耗时 秒
long time = (endTime-startTime)/1000;
response.setWasteTime(time);
return mapper;
}
/***
* OkHttpClient
*
* @param requestBody
* @return
*/
public static ChatResponseDto SendRequests(ChatRequestDto requestBody)
{
ChatResponseDto chatResponse = new ChatResponseDto();
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("application/json");
//String content = "{\n \"messages\": [\n {\n \"content\": \"You are a helpful assistant\",\n \"role\": \"system\"\n },\n {\n \"content\": \"Hi\",\n \"role\": \"user\"\n }\n ],\n \"model\": \"deepseek-chat\",\n \"frequency_penalty\": 0,\n \"max_tokens\": 2048,\n \"presence_penalty\": 0,\n \"response_format\": {\n \"type\": \"text\"\n },\n \"stop\": null,\n \"stream\": false,\n \"stream_options\": null,\n \"temperature\": 1,\n \"top_p\": 1,\n \"tools\": null,\n \"tool_choice\": \"none\",\n \"logprobs\": false,\n \"top_logprobs\": null\n}";
String content = JsonUtil.convertToJson(requestBody);
RequestBody body = RequestBody.create(mediaType, content);
Request request = new Request.Builder()
.url(API_Url)
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.addHeader("Authorization", "Bearer "+API_Key)
.build();
try(Response response = client.newCall(request).execute()) {
if (response.isSuccessful() && response.body() != null) {
String responseBody = response.body().string();
// 使用 Gson 将 JSON 字符串转换为 MyEntity 对象
Gson gson = new Gson();
chatResponse = gson.fromJson(responseBody, ChatResponseDto.class);
// 确保关闭响应体以释放资源
response.body().close();
chatResponse.setCode(200);
chatResponse.setMsg("成功");
} else {
chatResponse.setCode( response.code());
chatResponse.setMsg(response.body().string());
}
} catch (IOException e) {
if (e.getMessage().equals("Connection timed out") || e.getMessage().equals("timeout"))
{
chatResponse.setCode(408);
chatResponse.setMsg("请求DeepSeek服务器超时");
}else {
chatResponse.setCode( 500);
chatResponse.setMsg(e.getMessage());
}
}
return chatResponse;
}
/***
* HttpClient
* @param requestBody
* @return
*/
public static Map<String, Object> SendRequest(ChatRequestDto requestBody) {
Map<String, Object> mapper = new HashMap<>();
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
// 创建HttpPost对象
HttpPost httpPost = new HttpPost(API_Url);
//添加请求头
httpPost.setHeader("Content-Type", "application/json");
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Authorization", "Bearer " +API_Key);
// 设置请求体
String jsonContent = JsonUtil.convertToJson(requestBody);
httpPost.setEntity(new StringEntity(jsonContent, ContentType.create("application/json", "UTF-8")));
// 发送请求
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
// 获取响应实体
HttpEntity entity = response.getEntity();
if (entity != null) {
// 解析响应内容
String jsonString = EntityUtils.toString(entity);
ObjectMapper objectMapper = new ObjectMapper();
mapper = objectMapper.readValue(jsonString, TypeFactory.defaultInstance().constructMapType(Map.class, String.class, Object.class));
}
// 检查响应状态码
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != 200) throw new RuntimeException("Failed : HTTP error code : " + statusCode);
} catch (IOException e) {
throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "数据解析异常");
}
} catch (IOException e) {
throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "请求头异常"+e.getMessage());
}
//TODO 请求接口
return mapper;
}
}

@ -25,6 +25,10 @@ public interface PK {
String STUDENT = "Base-%s";
String CLASS = "Class-%s";
String CHAT_SESSION = "ChatSession";
/**
* DeepSeek
*/
String DEEPSEEK_SESSION ="DeepSeekSession";
String WEEK_DUTY = "Duty";
String WEEK_DUTY_RECORD = "DutyRecord-%s";
String CHAT_APP = "ChatApp";

@ -26,7 +26,7 @@ import java.util.concurrent.CompletableFuture;
@RestController
@RequestMapping("/ai")
@Api(tags = "AI 能力")
@Api(tags = "AI 科大讯飞 能力")
public class AiController {
@Resource
private ChatSessionService chatSessionService;
@ -35,6 +35,7 @@ public class AiController {
@Resource
private ChatAppService chatAppService;
@PostMapping("api/chat/completion")
@ApiOperation("与 spark 的流式对话")
public SseEmitter chatCompletionToApi(@RequestBody @Valid ChatCompletionReqDto chatCompletionReqDto) {
@ -183,4 +184,6 @@ public class AiController {
return chatMessageService.chatTeacherComment(chatTeacherCommentDto,userId, userName);
}
}

@ -0,0 +1,129 @@
package cn.teammodel.controller.frontend;
import cn.teammodel.common.IdRequest;
import cn.teammodel.model.dto.ai.UpdateSessionDto;
import cn.teammodel.model.dto.ai.deepseek.ChatResponseDto;
import cn.teammodel.model.dto.ai.deepseek.MessageDto;
import cn.teammodel.model.entity.TmdUserDetail;
import cn.teammodel.model.entity.ai.ChatSession;
import cn.teammodel.model.entity.ai.DeepSeekSession;
import cn.teammodel.model.entity.ai.DeepSeekSession.DeepSeekMessage;
import cn.teammodel.repository.ChatSessionRepository;
import cn.teammodel.repository.DeepSeekRepository;
import cn.teammodel.security.utils.SecurityUtil;
import cn.teammodel.service.DeepSeekService;
import cn.teammodel.common.R;
import cn.teammodel.service.DeepSeekSessionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.*;
@RestController
@RequestMapping("/aiDeepSeek")
@Api(tags = "AI DeepSeek 能力")
public class AiDeepSeekController {
/**
* 访DeepSeek
*/
@Resource
private DeepSeekService deepSeekChatService;
/**
*
*/
@Resource
private DeepSeekSessionService deepSeekSessionService;
/**
*
* @return
*/
@PostMapping("session/create/default")
@ApiOperation("创建默认会话")
public R<DeepSeekSession> CreateDefaultSession(){
String userId = ((TmdUserDetail) SecurityUtil.getAuthentication().getPrincipal()).getClaims().getSubject();
String name = (String) ((TmdUserDetail) SecurityUtil.getAuthentication().getPrincipal()).getClaims().get("name");
DeepSeekSession session = deepSeekSessionService.CreateDefaultSession(userId,name);
return R.success(session);
}
/**
*
* @param createSession
* @return
*/
@PostMapping("session/create")
@ApiOperation("创建会话(实体)")
public R<DeepSeekSession> CreateDefaultSession(@RequestBody @Valid DeepSeekSession createSession){
DeepSeekSession session = deepSeekSessionService.CreateSession(createSession);
return R.success(session);
}
/**
*
* @param idRequest
* @return
*/
@PostMapping("session/del")
@ApiOperation("删除会话")
public R<String> removeSession(@RequestBody @Valid IdRequest idRequest) {
String userId = ((TmdUserDetail) SecurityUtil.getAuthentication().getPrincipal()).getClaims().getSubject();
deepSeekSessionService.deleteSession(idRequest.getId(), userId);
return R.success("删除会话成功");
}
/**
*
* @param upSession
* @return
*/
@PostMapping("session/update")
@ApiOperation("更新聊天会话")
public R<DeepSeekSession> updateSession(@RequestBody @Valid DeepSeekSession upSession) {
String userId = ((TmdUserDetail) SecurityUtil.getAuthentication().getPrincipal()).getClaims().getSubject();
DeepSeekSession session = deepSeekSessionService.updateSession(upSession, userId);
return R.success(session);
}
/**
*
* @return
*/
@PostMapping("session/userid")
@ApiOperation("查询自己的会话列表")
public R<List<DeepSeekSession>> UserId(){
String userId = SecurityUtil.getLoginUser().getId();
List<DeepSeekSession> sessions = deepSeekSessionService.UserSessionList(userId);
return R.success(sessions);
}
/**
*
* @param sessionId
* @return
*/
@GetMapping("session/history/{sessionId}")
@ApiOperation("查询我的聊天记录")
public R<List<DeepSeekMessage>> getHistory(@PathVariable String sessionId) {
String userId = ((TmdUserDetail) SecurityUtil.getAuthentication().getPrincipal()).getClaims().getSubject();
List<DeepSeekMessage> history = deepSeekSessionService.listHistory(sessionId, userId);
return R.success(history);
}
/**
*deepseek
* @param messageDto
* @return
*/
@PostMapping("chat")
@ApiOperation("与deepseek的对话")
public R<ChatResponseDto> ChatCompletion(@RequestBody @Valid MessageDto messageDto) {
ChatResponseDto chatResponse = deepSeekChatService.ChatAsk(messageDto);
return R.success(chatResponse);
}
}

@ -0,0 +1,44 @@
package cn.teammodel.model.dto.ai.deepseek;
import lombok.Data;
import java.util.List;
/***
* json
* {
* "messages": [
* {
* "content": "You are a helpful assistant",
* "role": "system"
* },
* {
* "content": "Hi",
* "role": "user"
* }
* ],
* "model": "deepseek-chat",
* "frequency_penalty": 0,
* "max_tokens": 2048,
* "presence_penalty": 0,
* "response_format": {
* "type": "text"
* },
* "stop": null,
* "stream": false,
* "stream_options": null,
* "temperature": 1,
* "top_p": 1,
* "tools": null,
* "tool_choice": "none",
* "logprobs": false,
* "top_logprobs": null
* }
*/
@Data
public class ChatRequestDto {
private String model;
private List<MessageDto> messages;
private int temperature;
private int max_tokens;
}

@ -0,0 +1,47 @@
package cn.teammodel.model.dto.ai.deepseek;
import lombok.Data;
import java.util.List;
/**
* json
*/
@Data
public class ChatResponseDto {
private int code;
private String msg;
private long wasteTime;
private String id;
private String object;
private long created;
private String model;
private Usage usage;
/**
*
*/
private List<Choice> choices;
private String system_fingerprint;
@Data
public static class Choice {
private int index;
private MessageDto message;
private String logprobs;
private String finish_reason;
}
@Data
public static class Usage{
private int prompt_tokens;
private int completion_tokens;
private int total_tokens;
private Prompt_Tokens_Details prompt_tokens_details;
private int prompt_cache_hit_tokens;
private int prompt_cache_miss_tokens;
}
@Data
public static class Prompt_Tokens_Details {
private int cached_tokens;
}
}

@ -0,0 +1,14 @@
package cn.teammodel.model.dto.ai.deepseek;
import lombok.Data;
/**
* /
*/
@Data
public class MessageDto {
private String role;
private String sessionId;
private String content;
}

@ -0,0 +1,103 @@
package cn.teammodel.model.entity.ai;
import cn.hutool.core.lang.UUID;
import cn.teammodel.model.entity.BaseItem;
import com.azure.spring.data.cosmos.core.mapping.Container;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.Instant;
import java.util.List;
/**
* deepseek
* @Date: 2023/6/5
*/
@EqualsAndHashCode(callSuper = true)
@Container(containerName = "Teacher")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DeepSeekSession extends BaseItem {
/**
* id
*/
public String userId;
/**
*
*/
private String title;
/**
* completion
*/
private String model;
/**
*
*/
private long createTime;
/**
* ,
*/
private Long updateTime;
/**
*
*/
private List<DeepSeekMessage> history;
@Data
public static class DeepSeekMessage {
/**
*
*/
private String id;
/**
*
* [user, assistant, system]
* user
* assistant
* system
*/
private String role;
/**
*
*/
private String userText;
/**
*
*/
private String aiText;
/**
* [stop, length, content_filter, tool_calls, insufficient_system_resource] token
* stop stop
* length max_tokens
* content_filter
* insufficient_system_resource
*/
private String finish_reason;
/**
* Unix
*/
private Long createTime;
public static DeepSeekMessage of(String userText, String aiText){
DeepSeekMessage message = new DeepSeekMessage();
message.setId(UUID.randomUUID().toString());
message.setUserText(userText);
message.setAiText(aiText);
message.setCreateTime(Instant.now().toEpochMilli());
return message;
}
}
}

@ -0,0 +1,58 @@
package cn.teammodel.repository;
import cn.teammodel.model.entity.ai.ChatSession;
import cn.teammodel.model.entity.ai.DeepSeekSession;
import com.azure.spring.data.cosmos.repository.CosmosRepository;
import com.azure.spring.data.cosmos.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
*
* Created by jiangjingming on 17/6/19.
*/
@Repository
public interface DeepSeekRepository extends CosmosRepository<DeepSeekSession, String> {
/**
* idcode
* @param id
* @param code
* @return
*/
DeepSeekSession findSessionByIdAndCode(String id, String code);
/**
* id
* @param sessionId
* @return
*/
@Query("select * from c where c.code='DeepSeekSession' and c.sessionId = @sessionId")
List<DeepSeekSession> findBySessionId(String sessionId);
/**
* id
* @param userId
* @return
*/
@Query("select c.id,c.userId,c.title,c.model,c.createTime,c.updateTime from c where c.code='DeepSeekSession' and c.userId = @userId")
List<DeepSeekSession> findByUserId(String userId);
/**
* id
* @param sessionId
* @return
*/
@Query("SELECT value ARRAY_SLICE(c.history, -3) FROM c where c.id = @sessionId and c.code = 'DeepSeekSession'")
List<ChatSession.Message> findLatestMessage(String sessionId);
/**
* id
* @param userId
* @return
*/
@Query("select * from c where c.code = 'DeepSeekSession' and c.id = @userId")
List<ChatSession> findCommentsById(String userId);
}

@ -0,0 +1,20 @@
package cn.teammodel.service;
import cn.teammodel.model.dto.ai.deepseek.ChatResponseDto;
import cn.teammodel.model.dto.ai.deepseek.MessageDto;
import cn.teammodel.model.entity.ai.DeepSeekSession;
import java.util.List;
/**
* 访DeepSeek
*/
public interface DeepSeekService {
/**
* AI
* @param message
* @return
*/
ChatResponseDto ChatAsk(MessageDto message);
}

@ -0,0 +1,60 @@
package cn.teammodel.service;
import cn.teammodel.model.dto.ai.deepseek.ChatResponseDto;
import cn.teammodel.model.entity.ai.DeepSeekSession;
import cn.teammodel.model.entity.ai.DeepSeekSession.DeepSeekMessage;
import java.util.List;
/**
*
* Created by Jiayiwu on 16/5/26.
*/
public interface DeepSeekSessionService {
/**
*
* @param userId
* @param name
* @return
*/
DeepSeekSession CreateDefaultSession(String userId, String name);
/**
*
* @param session
* @return
*/
DeepSeekSession CreateSession(DeepSeekSession session);
/**
*
* @param upSession
* @param userId
* @return
*/
DeepSeekSession updateSession(DeepSeekSession upSession, String userId);
/**
*
* @param id
* @param userId
*/
void deleteSession (String id, String userId);
/**
*
* @param userId
* @return
*/
List<DeepSeekSession> UserSessionList(String userId);
/**
*
* @param sessionId
* @param userId
* @return
*/
List<DeepSeekMessage> listHistory(String sessionId, String userId);
}

@ -0,0 +1,110 @@
package cn.teammodel.service.impl;
import cn.teammodel.ai.deepseek.DeepSeekClient;
import cn.teammodel.common.PK;
import cn.teammodel.model.dto.ai.deepseek.ChatRequestDto;
import cn.teammodel.model.dto.ai.deepseek.ChatResponseDto;
import cn.teammodel.model.dto.ai.deepseek.MessageDto;
import cn.teammodel.model.entity.ai.DeepSeekSession;
import cn.teammodel.model.entity.ai.DeepSeekSession.DeepSeekMessage;
import cn.teammodel.repository.DeepSeekRepository;
import cn.teammodel.security.utils.SecurityUtil;
import cn.teammodel.service.DeepSeekService;
import cn.teammodel.service.DeepSeekSessionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.Instant;
import java.util.*;
/**
* 访DeepSeek
*/
@Service
@Slf4j
public class DeepSeekServiceImpl implements DeepSeekService {
@Resource
private DeepSeekSessionService deepSeekService;
@Resource
private DeepSeekRepository deepSeekRepository;
/**
*
* @param message
* @return
*/
@Override
public ChatResponseDto ChatAsk(MessageDto message) {
//创建消息列表
List<MessageDto> msg = new ArrayList<>();
msg.add(message);
//构建请求头
ChatRequestDto requestBody = new ChatRequestDto();
requestBody.setModel(DeepSeekClient.API_Model);
requestBody.setMessages(msg);
requestBody.setTemperature(0);
requestBody.setMax_tokens(1024);
//开始时间
long startTime = System.currentTimeMillis();
//发起请求
ChatResponseDto response = DeepSeekClient.SendRequests(requestBody);
//Map<String, Object> response = DeepSeekClient.SendRequests(requestBody);
//Map<String, Object> response = SendRequest(requestBody);
//结束时间
long endTime = System.currentTimeMillis();
//思考耗时 秒
response.setWasteTime((endTime-startTime)/1000);
if (response.getCode() == 200){
DeepSeekMessage savaMessage = new DeepSeekMessage();
savaMessage.setId(response.getId());
savaMessage.setUserText(message.getContent());
savaMessage.setAiText(response.getChoices().get(0).getMessage().getContent());
savaMessage.setRole(response.getChoices().get(0).getMessage().getRole());
savaMessage.setCreateTime(response.getCreated());
savaMessage.setFinish_reason(response.getChoices().get(0).getFinish_reason());
DeepSeekSession session = new DeepSeekSession();
if (message.getSessionId() != null){
session = deepSeekRepository.findSessionByIdAndCode(message.getSessionId(), PK.CHAT_SESSION);
UpdateSession(message, session, savaMessage, response);
}else {
UpdateSession(message, session, savaMessage, response);
}
}
return response;
}
//region 辅助方法
/**
* /
* @param message
* @param session
* @param savaMessage
* @param response
*/
private void UpdateSession(MessageDto message, DeepSeekSession session, DeepSeekMessage savaMessage, ChatResponseDto response) {
if (session.getId() == null){
List<DeepSeekMessage> history = Collections.singletonList(savaMessage);
String userId = SecurityUtil.getLoginUser().getId();
session.setId(UUID.randomUUID().toString());
session.setCode(PK.DEEPSEEK_SESSION);
session.setTitle("新对话");
session.setUserId(userId);
session.setModel(response.getModel());
session.setCreateTime(Instant.now().toEpochMilli());
session.setUpdateTime(Instant.now().toEpochMilli());
session.setHistory(history);
session =deepSeekRepository.save(session);
}else {
session.getHistory().add(savaMessage);
deepSeekService.updateSession(session, message.getSessionId());
}
}
//endregion
}

@ -0,0 +1,133 @@
package cn.teammodel.service.impl;
import cn.teammodel.common.ErrorCode;
import cn.teammodel.common.PK;
import cn.teammodel.config.exception.ServiceException;
import cn.teammodel.model.entity.ai.ChatSession;
import cn.teammodel.model.entity.ai.DeepSeekSession;
import cn.teammodel.model.entity.ai.DeepSeekSession.DeepSeekMessage;
import cn.teammodel.repository.DeepSeekRepository;
import cn.teammodel.service.DeepSeekSessionService;
import cn.teammodel.utils.RepositoryUtil;
import com.azure.cosmos.models.CosmosPatchOperations;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.Instant;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@Service
@Slf4j
public class DeepSeekSessionServiceImpl implements DeepSeekSessionService {
@Resource // 注入
private DeepSeekRepository deepSeekRepository;
/**
*
* @param userId
* @param name
* @return
*/
@Override
public DeepSeekSession CreateDefaultSession(String userId, String name) {
//初始化第一条欢迎语
DeepSeekMessage message = DeepSeekMessage.of("你好"+name, "我是你的私人 DeepSeek AI 助手小豆,你可以问我任何包括但不仅限于教育的问题,我会尽力为您解答!");
List<DeepSeekMessage> history = Collections.singletonList(message);
DeepSeekSession session = new DeepSeekSession();
session.setId(UUID.randomUUID().toString());
session.setCode(PK.DEEPSEEK_SESSION);
session.setTitle("新对话");
session.setUserId(userId);
session.setCreateTime(Instant.now().toEpochMilli());
session.setUpdateTime(Instant.now().toEpochMilli());
session.setHistory(history);
return deepSeekRepository.save(session);
}
/**
*
* @param session
* @return
*/
@Override
public DeepSeekSession CreateSession(DeepSeekSession session) {
return deepSeekRepository.save(session);
}
/**
*
* @param upSession
* @param userId
* @return
*/
@Override
public DeepSeekSession updateSession (DeepSeekSession upSession, String userId)
{
String id = upSession.getId();
String title = upSession.getTitle();
DeepSeekSession session = RepositoryUtil.findOne(deepSeekRepository.findBySessionId(id), "");
if (!session.getUserId().equals(userId)) {
throw new ServiceException(ErrorCode.NO_AUTH_ERROR);
}
CosmosPatchOperations options = CosmosPatchOperations.create()
.replace("/title", title);
deepSeekRepository.save(id, PK.of(PK.CHAT_SESSION), DeepSeekSession.class, options);
return session;
}
/**
*
* @param id
* @param userId
*/
@Override
public void deleteSession (String id, String userId)
{
DeepSeekSession session = RepositoryUtil.findOne(deepSeekRepository.findBySessionId(id), "");
if (!session.getUserId().equals(userId)) {
throw new ServiceException(ErrorCode.NO_AUTH_ERROR);
}
deepSeekRepository.deleteById(id, PK.of(PK.CHAT_SESSION));
}
/**
*
* @param userId
* @return
*/
@Override
public List<DeepSeekSession> UserSessionList(String userId) {
List<DeepSeekSession> sessions = deepSeekRepository.findByUserId(userId);
// 按更新时间排序
if (ObjectUtils.isNotEmpty(sessions))
{
sessions = sessions.stream().sorted(Comparator.comparing(DeepSeekSession::getUpdateTime)).collect(Collectors.toList());
}
return sessions;
}
/**
*
* @param sessionId
* @param userId
* @return
*/
@Override
public List<DeepSeekMessage> listHistory(String sessionId, String userId) {
DeepSeekSession session = deepSeekRepository.findSessionByIdAndCode(sessionId, PK.DEEPSEEK_SESSION);
if (!userId.equals(session.getUserId())) {
throw new ServiceException(ErrorCode.NO_AUTH_ERROR);
}
return session.getHistory();
}
}

@ -0,0 +1,3 @@
key=sk-83b5b6dd85c745cbae2572ea01c54e44
url=https://api.deepseek.com/chat/completions
model=deepseek-chat
Loading…
Cancel
Save