mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-10-31 02:28:03 +08:00 
			
		
		
		
	【代码评审】AI:调整表结构
This commit is contained in:
		| @ -4,6 +4,7 @@ import lombok.AllArgsConstructor; | |||||||
| import lombok.Getter; | import lombok.Getter; | ||||||
|  |  | ||||||
| // TODO done @fansili:1)类注释要加下;2)author 和 time 用 javadoc,@author 和 @since;3)@AllArgsConstructor 使用这个注解,去掉构造方法;4)value 改成 model 字段,然后注释都写下哈;5)message 改成 name,然后注释都写下哈 | // TODO done @fansili:1)类注释要加下;2)author 和 time 用 javadoc,@author 和 @since;3)@AllArgsConstructor 使用这个注解,去掉构造方法;4)value 改成 model 字段,然后注释都写下哈;5)message 改成 name,然后注释都写下哈 | ||||||
|  | // TODO @fan: AiModelEnum 是不是可以缩写成这个哈;所有的模型,都写在这里枚举; | ||||||
| /** | /** | ||||||
|  * @author: fansili |  * @author: fansili | ||||||
|  * @time: 2024/3/4 12:36 |  * @time: 2024/3/4 12:36 | ||||||
| @ -12,24 +13,18 @@ import lombok.Getter; | |||||||
| @AllArgsConstructor | @AllArgsConstructor | ||||||
| public enum AiOpenAiModelEnum { | public enum AiOpenAiModelEnum { | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * open ai 3.5模型 |  | ||||||
|      */ |  | ||||||
|     OPEN_AI_GPT_3_5("gpt-3.5-turbo", "GPT3.5"), |  | ||||||
|     /** |  | ||||||
|      * open ai 4.0 收费模型 |  | ||||||
|      */ |  | ||||||
|     OPEN_AI_GPT_4("gpt-4-turbo", "GPT4") |  | ||||||
|  |  | ||||||
|  |     OPEN_AI_GPT_3_5("gpt-3.5-turbo", "GPT3.5"), | ||||||
|  |     OPEN_AI_GPT_4("gpt-4-turbo", "GPT4") | ||||||
|     ; |     ; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 模型 - 用于参数传递 |      * 模型标志 - 用于参数传递 | ||||||
|      */ |      */ | ||||||
|     private String model; |     private final String model; | ||||||
|     /** |     /** | ||||||
|      * 模型名字 - 用于展示 |      * 模型名字 - 用于展示 | ||||||
|      */ |      */ | ||||||
|     private String name; |     private final String name; | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -0,0 +1,17 @@ | |||||||
|  | package cn.iocoder.yudao.module.ai.controller.admin.chat; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||||||
|  | import io.swagger.v3.oas.annotations.tags.Tag; | ||||||
|  | import lombok.extern.slf4j.Slf4j; | ||||||
|  | import org.springframework.web.bind.annotation.RequestMapping; | ||||||
|  | import org.springframework.web.bind.annotation.RestController; | ||||||
|  |  | ||||||
|  | @Tag(name = "管理后台 - 聊天会话") | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("/ai/chat/conversation") | ||||||
|  | @Slf4j | ||||||
|  | public class AiChatConversationControllerV2 { | ||||||
|  |  | ||||||
|  |     public CommonResult<List<>> | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1 @@ | |||||||
|  | package cn.iocoder.yudao.module.ai.controller.admin.chat.vo; | ||||||
| @ -0,0 +1,4 @@ | |||||||
|  | /** | ||||||
|  |  * TODO 芋艿:站位,无特殊作用 | ||||||
|  |  */ | ||||||
|  | package cn.iocoder.yudao.module.ai.controller.admin; | ||||||
| @ -0,0 +1,4 @@ | |||||||
|  | /** | ||||||
|  |  * TODO 芋艿:站位,无特殊作用 | ||||||
|  |  */ | ||||||
|  | package cn.iocoder.yudao.module.ai.controller.app; | ||||||
| @ -0,0 +1,6 @@ | |||||||
|  | /** | ||||||
|  |  * 提供 RESTful API 给前端: | ||||||
|  |  * 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目 | ||||||
|  |  * 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 | ||||||
|  |  */ | ||||||
|  | package cn.iocoder.yudao.module.ai.controller; | ||||||
| @ -1,6 +1,6 @@ | |||||||
| package cn.iocoder.yudao.module.ai.convert; | package cn.iocoder.yudao.module.ai.convert; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatConversationDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatConversationDO; | ||||||
| import cn.iocoder.yudao.module.ai.vo.AiChatConversationRes; | import cn.iocoder.yudao.module.ai.vo.AiChatConversationRes; | ||||||
| import org.mapstruct.Mapper; | import org.mapstruct.Mapper; | ||||||
| import org.mapstruct.factory.Mappers; | import org.mapstruct.factory.Mappers; | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| package cn.iocoder.yudao.module.ai.convert; | package cn.iocoder.yudao.module.ai.convert; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatMessageDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatMessageDO; | ||||||
| import cn.iocoder.yudao.module.ai.vo.AiChatMessageListRes; | import cn.iocoder.yudao.module.ai.vo.AiChatMessageListRes; | ||||||
| import org.mapstruct.Mapper; | import org.mapstruct.Mapper; | ||||||
| import org.mapstruct.factory.Mappers; | import org.mapstruct.factory.Mappers; | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| package cn.iocoder.yudao.module.ai.convert; | package cn.iocoder.yudao.module.ai.convert; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatModalDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModalDO; | ||||||
| import cn.iocoder.yudao.module.ai.vo.AiChatModalAddReq; | import cn.iocoder.yudao.module.ai.vo.AiChatModalAddReq; | ||||||
| import cn.iocoder.yudao.module.ai.vo.AiChatModalListRes; | import cn.iocoder.yudao.module.ai.vo.AiChatModalListRes; | ||||||
| import cn.iocoder.yudao.module.ai.vo.AiChatModalRes; | import cn.iocoder.yudao.module.ai.vo.AiChatModalRes; | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| package cn.iocoder.yudao.module.ai.convert; | package cn.iocoder.yudao.module.ai.convert; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatRoleDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO; | ||||||
| import cn.iocoder.yudao.module.ai.vo.AiChatRoleAddReq; | import cn.iocoder.yudao.module.ai.vo.AiChatRoleAddReq; | ||||||
| import cn.iocoder.yudao.module.ai.vo.AiChatRoleRes; | import cn.iocoder.yudao.module.ai.vo.AiChatRoleRes; | ||||||
| import cn.iocoder.yudao.module.ai.vo.AiChatRoleUpdateReq; | import cn.iocoder.yudao.module.ai.vo.AiChatRoleUpdateReq; | ||||||
|  | |||||||
| @ -1,47 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.ai.dal.dataobject; |  | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |  | ||||||
| import com.baomidou.mybatisplus.annotation.TableName; |  | ||||||
| import io.swagger.v3.oas.annotations.media.Schema; |  | ||||||
| import lombok.Data; |  | ||||||
| import lombok.experimental.Accessors; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * chat 交谈 |  | ||||||
|  * |  | ||||||
|  * @author fansili |  | ||||||
|  * @time 2024/4/14 17:35 |  | ||||||
|  * @since 1.0 |  | ||||||
|  */ |  | ||||||
| @Data |  | ||||||
| @Accessors(chain = true) |  | ||||||
| @TableName("ai_chat_conversation") |  | ||||||
| public class AiChatConversationDO extends BaseDO { |  | ||||||
|  |  | ||||||
|     @Schema(description = "id") |  | ||||||
|     private Long id; |  | ||||||
|  |  | ||||||
|     @Schema(description = "用户id") |  | ||||||
|     private Long userId; |  | ||||||
|  |  | ||||||
|     @Schema(description = "chat角色Id") |  | ||||||
|     private Long roleId; |  | ||||||
|  |  | ||||||
|     @Schema(description = "chat角色名称") |  | ||||||
|     private String roleName; |  | ||||||
|  |  | ||||||
|     @Schema(description = "模型id") |  | ||||||
|     private Long modalId; |  | ||||||
|  |  | ||||||
|     @Schema(description = "使用的模型") |  | ||||||
|     private String modal; |  | ||||||
|  |  | ||||||
|     @Schema(description = "标题") |  | ||||||
|     private String title; |  | ||||||
|  |  | ||||||
|     @Schema(description = "对话类型(roleChat、userChat)") |  | ||||||
|     private String type; |  | ||||||
|  |  | ||||||
|     @Schema(description = "聊天次数(有程序自动生成)") |  | ||||||
|     private Integer chatCount; |  | ||||||
| } |  | ||||||
| @ -1,62 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.ai.dal.dataobject; |  | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |  | ||||||
| import com.baomidou.mybatisplus.annotation.TableName; |  | ||||||
| import lombok.Data; |  | ||||||
| import lombok.experimental.Accessors; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * ai 聊天 message |  | ||||||
|  * |  | ||||||
|  * @fansili |  | ||||||
|  * @since v1.0 |  | ||||||
|  */ |  | ||||||
| @Data |  | ||||||
| @Accessors(chain = true) |  | ||||||
| @TableName("ai_chat_message") |  | ||||||
| public class AiChatMessageDO extends BaseDO { |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 编号,作为每条聊天记录的唯一标识符 |  | ||||||
|      */ |  | ||||||
|     private Long id; |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 聊天ID,关联到特定的会话或对话 |  | ||||||
|      */ |  | ||||||
|     private Long chatConversationId; |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 角色ID,用于标识发送消息的用户或系统的身份 |  | ||||||
|      */ |  | ||||||
|     private Long userId; |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 消息具体内容,存储用户的发言或者系统响应的文字信息 |  | ||||||
|      */ |  | ||||||
|     private String message; |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 消息类型,枚举值可能包括'system'(系统消息)、'user'(用户消息)和'assistant'(助手消息) |  | ||||||
|      */ |  | ||||||
|     private String messageType; |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 在生成消息时采用的Top-K采样大小, |  | ||||||
|      * 表示模型生成回复时考虑的候选项集合的大小 |  | ||||||
|      */ |  | ||||||
|     private Double topK; |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Top-P核采样方法的概率阈值, |  | ||||||
|      * 在语言模型生成过程中控制采样的过滤标准 |  | ||||||
|      */ |  | ||||||
|     private Double topP; |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 温度参数,用于调整生成回复的随机性和多样性程度, |  | ||||||
|      * 较低的温度值会使输出更收敛于高频词汇,较高的则增加多样性 |  | ||||||
|      */ |  | ||||||
|     private Double temperature; |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @ -1,55 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.ai.dal.dataobject; |  | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |  | ||||||
| import com.baomidou.mybatisplus.annotation.TableName; |  | ||||||
| import lombok.Data; |  | ||||||
| import lombok.experimental.Accessors; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * ai 模型 |  | ||||||
|  * |  | ||||||
|  * @author fansili |  | ||||||
|  * @time 2024/4/24 19:39 |  | ||||||
|  * @since 1.0 |  | ||||||
|  */ |  | ||||||
| @Data |  | ||||||
| @Accessors(chain = true) |  | ||||||
| @TableName("ai_chat_modal") |  | ||||||
| public class AiChatModalDO extends BaseDO { |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 编号 |  | ||||||
|      */ |  | ||||||
|     private Long id; |  | ||||||
|     /** |  | ||||||
|      * 名字 |  | ||||||
|      */ |  | ||||||
|     private String name; |  | ||||||
|     /** |  | ||||||
|      * 类型 |  | ||||||
|      * {@link cn.iocoder.yudao.framework.ai.chatyiyan.YiYanChatModel} |  | ||||||
|      * {@link cn.iocoder.yudao.framework.ai.chatxinghuo.XingHuoChatModel} |  | ||||||
|      */ |  | ||||||
|     private String modal; |  | ||||||
|     /** |  | ||||||
|      * 平台 参考:{@link cn.iocoder.yudao.framework.ai.AiPlatformEnum} |  | ||||||
|      */ |  | ||||||
|     private String platform; |  | ||||||
|     /** |  | ||||||
|      * 图片地址 |  | ||||||
|      */ |  | ||||||
|     private String imageUrl; |  | ||||||
|     /** |  | ||||||
|      * 禁用 0、正常 1、禁用 |  | ||||||
|      */ |  | ||||||
|     private Integer disable; |  | ||||||
|     /** |  | ||||||
|      * 排序 |  | ||||||
|      */ |  | ||||||
|     private Integer sort; |  | ||||||
|     /** |  | ||||||
|      * modal 配置(json) |  | ||||||
|      */ |  | ||||||
|     private String config; |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @ -1,56 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.ai.dal.dataobject; |  | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |  | ||||||
| import com.baomidou.mybatisplus.annotation.IdType; |  | ||||||
| import com.baomidou.mybatisplus.annotation.TableId; |  | ||||||
| import com.baomidou.mybatisplus.annotation.TableName; |  | ||||||
| import lombok.Data; |  | ||||||
| import lombok.experimental.Accessors; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * ai 聊天角色 |  | ||||||
|  * |  | ||||||
|  * @fansili |  | ||||||
|  * @since v1.0 |  | ||||||
|  */ |  | ||||||
| @Data |  | ||||||
| @Accessors(chain = true) |  | ||||||
| @TableName("ai_chat_role") |  | ||||||
| public class AiChatRoleDO extends BaseDO { |  | ||||||
|     /** |  | ||||||
|      * 编号,表示聊天角色在数据库中的唯一标识符 |  | ||||||
|      */ |  | ||||||
|     @TableId(type = IdType.AUTO) |  | ||||||
|     private Long id; |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 用户ID,关联到使用该聊天角色的用户 |  | ||||||
|      */ |  | ||||||
|     private Long userId; |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 角色名,角色的显示名称 |  | ||||||
|      */ |  | ||||||
|     private String name; |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 角色介绍,详细描述角色的功能或用途 |  | ||||||
|      */ |  | ||||||
|     private String introduce; |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 分类,角色所属的类别,如娱乐、创作等 |  | ||||||
|      */ |  | ||||||
|     private String classify; |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 是否开启 open、close |  | ||||||
|      */ |  | ||||||
|     private String enable; |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 角色的使用次数统计 |  | ||||||
|      */ |  | ||||||
|     private Integer useCount; |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @ -0,0 +1,86 @@ | |||||||
|  | package cn.iocoder.yudao.module.ai.dal.dataobject.chat; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||||
|  | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModalDO; | ||||||
|  | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO; | ||||||
|  | import cn.iocoder.yudao.module.ai.enums.AiOpenAiModelEnum; | ||||||
|  | import com.baomidou.mybatisplus.annotation.KeySequence; | ||||||
|  | import com.baomidou.mybatisplus.annotation.TableId; | ||||||
|  | import com.baomidou.mybatisplus.annotation.TableName; | ||||||
|  | import lombok.*; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * AI Chat 会话 DO | ||||||
|  |  * | ||||||
|  |  * 用户每次发起 Chat 聊天时,会创建一个 {@link AiChatConversationDO} 对象,将它的消息关联在一起 | ||||||
|  |  * | ||||||
|  |  * @author fansili | ||||||
|  |  * @since 2024/4/14 17:35 | ||||||
|  |  */ | ||||||
|  | @TableName("ai_chat_conversation") | ||||||
|  | @KeySequence("ai_chat_conversation_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @Builder | ||||||
|  | @NoArgsConstructor | ||||||
|  | @AllArgsConstructor | ||||||
|  | public class AiChatConversationDO extends BaseDO { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * ID 编号,自增 | ||||||
|  |      */ | ||||||
|  |     @TableId | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 用户编号 | ||||||
|  |      * | ||||||
|  |      * 关联 AdminUserDO 的 userId 字段 | ||||||
|  |      */ | ||||||
|  |     private Long userId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 标题 | ||||||
|  |      * | ||||||
|  |      * 默认由系统自动生成,可用户手动修改 | ||||||
|  |      */ | ||||||
|  |     private String title; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 角色编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link AiChatRoleDO#getId()} | ||||||
|  |      */ | ||||||
|  |     private Long roleId; | ||||||
|  |     /** | ||||||
|  |      * 模型标志 | ||||||
|  |      * | ||||||
|  |      * 枚举 {@link AiOpenAiModelEnum} | ||||||
|  |      */ | ||||||
|  |     private String model; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 模型编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link AiChatModalDO#getId()} 字段 | ||||||
|  |      */ | ||||||
|  |     private Long modelId; | ||||||
|  |  | ||||||
|  |     // ========== 会话配置 ========== | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 温度参数 | ||||||
|  |      * | ||||||
|  |      * 用于调整生成回复的随机性和多样性程度:较低的温度值会使输出更收敛于高频词汇,较高的则增加多样性 | ||||||
|  |      */ | ||||||
|  |     private Double temperature; | ||||||
|  |     /** | ||||||
|  |      * 上下文数量 | ||||||
|  |      */ | ||||||
|  |     private Integer contextCount; | ||||||
|  |     /** | ||||||
|  |      * 单条回复的 Token 数量 | ||||||
|  |      */ | ||||||
|  |     private Integer maxTokens; | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,109 @@ | |||||||
|  | package cn.iocoder.yudao.module.ai.dal.dataobject.chat; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.ai.chat.messages.MessageType; | ||||||
|  | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||||
|  | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModalDO; | ||||||
|  | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO; | ||||||
|  | import cn.iocoder.yudao.module.ai.enums.AiOpenAiModelEnum; | ||||||
|  | import com.baomidou.mybatisplus.annotation.KeySequence; | ||||||
|  | import com.baomidou.mybatisplus.annotation.TableName; | ||||||
|  | import lombok.*; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * AI Chat 消息 DO | ||||||
|  |  * | ||||||
|  |  * @since 2024/4/14 17:35 | ||||||
|  |  * @since 2024/4/14 17:35 | ||||||
|  |  */ | ||||||
|  | @TableName("ai_chat_message") | ||||||
|  | @KeySequence("ai_chat_conversation_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @Builder | ||||||
|  | @NoArgsConstructor | ||||||
|  | @AllArgsConstructor | ||||||
|  | public class AiChatMessageDO extends BaseDO { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 编号,作为每条聊天记录的唯一标识符 | ||||||
|  |      */ | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 会话编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link AiChatConversationDO#getId()} | ||||||
|  |      */ | ||||||
|  |     private Long conversationId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 消息类型 | ||||||
|  |      * | ||||||
|  |      * 也等价于 OpenAPI 的 role 字段 | ||||||
|  |      * | ||||||
|  |      * 枚举 {@link MessageType} | ||||||
|  |      */ | ||||||
|  |     private String type; | ||||||
|  |     /** | ||||||
|  |      * 用户编号 | ||||||
|  |      * | ||||||
|  |      * 仅当 user 发送时非空 | ||||||
|  |      * | ||||||
|  |      * 关联 AdminUserDO 的 userId 字段 | ||||||
|  |      */ | ||||||
|  |     private Long userId; | ||||||
|  |     /** | ||||||
|  |      * 角色编号 | ||||||
|  |      * | ||||||
|  |      * 仅当 assistant 回复时非空 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link AiChatRoleDO#getId()} 字段 | ||||||
|  |      */ | ||||||
|  |     private Long roleId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 模型标志 | ||||||
|  |      * | ||||||
|  |      * 枚举 {@link AiOpenAiModelEnum} | ||||||
|  |      */ | ||||||
|  |     private String model; | ||||||
|  |     /** | ||||||
|  |      * 模型编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link AiChatModalDO#getId()} 字段 | ||||||
|  |      */ | ||||||
|  |     private Long modelId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 聊天内容 | ||||||
|  |      */ | ||||||
|  |     private String content; | ||||||
|  |     /** | ||||||
|  |      * 消耗 Token 数量 | ||||||
|  |      */ | ||||||
|  |     private Integer usedTokens; | ||||||
|  |  | ||||||
|  |     // TODO 芋艿:是否作为上下文语料?use_context,待定 | ||||||
|  |  | ||||||
|  |     // ========== 会话配置 ========== | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 上下文数量 | ||||||
|  |      * | ||||||
|  |      * 冗余 {@link AiChatConversationDO#getContextCount()} | ||||||
|  |      */ | ||||||
|  |     private Integer contextCount; | ||||||
|  |     /** | ||||||
|  |      * 温度参数 | ||||||
|  |      * | ||||||
|  |      * 冗余 {@link AiChatConversationDO#getTemperature()} | ||||||
|  |      */ | ||||||
|  |     private Double temperature; | ||||||
|  |     /** | ||||||
|  |      * 单条回复的 Token 数量 | ||||||
|  |      * | ||||||
|  |      * 冗余 {@link AiChatConversationDO#getMaxTokens()} | ||||||
|  |      */ | ||||||
|  |     private Integer maxTokens; | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -1,4 +1,4 @@ | |||||||
| package cn.iocoder.yudao.module.ai.dal.dataobject; | package cn.iocoder.yudao.module.ai.dal.dataobject.image; | ||||||
| 
 | 
 | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||||
| import com.baomidou.mybatisplus.annotation.IdType; | import com.baomidou.mybatisplus.annotation.IdType; | ||||||
| @ -0,0 +1,59 @@ | |||||||
|  | package cn.iocoder.yudao.module.ai.dal.dataobject.model; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.ai.AiPlatformEnum; | ||||||
|  | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||||
|  | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||||
|  | import com.baomidou.mybatisplus.annotation.KeySequence; | ||||||
|  | import com.baomidou.mybatisplus.annotation.TableId; | ||||||
|  | import com.baomidou.mybatisplus.annotation.TableName; | ||||||
|  | import lombok.*; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * AI API 秘钥 DO | ||||||
|  |  * | ||||||
|  |  * @author 芋道源码 | ||||||
|  |  */ | ||||||
|  | @TableName("ai_api_key") | ||||||
|  | @KeySequence("ai_chat_conversation_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @Builder | ||||||
|  | @NoArgsConstructor | ||||||
|  | @AllArgsConstructor | ||||||
|  | public class AiApiKeyDO extends BaseDO { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 编号 | ||||||
|  |      */ | ||||||
|  |     @TableId | ||||||
|  |     private Long id; | ||||||
|  |     /** | ||||||
|  |      * 名称 | ||||||
|  |      */ | ||||||
|  |     private String name; | ||||||
|  |     /** | ||||||
|  |      * 平台 | ||||||
|  |      * | ||||||
|  |      * 枚举 {@link AiPlatformEnum} | ||||||
|  |      */ | ||||||
|  |     private String platform; | ||||||
|  |     /** | ||||||
|  |      * 用途 | ||||||
|  |      * | ||||||
|  |      * TODO 芋艿:枚举;chat、image | ||||||
|  |      */ | ||||||
|  |     private Integer type; | ||||||
|  |     /** | ||||||
|  |      * API 地址 | ||||||
|  |      */ | ||||||
|  |     private String url; | ||||||
|  |     /** | ||||||
|  |      * 状态 | ||||||
|  |      * | ||||||
|  |      * 枚举 {@link CommonStatusEnum} | ||||||
|  |      */ | ||||||
|  |     private Integer status; | ||||||
|  |  | ||||||
|  |     // TODO 芋艿:proxyUrl 代理地址 | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,75 @@ | |||||||
|  | package cn.iocoder.yudao.module.ai.dal.dataobject.model; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.ai.AiPlatformEnum; | ||||||
|  | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||||
|  | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||||
|  | import com.baomidou.mybatisplus.annotation.TableId; | ||||||
|  | import com.baomidou.mybatisplus.annotation.TableName; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.experimental.Accessors; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * AI 聊天模型 DO | ||||||
|  |  * | ||||||
|  |  * @author fansili | ||||||
|  |  * @time 2024/4/24 19:39 | ||||||
|  |  * @since 1.0 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @Accessors(chain = true) | ||||||
|  | @TableName("ai_chat_modal") | ||||||
|  | public class AiChatModalDO extends BaseDO { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 编号 | ||||||
|  |      */ | ||||||
|  |     @TableId | ||||||
|  |     private Long id; | ||||||
|  |     /** | ||||||
|  |      * API 秘钥编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link AiApiKeyDO#getId()} | ||||||
|  |      */ | ||||||
|  |     private Long key_id; | ||||||
|  |     /** | ||||||
|  |      * 模型名称 | ||||||
|  |      */ | ||||||
|  |     private String name; | ||||||
|  |     /** | ||||||
|  |      * 模型标志 | ||||||
|  |      */ | ||||||
|  |     private String model; | ||||||
|  |     /** | ||||||
|  |      * 平台 | ||||||
|  |      * | ||||||
|  |      * 枚举 {@link AiPlatformEnum} | ||||||
|  |      */ | ||||||
|  |     private String platform; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 排序值 | ||||||
|  |      */ | ||||||
|  |     private Integer sort; | ||||||
|  |     /** | ||||||
|  |      * 状态 | ||||||
|  |      * | ||||||
|  |      * 枚举 {@link CommonStatusEnum} | ||||||
|  |      */ | ||||||
|  |     private Integer status; | ||||||
|  |  | ||||||
|  |     // ========== 会话配置 ========== | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 温度参数 | ||||||
|  |      * | ||||||
|  |      * 用于调整生成回复的随机性和多样性程度:较低的温度值会使输出更收敛于高频词汇,较高的则增加多样性 | ||||||
|  |      */ | ||||||
|  |     private Double temperature; | ||||||
|  |     /** | ||||||
|  |      * 单条回复的 Token 数量 | ||||||
|  |      */ | ||||||
|  |     private Integer maxTokens; | ||||||
|  |  | ||||||
|  |     // TODO 芋艿:到底使用 max_context、还是 contextCount,待定!一个是轮次,一个是长度数量;貌似轮次更常用一点; | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,82 @@ | |||||||
|  | package cn.iocoder.yudao.module.ai.dal.dataobject.model; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||||
|  | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||||
|  | import com.baomidou.mybatisplus.annotation.IdType; | ||||||
|  | import com.baomidou.mybatisplus.annotation.TableId; | ||||||
|  | import com.baomidou.mybatisplus.annotation.TableName; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.experimental.Accessors; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * ai 聊天角色 | ||||||
|  |  * | ||||||
|  |  * @fansili | ||||||
|  |  * @since v1.0 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @Accessors(chain = true) | ||||||
|  | @TableName("ai_chat_role") | ||||||
|  | public class AiChatRoleDO extends BaseDO { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 编号 | ||||||
|  |      */ | ||||||
|  |     @TableId | ||||||
|  |     private Long id; | ||||||
|  |     /** | ||||||
|  |      * 角色名称 | ||||||
|  |      */ | ||||||
|  |     private String name; | ||||||
|  |     /** | ||||||
|  |      * 角色头像 | ||||||
|  |      */ | ||||||
|  |     private String avatar; | ||||||
|  |     /** | ||||||
|  |      * 角色分类 | ||||||
|  |      */ | ||||||
|  |     private String category; | ||||||
|  |     /** | ||||||
|  |      * 角色描述 | ||||||
|  |      */ | ||||||
|  |     private String description; | ||||||
|  |     /** | ||||||
|  |      * 角色欢迎语 | ||||||
|  |      */ | ||||||
|  |     private String welcomeMessage; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 用户编号 | ||||||
|  |      * | ||||||
|  |      * 关联 AdminUserDO 的 userId 字段 | ||||||
|  |      */ | ||||||
|  |     private Long userId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 模型编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link AiChatModalDO#getId()} 字段 | ||||||
|  |      */ | ||||||
|  |     private String modelId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 是否公开 | ||||||
|  |      * | ||||||
|  |      * true - 公开;false - 私有 | ||||||
|  |      */ | ||||||
|  |     private Boolean publicStatus; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 排序值 | ||||||
|  |      */ | ||||||
|  |     private Integer sort; | ||||||
|  |     /** | ||||||
|  |      * 状态 | ||||||
|  |      * | ||||||
|  |      * 枚举 {@link CommonStatusEnum} | ||||||
|  |      */ | ||||||
|  |     private Integer status; | ||||||
|  |  | ||||||
|  |     // TODO 芋艿:要不要加一个 context,内置的上下文 | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -5,7 +5,7 @@ import cn.hutool.core.util.StrUtil; | |||||||
| import cn.iocoder.yudao.framework.common.pojo.PageParam; | import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatConversationDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatConversationDO; | ||||||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||||
| import org.apache.ibatis.annotations.Mapper; | import org.apache.ibatis.annotations.Mapper; | ||||||
| import org.apache.ibatis.annotations.Param; | import org.apache.ibatis.annotations.Param; | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ package cn.iocoder.yudao.module.ai.mapper; | |||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatMessageDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatMessageDO; | ||||||
| import org.apache.ibatis.annotations.Mapper; | import org.apache.ibatis.annotations.Mapper; | ||||||
| import org.springframework.stereotype.Repository; | import org.springframework.stereotype.Repository; | ||||||
|  |  | ||||||
| @ -24,7 +24,7 @@ public interface AiChatMessageMapper extends BaseMapperX<AiChatMessageDO> { | |||||||
|      */ |      */ | ||||||
|     default int deleteByConversationAndId(Long chatConversationId, Long id) { |     default int deleteByConversationAndId(Long chatConversationId, Long id) { | ||||||
|         return this.delete(new LambdaQueryWrapperX<AiChatMessageDO>() |         return this.delete(new LambdaQueryWrapperX<AiChatMessageDO>() | ||||||
|                 .eq(AiChatMessageDO::getChatConversationId, chatConversationId) |                 .eq(AiChatMessageDO::getConversationId, chatConversationId) | ||||||
|                 .eq(AiChatMessageDO::getId, id) |                 .eq(AiChatMessageDO::getId, id) | ||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -5,7 +5,6 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; | |||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatModalDO; |  | ||||||
| import org.apache.ibatis.annotations.Mapper; | import org.apache.ibatis.annotations.Mapper; | ||||||
| import org.springframework.stereotype.Repository; | import org.springframework.stereotype.Repository; | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| package cn.iocoder.yudao.module.ai.mapper; | package cn.iocoder.yudao.module.ai.mapper; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatRoleDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO; | ||||||
| import org.apache.ibatis.annotations.Mapper; | import org.apache.ibatis.annotations.Mapper; | ||||||
| import org.springframework.stereotype.Repository; | import org.springframework.stereotype.Repository; | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| package cn.iocoder.yudao.module.ai.mapper; | package cn.iocoder.yudao.module.ai.mapper; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiImageDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO; | ||||||
| import org.apache.ibatis.annotations.Mapper; | import org.apache.ibatis.annotations.Mapper; | ||||||
| import org.springframework.stereotype.Repository; | import org.springframework.stereotype.Repository; | ||||||
|  |  | ||||||
|  | |||||||
| @ -4,8 +4,6 @@ import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; | |||||||
| import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | ||||||
| import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | ||||||
| import cn.iocoder.yudao.module.ai.convert.AiChatConversationConvert; | import cn.iocoder.yudao.module.ai.convert.AiChatConversationConvert; | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatConversationDO; |  | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatModalDO; |  | ||||||
| import cn.iocoder.yudao.module.ai.enums.AiChatConversationTypeEnum; | import cn.iocoder.yudao.module.ai.enums.AiChatConversationTypeEnum; | ||||||
| import cn.iocoder.yudao.module.ai.enums.AiChatModalDisableEnum; | import cn.iocoder.yudao.module.ai.enums.AiChatModalDisableEnum; | ||||||
| import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper; | import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper; | ||||||
|  | |||||||
| @ -6,8 +6,8 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |||||||
| import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | ||||||
| import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | ||||||
| import cn.iocoder.yudao.module.ai.convert.AiChatMessageConvert; | import cn.iocoder.yudao.module.ai.convert.AiChatMessageConvert; | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatConversationDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatConversationDO; | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatMessageDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatMessageDO; | ||||||
| import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper; | import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper; | ||||||
| import cn.iocoder.yudao.module.ai.mapper.AiChatMessageMapper; | import cn.iocoder.yudao.module.ai.mapper.AiChatMessageMapper; | ||||||
| import cn.iocoder.yudao.module.ai.service.AiChatMessageService; | import cn.iocoder.yudao.module.ai.service.AiChatMessageService; | ||||||
| @ -38,7 +38,7 @@ public class AiChatMessageServiceImpl implements AiChatMessageService { | |||||||
|     public PageResult<AiChatMessageListRes> list(AiChatMessageReq req) { |     public PageResult<AiChatMessageListRes> list(AiChatMessageReq req) { | ||||||
|         // 查询 |         // 查询 | ||||||
|         LambdaQueryWrapperX<AiChatMessageDO> queryWrapperX = new LambdaQueryWrapperX<>(); |         LambdaQueryWrapperX<AiChatMessageDO> queryWrapperX = new LambdaQueryWrapperX<>(); | ||||||
|         queryWrapperX.eq(AiChatMessageDO::getChatConversationId, req.getChatConversationId()); |         queryWrapperX.eq(AiChatMessageDO::getConversationId, req.getChatConversationId()); | ||||||
|         // 默认排序 |         // 默认排序 | ||||||
|         queryWrapperX.orderByDesc(AiChatMessageDO::getId); |         queryWrapperX.orderByDesc(AiChatMessageDO::getId); | ||||||
|         PageResult<AiChatMessageDO> pageResult = aiChatMessageMapper.selectPage(req, queryWrapperX); |         PageResult<AiChatMessageDO> pageResult = aiChatMessageMapper.selectPage(req, queryWrapperX); | ||||||
|  | |||||||
| @ -12,7 +12,6 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | |||||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||||
| import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | ||||||
| import cn.iocoder.yudao.module.ai.convert.AiChatModalConvert; | import cn.iocoder.yudao.module.ai.convert.AiChatModalConvert; | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatModalDO; |  | ||||||
| import cn.iocoder.yudao.module.ai.dal.vo.AiChatModalChatConfigVO; | import cn.iocoder.yudao.module.ai.dal.vo.AiChatModalChatConfigVO; | ||||||
| import cn.iocoder.yudao.module.ai.dal.vo.AiChatModalConfigVO; | import cn.iocoder.yudao.module.ai.dal.vo.AiChatModalConfigVO; | ||||||
| import cn.iocoder.yudao.module.ai.dal.vo.AiChatModalDallConfigVO; | import cn.iocoder.yudao.module.ai.dal.vo.AiChatModalDallConfigVO; | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |||||||
| import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | ||||||
| import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | ||||||
| import cn.iocoder.yudao.module.ai.convert.AiChatRoleConvert; | import cn.iocoder.yudao.module.ai.convert.AiChatRoleConvert; | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatRoleDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO; | ||||||
| import cn.iocoder.yudao.module.ai.enums.AiChatRoleClassifyEnum; | import cn.iocoder.yudao.module.ai.enums.AiChatRoleClassifyEnum; | ||||||
| import cn.iocoder.yudao.module.ai.enums.AiChatRoleEnableEnum; | import cn.iocoder.yudao.module.ai.enums.AiChatRoleEnableEnum; | ||||||
| import cn.iocoder.yudao.module.ai.mapper.AiChatRoleMapper; | import cn.iocoder.yudao.module.ai.mapper.AiChatRoleMapper; | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ import cn.iocoder.yudao.framework.ai.chat.prompt.Prompt; | |||||||
| import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | ||||||
| import cn.iocoder.yudao.module.ai.config.AiChatClientFactory; | import cn.iocoder.yudao.module.ai.config.AiChatClientFactory; | ||||||
| import cn.iocoder.yudao.module.ai.controller.Utf8SseEmitter; | import cn.iocoder.yudao.module.ai.controller.Utf8SseEmitter; | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatMessageDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatMessageDO; | ||||||
| import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper; | import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper; | ||||||
| import cn.iocoder.yudao.module.ai.mapper.AiChatMessageMapper; | import cn.iocoder.yudao.module.ai.mapper.AiChatMessageMapper; | ||||||
| import cn.iocoder.yudao.module.ai.mapper.AiChatRoleMapper; | import cn.iocoder.yudao.module.ai.mapper.AiChatRoleMapper; | ||||||
| @ -89,7 +89,7 @@ public class AiChatServiceImpl implements AiChatService { | |||||||
|         aiChatMessageMapper.insert( |         aiChatMessageMapper.insert( | ||||||
|                 new AiChatMessageDO() |                 new AiChatMessageDO() | ||||||
|                         .setId(null) |                         .setId(null) | ||||||
|                         .setChatConversationId(chatConversationId) |                         .setConversationId(chatConversationId) | ||||||
|                         .setUserId(loginUserId) |                         .setUserId(loginUserId) | ||||||
|                         .setMessage(req.getPrompt()) |                         .setMessage(req.getPrompt()) | ||||||
|                         .setMessageType(MessageType.USER.getValue()) |                         .setMessageType(MessageType.USER.getValue()) | ||||||
| @ -107,7 +107,7 @@ public class AiChatServiceImpl implements AiChatService { | |||||||
|         aiChatMessageMapper.insert( |         aiChatMessageMapper.insert( | ||||||
|                 new AiChatMessageDO() |                 new AiChatMessageDO() | ||||||
|                         .setId(null) |                         .setId(null) | ||||||
|                         .setChatConversationId(chatConversationId) |                         .setConversationId(chatConversationId) | ||||||
|                         .setUserId(loginUserId) |                         .setUserId(loginUserId) | ||||||
|                         .setMessage(systemPrompts) |                         .setMessage(systemPrompts) | ||||||
|                         .setMessageType(MessageType.SYSTEM.getValue()) |                         .setMessageType(MessageType.SYSTEM.getValue()) | ||||||
|  | |||||||
| @ -15,7 +15,7 @@ import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; | |||||||
| import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | ||||||
| import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | ||||||
| import cn.iocoder.yudao.module.ai.controller.Utf8SseEmitter; | import cn.iocoder.yudao.module.ai.controller.Utf8SseEmitter; | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiImageDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO; | ||||||
| import cn.iocoder.yudao.module.ai.enums.AiChatDrawingStatusEnum; | import cn.iocoder.yudao.module.ai.enums.AiChatDrawingStatusEnum; | ||||||
| import cn.iocoder.yudao.module.ai.mapper.AiImageMapper; | import cn.iocoder.yudao.module.ai.mapper.AiImageMapper; | ||||||
| import cn.iocoder.yudao.module.ai.service.AiImageService; | import cn.iocoder.yudao.module.ai.service.AiImageService; | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ import cn.hutool.core.util.StrUtil; | |||||||
| import cn.iocoder.yudao.framework.ai.midjourney.MidjourneyMessage; | import cn.iocoder.yudao.framework.ai.midjourney.MidjourneyMessage; | ||||||
| import cn.iocoder.yudao.framework.ai.midjourney.constants.MidjourneyGennerateStatusEnum; | import cn.iocoder.yudao.framework.ai.midjourney.constants.MidjourneyGennerateStatusEnum; | ||||||
| import cn.iocoder.yudao.framework.ai.midjourney.webSocket.MidjourneyMessageHandler; | import cn.iocoder.yudao.framework.ai.midjourney.webSocket.MidjourneyMessageHandler; | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiImageDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO; | ||||||
| import cn.iocoder.yudao.module.ai.enums.AiChatDrawingStatusEnum; | import cn.iocoder.yudao.module.ai.enums.AiChatDrawingStatusEnum; | ||||||
| import cn.iocoder.yudao.module.ai.mapper.AiImageMapper; | import cn.iocoder.yudao.module.ai.mapper.AiImageMapper; | ||||||
| import com.alibaba.fastjson2.JSON; | import com.alibaba.fastjson2.JSON; | ||||||
|  | |||||||
| @ -1,6 +1,5 @@ | |||||||
| package cn.iocoder.yudao.module.ai.vo; | package cn.iocoder.yudao.module.ai.vo; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatModalDO; |  | ||||||
| import io.swagger.v3.oas.annotations.media.Schema; | import io.swagger.v3.oas.annotations.media.Schema; | ||||||
| import lombok.Data; | import lombok.Data; | ||||||
| import lombok.experimental.Accessors; | import lombok.experimental.Accessors; | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 zhijiantianya@gmail.com
					zhijiantianya@gmail.com