Commit 64fdd045a5006c8fae0bbae02395da10e51fb36d
1 parent
1f5878ed
增加 chat message 删除
Showing
6 changed files
with
192 additions
and
3 deletions
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/ChatMessageController.java
| 1 | 1 | package cn.iocoder.yudao.module.ai.controller; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 5 | +import cn.iocoder.yudao.module.ai.service.ChatMessageService; | |
| 6 | +import cn.iocoder.yudao.module.ai.vo.ChatMessageListRes; | |
| 7 | +import cn.iocoder.yudao.module.ai.vo.ChatMessageReq; | |
| 8 | +import io.swagger.v3.oas.annotations.Operation; | |
| 3 | 9 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 4 | 10 | import lombok.AllArgsConstructor; |
| 5 | 11 | import lombok.extern.slf4j.Slf4j; |
| 6 | -import org.springframework.web.bind.annotation.RequestMapping; | |
| 7 | -import org.springframework.web.bind.annotation.RestController; | |
| 12 | +import org.springframework.validation.annotation.Validated; | |
| 13 | +import org.springframework.web.bind.annotation.*; | |
| 8 | 14 | |
| 9 | 15 | /** |
| 10 | 16 | * chat message |
| ... | ... | @@ -15,8 +21,24 @@ import org.springframework.web.bind.annotation.RestController; |
| 15 | 21 | */ |
| 16 | 22 | @Tag(name = "A3-聊天-对话") |
| 17 | 23 | @RestController |
| 18 | -@RequestMapping("/ai/chat/conversation") | |
| 24 | +@RequestMapping("/ai/chat/message") | |
| 19 | 25 | @Slf4j |
| 20 | 26 | @AllArgsConstructor |
| 21 | 27 | public class ChatMessageController { |
| 28 | + | |
| 29 | + private final ChatMessageService chatMessageService; | |
| 30 | + | |
| 31 | + @Operation(summary = "聊天记录", description = "查询个人的聊天记录") | |
| 32 | + @GetMapping("/list") | |
| 33 | + public PageResult<ChatMessageListRes> list(@Validated @ModelAttribute ChatMessageReq req) { | |
| 34 | + return chatMessageService.list(req); | |
| 35 | + } | |
| 36 | + | |
| 37 | + @Operation(summary = "聊天记录", description = "查询个人的聊天记录") | |
| 38 | + @DeleteMapping("/{chatConversationId}/{id}") | |
| 39 | + public CommonResult delete(@PathVariable("chatConversationId") Long chatConversationId, | |
| 40 | + @PathVariable("id") Long id) { | |
| 41 | + chatMessageService.delete(chatConversationId, id); | |
| 42 | + return CommonResult.success(null); | |
| 43 | + } | |
| 22 | 44 | } | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/mapper/AiChatMessageMapper.java
| 1 | 1 | package cn.iocoder.yudao.module.ai.mapper; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 4 | 5 | import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatMessageDO; |
| 5 | 6 | import org.apache.ibatis.annotations.Mapper; |
| 6 | 7 | import org.springframework.stereotype.Repository; |
| ... | ... | @@ -14,4 +15,17 @@ import org.springframework.stereotype.Repository; |
| 14 | 15 | @Repository |
| 15 | 16 | @Mapper |
| 16 | 17 | public interface AiChatMessageMapper extends BaseMapperX<AiChatMessageDO> { |
| 18 | + | |
| 19 | + /** | |
| 20 | + * 删除 - 根据 Conversation 和 id | |
| 21 | + * | |
| 22 | + * @param chatConversationId | |
| 23 | + * @param id | |
| 24 | + */ | |
| 25 | + default int deleteByConversationAndId(Long chatConversationId, Long id) { | |
| 26 | + return this.delete(new LambdaQueryWrapperX<AiChatMessageDO>() | |
| 27 | + .eq(AiChatMessageDO::getChatConversationId, chatConversationId) | |
| 28 | + .eq(AiChatMessageDO::getId, id) | |
| 29 | + ); | |
| 30 | + } | |
| 17 | 31 | } | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/ChatMessageService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.service; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 4 | +import cn.iocoder.yudao.module.ai.vo.ChatMessageListRes; | |
| 5 | +import cn.iocoder.yudao.module.ai.vo.ChatMessageReq; | |
| 6 | + | |
| 7 | +/** | |
| 8 | + * chat message | |
| 9 | + * | |
| 10 | + * @author fansili | |
| 11 | + * @time 2024/4/24 17:25 | |
| 12 | + * @since 1.0 | |
| 13 | + */ | |
| 14 | +public interface ChatMessageService { | |
| 15 | + | |
| 16 | + /** | |
| 17 | + * message - 列表 | |
| 18 | + * | |
| 19 | + * @param req | |
| 20 | + * @return | |
| 21 | + */ | |
| 22 | + PageResult<ChatMessageListRes> list(ChatMessageReq req); | |
| 23 | + | |
| 24 | + /** | |
| 25 | + * message - 删除 | |
| 26 | + * | |
| 27 | + * @param chatConversationId | |
| 28 | + * @param id | |
| 29 | + */ | |
| 30 | + void delete(Long chatConversationId, Long id); | |
| 31 | +} | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/impl/ChatMessageServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.service.impl; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; | |
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 5 | +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | |
| 6 | +import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | |
| 7 | +import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatConversationDO; | |
| 8 | +import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper; | |
| 9 | +import cn.iocoder.yudao.module.ai.mapper.AiChatMessageMapper; | |
| 10 | +import cn.iocoder.yudao.module.ai.service.ChatMessageService; | |
| 11 | +import cn.iocoder.yudao.module.ai.vo.ChatMessageListRes; | |
| 12 | +import cn.iocoder.yudao.module.ai.vo.ChatMessageReq; | |
| 13 | +import lombok.AllArgsConstructor; | |
| 14 | +import lombok.extern.slf4j.Slf4j; | |
| 15 | +import org.springframework.stereotype.Service; | |
| 16 | + | |
| 17 | +/** | |
| 18 | + * chat message | |
| 19 | + * | |
| 20 | + * @author fansili | |
| 21 | + * @time 2024/4/24 17:25 | |
| 22 | + * @since 1.0 | |
| 23 | + */ | |
| 24 | +@AllArgsConstructor | |
| 25 | +@Service | |
| 26 | +@Slf4j | |
| 27 | +public class ChatMessageServiceImpl implements ChatMessageService { | |
| 28 | + | |
| 29 | + private final AiChatMessageMapper aiChatMessageMapper; | |
| 30 | + private final AiChatConversationMapper aiChatConversationMapper; | |
| 31 | + | |
| 32 | + @Override | |
| 33 | + public PageResult<ChatMessageListRes> list(ChatMessageReq req) { | |
| 34 | + return null; | |
| 35 | + } | |
| 36 | + | |
| 37 | + @Override | |
| 38 | + public void delete(Long chatConversationId, Long id) { | |
| 39 | + // 获取登录用户 | |
| 40 | + Long loginUserId = SecurityFrameworkUtils.getLoginUserId(); | |
| 41 | + // 校验 ChatConversation | |
| 42 | + validateChatConversation(chatConversationId, loginUserId); | |
| 43 | + // 删除 | |
| 44 | + aiChatMessageMapper.deleteByConversationAndId(chatConversationId, id); | |
| 45 | + } | |
| 46 | + | |
| 47 | + private AiChatConversationDO validateChatConversation(Long chatConversationId, Long loginUserId) { | |
| 48 | + AiChatConversationDO aiChatConversationDO = aiChatConversationMapper.selectById(chatConversationId); | |
| 49 | + if (aiChatConversationDO == null) { | |
| 50 | + throw ServiceExceptionUtil.exception(ErrorCodeConstants.AI_CHAT_CONTINUE_NOT_EXIST); | |
| 51 | + } | |
| 52 | + if (!aiChatConversationDO.getUserId().equals(loginUserId)) { | |
| 53 | + throw ServiceExceptionUtil.exception(ErrorCodeConstants.AI_CHAT_CONVERSATION_NOT_YOURS); | |
| 54 | + } | |
| 55 | + return aiChatConversationDO; | |
| 56 | + } | |
| 57 | +} | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/vo/ChatMessageListRes.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.vo; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import lombok.Data; | |
| 5 | +import lombok.experimental.Accessors; | |
| 6 | + | |
| 7 | +/** | |
| 8 | + * 看板 message list req | |
| 9 | + * | |
| 10 | + * @author fansili | |
| 11 | + * @time 2024/4/24 17:28 | |
| 12 | + * @since 1.0 | |
| 13 | + */ | |
| 14 | +@Data | |
| 15 | +@Accessors(chain = true) | |
| 16 | +public class ChatMessageListRes { | |
| 17 | + | |
| 18 | + @Schema(description = "编号") | |
| 19 | + private Long id; | |
| 20 | + | |
| 21 | + @Schema(description = "聊天ID,关联到特定的会话或对话") | |
| 22 | + private Long chatConversationId; | |
| 23 | + | |
| 24 | + @Schema(description = "角色ID,用于标识发送消息的用户或系统的身份") | |
| 25 | + private Long userId; | |
| 26 | + | |
| 27 | + @Schema(description = "消息具体内容,存储用户的发言或者系统响应的文字信息") | |
| 28 | + private String message; | |
| 29 | + | |
| 30 | + @Schema(description = "消息类型,枚举值可能包括'system'(系统消息)、'user'(用户消息)和'assistant'(助手消息)") | |
| 31 | + private String messageType; | |
| 32 | + | |
| 33 | + @Schema(description = "在生成消息时采用的Top-K采样大小") | |
| 34 | + private Double topK; | |
| 35 | + | |
| 36 | + @Schema(description = "Top-P核采样方法的概率阈值") | |
| 37 | + private Double topP; | |
| 38 | + | |
| 39 | + @Schema(description = "温度参数,用于调整生成回复的随机性和多样性程度,") | |
| 40 | + private Double temperature; | |
| 41 | + | |
| 42 | +} | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/vo/ChatMessageReq.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.vo; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import jakarta.validation.constraints.NotNull; | |
| 5 | +import lombok.Data; | |
| 6 | +import lombok.experimental.Accessors; | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * chat message list req | |
| 10 | + * | |
| 11 | + * @author fansili | |
| 12 | + * @time 2024/4/14 16:12 | |
| 13 | + * @since 1.0 | |
| 14 | + */ | |
| 15 | +@Data | |
| 16 | +@Accessors(chain = true) | |
| 17 | +public class ChatMessageReq { | |
| 18 | + | |
| 19 | + @Schema(description = "聊天ID,关联到特定的会话或对话") | |
| 20 | + @NotNull | |
| 21 | + private Long chatConversationId; | |
| 22 | + | |
| 23 | +} | ... | ... |