From 687e28f3df3b537e80d2cf4657a4ec6f21a6a513 Mon Sep 17 00:00:00 2001 From: PL <774412461@qq.com> Date: Wed, 19 Mar 2025 11:24:05 +0800 Subject: [PATCH 1/2] =?UTF-8?q?up:=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E8=AF=84=E4=BB=B7=E6=A0=91=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=9BDeepSeek=E5=AF=B9=E8=AF=9D=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../frontend/AiDeepSeekController.java | 4 +-- .../frontend/AppraiseController.java | 12 +++++++++ .../model/dto/ai/ChatCompletionReqDto.java | 4 ++- .../teammodel/model/dto/ai/ChatModelDto.java | 2 -- .../model/dto/ai/deepseek/ChatRequestDto.java | 16 +++++++++++- .../dto/ai/deepseek/ChatResponseDto.java | 2 +- .../dto/ai/deepseek/HistoryRequestDto.java | 25 +++++++++++++++++++ .../model/dto/ai/deepseek/MessageDto.java | 13 ++++++++++ .../model/entity/ai/DeepSeekSession.java | 15 ++++++++++- .../repository/AppraiseRepository.java | 3 +++ .../teammodel/service/EvaluationService.java | 8 ++++++ .../service/impl/DeepSeekServiceImpl.java | 2 +- .../service/impl/EvaluationServiceImpl.java | 24 ++++++++++++++++++ src/main/resources/DeepSeekConfig.properties | 3 ++- 14 files changed, 123 insertions(+), 10 deletions(-) create mode 100644 src/main/java/cn/teammodel/model/dto/ai/deepseek/HistoryRequestDto.java diff --git a/src/main/java/cn/teammodel/controller/frontend/AiDeepSeekController.java b/src/main/java/cn/teammodel/controller/frontend/AiDeepSeekController.java index a966b38..b0e3651 100644 --- a/src/main/java/cn/teammodel/controller/frontend/AiDeepSeekController.java +++ b/src/main/java/cn/teammodel/controller/frontend/AiDeepSeekController.java @@ -95,7 +95,7 @@ public class AiDeepSeekController { * @return */ @PostMapping("session/userid") - @ApiOperation("查询自己的会话列表") + @ApiOperation("查询当前登录的会话列表") public R> UserId(){ String userId = SecurityUtil.getLoginUser().getId(); List sessions = deepSeekSessionService.UserSessionList(userId); @@ -108,7 +108,7 @@ public class AiDeepSeekController { * @return */ @GetMapping("session/history/{sessionId}") - @ApiOperation("查询我的聊天记录") + @ApiOperation("查询当前登录的某个聊天记录") public R> getHistory(@PathVariable String sessionId) { String userId = ((TmdUserDetail) SecurityUtil.getAuthentication().getPrincipal()).getClaims().getSubject(); List history = deepSeekSessionService.listHistory(sessionId, userId); diff --git a/src/main/java/cn/teammodel/controller/frontend/AppraiseController.java b/src/main/java/cn/teammodel/controller/frontend/AppraiseController.java index 342c3e5..3b7b9ac 100644 --- a/src/main/java/cn/teammodel/controller/frontend/AppraiseController.java +++ b/src/main/java/cn/teammodel/controller/frontend/AppraiseController.java @@ -34,6 +34,18 @@ public class AppraiseController { @Resource private EvaluationService evaluationService; + /** + * 获取默认评价树 + * @return + */ + @PostMapping("getDefaultTrees") + @ApiOperation(value = "获取默认评价树", notes = "获取默认评价树") + public R getDefaultTree() { + Appraise appraise = evaluationService.getDefaultTree(); + return R.success(appraise); + } + + @PostMapping("getTrees") @ApiOperation(value = "获取评价树", notes = "获取评价树") public R getEvaluateTree(@RequestBody @Valid GetEvaluateTreeDto getEvaluateTreeDto) { diff --git a/src/main/java/cn/teammodel/model/dto/ai/ChatCompletionReqDto.java b/src/main/java/cn/teammodel/model/dto/ai/ChatCompletionReqDto.java index ac163da..86a9466 100644 --- a/src/main/java/cn/teammodel/model/dto/ai/ChatCompletionReqDto.java +++ b/src/main/java/cn/teammodel/model/dto/ai/ChatCompletionReqDto.java @@ -1,5 +1,6 @@ package cn.teammodel.model.dto.ai; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; @@ -8,8 +9,9 @@ import javax.validation.constraints.NotBlank; public class ChatCompletionReqDto { private String sessionId; /** - * 预设的会话面具 id + * 预设的会话 id */ + @ApiModelProperty("会话id,没有则为空") private String appId; @NotBlank(message = "请输入消息内容") private String text; diff --git a/src/main/java/cn/teammodel/model/dto/ai/ChatModelDto.java b/src/main/java/cn/teammodel/model/dto/ai/ChatModelDto.java index 298edd4..5f77019 100644 --- a/src/main/java/cn/teammodel/model/dto/ai/ChatModelDto.java +++ b/src/main/java/cn/teammodel/model/dto/ai/ChatModelDto.java @@ -16,6 +16,4 @@ public class ChatModelDto { public ArrayList chat; public ArrayList cycleChats; public ArrayList end; - - } diff --git a/src/main/java/cn/teammodel/model/dto/ai/deepseek/ChatRequestDto.java b/src/main/java/cn/teammodel/model/dto/ai/deepseek/ChatRequestDto.java index 308c721..83784c7 100644 --- a/src/main/java/cn/teammodel/model/dto/ai/deepseek/ChatRequestDto.java +++ b/src/main/java/cn/teammodel/model/dto/ai/deepseek/ChatRequestDto.java @@ -1,6 +1,9 @@ package cn.teammodel.model.dto.ai.deepseek; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.Builder; +import lombok.Builder.Default; import java.util.List; @@ -37,8 +40,19 @@ import java.util.List; */ @Data public class ChatRequestDto { + @ApiModelProperty("会话模型") private String model; + @ApiModelProperty("会话内容") private List messages; + /** + * 采样温度,介于 0 和 2 之间。更高的值,如 0.8,会使输出更随机,而更低的值,如 0.2,会使其更加集中和确定。 + * 我们通常建议可以更改这个值或者更改 top_p,但不建议同时对两者进行修改。 + */ private int temperature; - private int max_tokens; + /** + * 介于 1 到 8192 间的整数,限制一次请求中模型生成 completion 的最大 token 数。输入 token 和输出 token 的总长度受模型的上下文长度的限制。 + * 如未指定 max_tokens参数,默认使用 4096。 + */ + @ApiModelProperty("最大生成token数") + private int max_tokens = 2048; } diff --git a/src/main/java/cn/teammodel/model/dto/ai/deepseek/ChatResponseDto.java b/src/main/java/cn/teammodel/model/dto/ai/deepseek/ChatResponseDto.java index a88ee88..6dbb681 100644 --- a/src/main/java/cn/teammodel/model/dto/ai/deepseek/ChatResponseDto.java +++ b/src/main/java/cn/teammodel/model/dto/ai/deepseek/ChatResponseDto.java @@ -5,7 +5,7 @@ import lombok.Data; import java.util.List; /** - * 接着响应的json 格式来设计响应体 用来响应体字符串 + * 接收DeepSeek响应的json 格式来设计响应体 用来响应体字符串 */ @Data public class ChatResponseDto { diff --git a/src/main/java/cn/teammodel/model/dto/ai/deepseek/HistoryRequestDto.java b/src/main/java/cn/teammodel/model/dto/ai/deepseek/HistoryRequestDto.java new file mode 100644 index 0000000..ec6dbc4 --- /dev/null +++ b/src/main/java/cn/teammodel/model/dto/ai/deepseek/HistoryRequestDto.java @@ -0,0 +1,25 @@ +package cn.teammodel.model.dto.ai.deepseek; + +import cn.teammodel.model.entity.ai.DeepSeekSession.DeepSeekMessage; +import lombok.Data; + +/** + * 添加历史记录请求 + */ +@Data +public class HistoryRequestDto { + /** + * 会话id + */ + private String sessionId; + + /** + * 用户id + */ + private String userId; + + /** + * 更新历史记录 + */ + private DeepSeekMessage message; +} diff --git a/src/main/java/cn/teammodel/model/dto/ai/deepseek/MessageDto.java b/src/main/java/cn/teammodel/model/dto/ai/deepseek/MessageDto.java index 19af4da..9606fd8 100644 --- a/src/main/java/cn/teammodel/model/dto/ai/deepseek/MessageDto.java +++ b/src/main/java/cn/teammodel/model/dto/ai/deepseek/MessageDto.java @@ -1,5 +1,6 @@ package cn.teammodel.model.dto.ai.deepseek; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -7,8 +8,20 @@ import lombok.Data; */ @Data public class MessageDto { + /** + * 角色 + */ + @ApiModelProperty("角色") private String role; + /** + * 会话id + */ + @ApiModelProperty("会话id,没有则为空") private String sessionId; + /** + * 提问内容 + */ + @ApiModelProperty("提问内容") private String content; } diff --git a/src/main/java/cn/teammodel/model/entity/ai/DeepSeekSession.java b/src/main/java/cn/teammodel/model/entity/ai/DeepSeekSession.java index b31f3e0..ad78efc 100644 --- a/src/main/java/cn/teammodel/model/entity/ai/DeepSeekSession.java +++ b/src/main/java/cn/teammodel/model/entity/ai/DeepSeekSession.java @@ -4,6 +4,7 @@ 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 io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -23,31 +24,37 @@ public class DeepSeekSession extends BaseItem { /** * 用户id */ + @ApiModelProperty("用户id") public String userId; /** * 会话标题 */ + @ApiModelProperty("会话标题") private String title; /** * 生成该 completion 的模型名。 */ + @ApiModelProperty("模型名") private String model; /** * 创建时间 */ + @ApiModelProperty("创建时间") private long createTime; /** * 产生对话即更新时间,按更新时间排序 */ + @ApiModelProperty("更新时间") private Long updateTime; /** * 会话历史记录 */ + @ApiModelProperty("历史记录") private List history; @Data @@ -55,6 +62,7 @@ public class DeepSeekSession extends BaseItem { /** * 该对话的唯一标识符。 */ + @ApiModelProperty("该对话的唯一标识符") private String id; /** @@ -64,16 +72,19 @@ public class DeepSeekSession extends BaseItem { * assistant:模型。 * system:模型和用户之间的对话。 */ + @ApiModelProperty("角色") private String role; /** * 用户的提问文本 */ + @ApiModelProperty("用户提问文本") private String userText; /** - * 回答的文本 + * 模型回答的文本 */ + @ApiModelProperty("模型回答的文本") private String aiText; /** @@ -83,11 +94,13 @@ public class DeepSeekSession extends BaseItem { * content_filter:输出内容因触发过滤策略而被过滤。 * insufficient_system_resource:系统推理资源不足,生成被打断。 */ + @ApiModelProperty("停止原因 [stop, length, content_filter, tool_calls, insufficient_system_resource] 模型停止生成 token 的原因") private String finish_reason; /** * 创建聊天完成时的 Unix 时间戳 */ + @ApiModelProperty("提问内容创建时间") private Long createTime; public static DeepSeekMessage of(String userText, String aiText){ diff --git a/src/main/java/cn/teammodel/repository/AppraiseRepository.java b/src/main/java/cn/teammodel/repository/AppraiseRepository.java index 42f3df1..e8f9316 100644 --- a/src/main/java/cn/teammodel/repository/AppraiseRepository.java +++ b/src/main/java/cn/teammodel/repository/AppraiseRepository.java @@ -26,6 +26,9 @@ public interface AppraiseRepository extends CosmosRepository { Appraise findBySchoolId(String schoolId, PartitionKey partitionKey); Appraise findAppraiseBySchoolIdAndPeriodIdAndCode(String schoolId, String periodId, String code); + + + Appraise findAppraiseById(String id, PartitionKey partitionKey); /** * 获取模板树 */ diff --git a/src/main/java/cn/teammodel/service/EvaluationService.java b/src/main/java/cn/teammodel/service/EvaluationService.java index 7948038..54bcb54 100644 --- a/src/main/java/cn/teammodel/service/EvaluationService.java +++ b/src/main/java/cn/teammodel/service/EvaluationService.java @@ -19,6 +19,14 @@ import java.util.Map; * @create 2023-11-20 17:46 */ public interface EvaluationService { + + /** + * 获取默认评价树 + * @return + */ + Appraise getDefaultTree(); + + Appraise getTree(GetEvaluateTreeDto getEvaluateTreeDto); /** diff --git a/src/main/java/cn/teammodel/service/impl/DeepSeekServiceImpl.java b/src/main/java/cn/teammodel/service/impl/DeepSeekServiceImpl.java index 8628826..9df8dfa 100644 --- a/src/main/java/cn/teammodel/service/impl/DeepSeekServiceImpl.java +++ b/src/main/java/cn/teammodel/service/impl/DeepSeekServiceImpl.java @@ -99,7 +99,7 @@ public class DeepSeekServiceImpl implements DeepSeekService { session.setCreateTime(Instant.now().toEpochMilli()); session.setUpdateTime(Instant.now().toEpochMilli()); session.setHistory(history); - session =deepSeekRepository.save(session); + session = deepSeekRepository.save(session); }else { session.getHistory().add(savaMessage); deepSeekService.updateSession(session, message.getSessionId()); diff --git a/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java b/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java index 80d3eca..eebcad0 100644 --- a/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java +++ b/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java @@ -25,6 +25,7 @@ import cn.teammodel.utils.*; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.azure.cosmos.models.CosmosPatchOperations; +import com.azure.cosmos.models.PartitionKey; import com.azure.spring.data.cosmos.core.query.CosmosPageRequest; import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.PdfReader; @@ -95,6 +96,29 @@ public class EvaluationServiceImpl implements EvaluationService { return appraise; } + /** + * 获取默认的评价树 + * @return + */ + @Override + public Appraise getDefaultTree(){ + Appraise appraise = appraiseRepository.findAppraiseById("default",new PartitionKey(PK.PK_APPRAISE)); + + // 如果传参 period 所在没有 tree 的话,则复制一份模板 tree 给他 (处理节点 id) + if (appraise == null) { + appraise = RepositoryUtil.findOne(appraiseRepository.findTemplateTree(), "获取模板评价树失败"); + if (appraise == null) { + throw new ServiceException("模板评价树不存在"); + } + // refresh + refreshAppraiseTree(appraise); + appraise.setId(null); + appraise = appraiseRepository.save(appraise); + } + + return this.buildTree(appraise); + } + @Override public Appraise getTree(GetEvaluateTreeDto getEvaluateTreeDto) { String periodId = getEvaluateTreeDto.getPeriodId(); diff --git a/src/main/resources/DeepSeekConfig.properties b/src/main/resources/DeepSeekConfig.properties index 0ca02e2..e556c21 100644 --- a/src/main/resources/DeepSeekConfig.properties +++ b/src/main/resources/DeepSeekConfig.properties @@ -1,3 +1,4 @@ key=sk-83b5b6dd85c745cbae2572ea01c54e44 url=https://api.deepseek.com/chat/completions -model=deepseek-chat \ No newline at end of file +model=deepseek-chat +modelReasoner=deepseek-reasoner \ No newline at end of file From b7cee64e37730cb9c18d208088aacb75a0fec13d Mon Sep 17 00:00:00 2001 From: PL <774412461@qq.com> Date: Wed, 19 Mar 2025 11:58:57 +0800 Subject: [PATCH 2/2] =?UTF-8?q?up:=E7=A7=BB=E9=99=A4=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E8=AF=84=E4=BB=B7=E6=A0=91=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../frontend/AppraiseController.java | 12 ---------- .../repository/AppraiseRepository.java | 3 --- .../teammodel/service/EvaluationService.java | 7 ------ .../service/impl/EvaluationServiceImpl.java | 23 ------------------- 4 files changed, 45 deletions(-) diff --git a/src/main/java/cn/teammodel/controller/frontend/AppraiseController.java b/src/main/java/cn/teammodel/controller/frontend/AppraiseController.java index 3b7b9ac..342c3e5 100644 --- a/src/main/java/cn/teammodel/controller/frontend/AppraiseController.java +++ b/src/main/java/cn/teammodel/controller/frontend/AppraiseController.java @@ -34,18 +34,6 @@ public class AppraiseController { @Resource private EvaluationService evaluationService; - /** - * 获取默认评价树 - * @return - */ - @PostMapping("getDefaultTrees") - @ApiOperation(value = "获取默认评价树", notes = "获取默认评价树") - public R getDefaultTree() { - Appraise appraise = evaluationService.getDefaultTree(); - return R.success(appraise); - } - - @PostMapping("getTrees") @ApiOperation(value = "获取评价树", notes = "获取评价树") public R getEvaluateTree(@RequestBody @Valid GetEvaluateTreeDto getEvaluateTreeDto) { diff --git a/src/main/java/cn/teammodel/repository/AppraiseRepository.java b/src/main/java/cn/teammodel/repository/AppraiseRepository.java index e8f9316..a674f4c 100644 --- a/src/main/java/cn/teammodel/repository/AppraiseRepository.java +++ b/src/main/java/cn/teammodel/repository/AppraiseRepository.java @@ -25,9 +25,6 @@ import java.util.Set; public interface AppraiseRepository extends CosmosRepository { Appraise findBySchoolId(String schoolId, PartitionKey partitionKey); Appraise findAppraiseBySchoolIdAndPeriodIdAndCode(String schoolId, String periodId, String code); - - - Appraise findAppraiseById(String id, PartitionKey partitionKey); /** * 获取模板树 diff --git a/src/main/java/cn/teammodel/service/EvaluationService.java b/src/main/java/cn/teammodel/service/EvaluationService.java index 54bcb54..74d2020 100644 --- a/src/main/java/cn/teammodel/service/EvaluationService.java +++ b/src/main/java/cn/teammodel/service/EvaluationService.java @@ -20,13 +20,6 @@ import java.util.Map; */ public interface EvaluationService { - /** - * 获取默认评价树 - * @return - */ - Appraise getDefaultTree(); - - Appraise getTree(GetEvaluateTreeDto getEvaluateTreeDto); /** diff --git a/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java b/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java index eebcad0..823dbb3 100644 --- a/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java +++ b/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java @@ -96,29 +96,6 @@ public class EvaluationServiceImpl implements EvaluationService { return appraise; } - /** - * 获取默认的评价树 - * @return - */ - @Override - public Appraise getDefaultTree(){ - Appraise appraise = appraiseRepository.findAppraiseById("default",new PartitionKey(PK.PK_APPRAISE)); - - // 如果传参 period 所在没有 tree 的话,则复制一份模板 tree 给他 (处理节点 id) - if (appraise == null) { - appraise = RepositoryUtil.findOne(appraiseRepository.findTemplateTree(), "获取模板评价树失败"); - if (appraise == null) { - throw new ServiceException("模板评价树不存在"); - } - // refresh - refreshAppraiseTree(appraise); - appraise.setId(null); - appraise = appraiseRepository.save(appraise); - } - - return this.buildTree(appraise); - } - @Override public Appraise getTree(GetEvaluateTreeDto getEvaluateTreeDto) { String periodId = getEvaluateTreeDto.getPeriodId();