Commit e9cbee9d7ee593ad793b2a77a688616c61c7907b
1 parent
c0470dca
【代码评审】AI:调整表结构
Showing
31 changed files
with
389 additions
and
176 deletions
yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/AiOpenAiModelEnum.java
| @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; | @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; | ||
| 4 | import lombok.Getter; | 4 | import lombok.Getter; |
| 5 | 5 | ||
| 6 | // TODO done @fansili:1)类注释要加下;2)author 和 time 用 javadoc,@author 和 @since;3)@AllArgsConstructor 使用这个注解,去掉构造方法;4)value 改成 model 字段,然后注释都写下哈;5)message 改成 name,然后注释都写下哈 | 6 | // TODO done @fansili:1)类注释要加下;2)author 和 time 用 javadoc,@author 和 @since;3)@AllArgsConstructor 使用这个注解,去掉构造方法;4)value 改成 model 字段,然后注释都写下哈;5)message 改成 name,然后注释都写下哈 |
| 7 | +// TODO @fan: AiModelEnum 是不是可以缩写成这个哈;所有的模型,都写在这里枚举; | ||
| 7 | /** | 8 | /** |
| 8 | * @author: fansili | 9 | * @author: fansili |
| 9 | * @time: 2024/3/4 12:36 | 10 | * @time: 2024/3/4 12:36 |
| @@ -12,24 +13,18 @@ import lombok.Getter; | @@ -12,24 +13,18 @@ import lombok.Getter; | ||
| 12 | @AllArgsConstructor | 13 | @AllArgsConstructor |
| 13 | public enum AiOpenAiModelEnum { | 14 | public enum AiOpenAiModelEnum { |
| 14 | 15 | ||
| 15 | - /** | ||
| 16 | - * open ai 3.5模型 | ||
| 17 | - */ | 16 | + |
| 18 | OPEN_AI_GPT_3_5("gpt-3.5-turbo", "GPT3.5"), | 17 | OPEN_AI_GPT_3_5("gpt-3.5-turbo", "GPT3.5"), |
| 19 | - /** | ||
| 20 | - * open ai 4.0 收费模型 | ||
| 21 | - */ | ||
| 22 | OPEN_AI_GPT_4("gpt-4-turbo", "GPT4") | 18 | OPEN_AI_GPT_4("gpt-4-turbo", "GPT4") |
| 23 | - | ||
| 24 | ; | 19 | ; |
| 25 | 20 | ||
| 26 | /** | 21 | /** |
| 27 | - * 模型 - 用于参数传递 | 22 | + * 模型标志 - 用于参数传递 |
| 28 | */ | 23 | */ |
| 29 | - private String model; | 24 | + private final String model; |
| 30 | /** | 25 | /** |
| 31 | * 模型名字 - 用于展示 | 26 | * 模型名字 - 用于展示 |
| 32 | */ | 27 | */ |
| 33 | - private String name; | 28 | + private final String name; |
| 34 | 29 | ||
| 35 | } | 30 | } |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/AiChatConversationControllerV2.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.controller.admin.chat; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 4 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 5 | +import lombok.extern.slf4j.Slf4j; | ||
| 6 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 7 | +import org.springframework.web.bind.annotation.RestController; | ||
| 8 | + | ||
| 9 | +@Tag(name = "管理后台 - 聊天会话") | ||
| 10 | +@RestController | ||
| 11 | +@RequestMapping("/ai/chat/conversation") | ||
| 12 | +@Slf4j | ||
| 13 | +public class AiChatConversationControllerV2 { | ||
| 14 | + | ||
| 15 | + public CommonResult<List<>> | ||
| 16 | + | ||
| 17 | +} |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/package-info.java
0 → 100644
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/package-info.java
0 → 100644
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/app/package-info.java
0 → 100644
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/package-info.java
0 → 100644
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/convert/AiChatConversationConvert.java
| 1 | package cn.iocoder.yudao.module.ai.convert; | 1 | package cn.iocoder.yudao.module.ai.convert; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatConversationDO; | 3 | +import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatConversationDO; |
| 4 | import cn.iocoder.yudao.module.ai.vo.AiChatConversationRes; | 4 | import cn.iocoder.yudao.module.ai.vo.AiChatConversationRes; |
| 5 | import org.mapstruct.Mapper; | 5 | import org.mapstruct.Mapper; |
| 6 | import org.mapstruct.factory.Mappers; | 6 | import org.mapstruct.factory.Mappers; |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/convert/AiChatMessageConvert.java
| 1 | package cn.iocoder.yudao.module.ai.convert; | 1 | package cn.iocoder.yudao.module.ai.convert; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatMessageDO; | 3 | +import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatMessageDO; |
| 4 | import cn.iocoder.yudao.module.ai.vo.AiChatMessageListRes; | 4 | import cn.iocoder.yudao.module.ai.vo.AiChatMessageListRes; |
| 5 | import org.mapstruct.Mapper; | 5 | import org.mapstruct.Mapper; |
| 6 | import org.mapstruct.factory.Mappers; | 6 | import org.mapstruct.factory.Mappers; |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/convert/AiChatModalConvert.java
| 1 | package cn.iocoder.yudao.module.ai.convert; | 1 | package cn.iocoder.yudao.module.ai.convert; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatModalDO; | 3 | +import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModalDO; |
| 4 | import cn.iocoder.yudao.module.ai.vo.AiChatModalAddReq; | 4 | import cn.iocoder.yudao.module.ai.vo.AiChatModalAddReq; |
| 5 | import cn.iocoder.yudao.module.ai.vo.AiChatModalListRes; | 5 | import cn.iocoder.yudao.module.ai.vo.AiChatModalListRes; |
| 6 | import cn.iocoder.yudao.module.ai.vo.AiChatModalRes; | 6 | import cn.iocoder.yudao.module.ai.vo.AiChatModalRes; |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/convert/AiChatRoleConvert.java
| 1 | package cn.iocoder.yudao.module.ai.convert; | 1 | package cn.iocoder.yudao.module.ai.convert; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatRoleDO; | 3 | +import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO; |
| 4 | import cn.iocoder.yudao.module.ai.vo.AiChatRoleAddReq; | 4 | import cn.iocoder.yudao.module.ai.vo.AiChatRoleAddReq; |
| 5 | import cn.iocoder.yudao.module.ai.vo.AiChatRoleRes; | 5 | import cn.iocoder.yudao.module.ai.vo.AiChatRoleRes; |
| 6 | import cn.iocoder.yudao.module.ai.vo.AiChatRoleUpdateReq; | 6 | import cn.iocoder.yudao.module.ai.vo.AiChatRoleUpdateReq; |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/AiChatConversationDO.java deleted
| 1 | -package cn.iocoder.yudao.module.ai.dal.dataobject; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 4 | -import com.baomidou.mybatisplus.annotation.TableName; | ||
| 5 | -import io.swagger.v3.oas.annotations.media.Schema; | ||
| 6 | -import lombok.Data; | ||
| 7 | -import lombok.experimental.Accessors; | ||
| 8 | - | ||
| 9 | -/** | ||
| 10 | - * chat 交谈 | ||
| 11 | - * | ||
| 12 | - * @author fansili | ||
| 13 | - * @time 2024/4/14 17:35 | ||
| 14 | - * @since 1.0 | ||
| 15 | - */ | ||
| 16 | -@Data | ||
| 17 | -@Accessors(chain = true) | ||
| 18 | -@TableName("ai_chat_conversation") | ||
| 19 | -public class AiChatConversationDO extends BaseDO { | ||
| 20 | - | ||
| 21 | - @Schema(description = "id") | ||
| 22 | - private Long id; | ||
| 23 | - | ||
| 24 | - @Schema(description = "用户id") | ||
| 25 | - private Long userId; | ||
| 26 | - | ||
| 27 | - @Schema(description = "chat角色Id") | ||
| 28 | - private Long roleId; | ||
| 29 | - | ||
| 30 | - @Schema(description = "chat角色名称") | ||
| 31 | - private String roleName; | ||
| 32 | - | ||
| 33 | - @Schema(description = "模型id") | ||
| 34 | - private Long modalId; | ||
| 35 | - | ||
| 36 | - @Schema(description = "使用的模型") | ||
| 37 | - private String modal; | ||
| 38 | - | ||
| 39 | - @Schema(description = "标题") | ||
| 40 | - private String title; | ||
| 41 | - | ||
| 42 | - @Schema(description = "对话类型(roleChat、userChat)") | ||
| 43 | - private String type; | ||
| 44 | - | ||
| 45 | - @Schema(description = "聊天次数(有程序自动生成)") | ||
| 46 | - private Integer chatCount; | ||
| 47 | -} |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/AiChatMessageDO.java deleted
| 1 | -package cn.iocoder.yudao.module.ai.dal.dataobject; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 4 | -import com.baomidou.mybatisplus.annotation.TableName; | ||
| 5 | -import lombok.Data; | ||
| 6 | -import lombok.experimental.Accessors; | ||
| 7 | - | ||
| 8 | -/** | ||
| 9 | - * ai 聊天 message | ||
| 10 | - * | ||
| 11 | - * @fansili | ||
| 12 | - * @since v1.0 | ||
| 13 | - */ | ||
| 14 | -@Data | ||
| 15 | -@Accessors(chain = true) | ||
| 16 | -@TableName("ai_chat_message") | ||
| 17 | -public class AiChatMessageDO extends BaseDO { | ||
| 18 | - | ||
| 19 | - /** | ||
| 20 | - * 编号,作为每条聊天记录的唯一标识符 | ||
| 21 | - */ | ||
| 22 | - private Long id; | ||
| 23 | - | ||
| 24 | - /** | ||
| 25 | - * 聊天ID,关联到特定的会话或对话 | ||
| 26 | - */ | ||
| 27 | - private Long chatConversationId; | ||
| 28 | - | ||
| 29 | - /** | ||
| 30 | - * 角色ID,用于标识发送消息的用户或系统的身份 | ||
| 31 | - */ | ||
| 32 | - private Long userId; | ||
| 33 | - | ||
| 34 | - /** | ||
| 35 | - * 消息具体内容,存储用户的发言或者系统响应的文字信息 | ||
| 36 | - */ | ||
| 37 | - private String message; | ||
| 38 | - | ||
| 39 | - /** | ||
| 40 | - * 消息类型,枚举值可能包括'system'(系统消息)、'user'(用户消息)和'assistant'(助手消息) | ||
| 41 | - */ | ||
| 42 | - private String messageType; | ||
| 43 | - | ||
| 44 | - /** | ||
| 45 | - * 在生成消息时采用的Top-K采样大小, | ||
| 46 | - * 表示模型生成回复时考虑的候选项集合的大小 | ||
| 47 | - */ | ||
| 48 | - private Double topK; | ||
| 49 | - | ||
| 50 | - /** | ||
| 51 | - * Top-P核采样方法的概率阈值, | ||
| 52 | - * 在语言模型生成过程中控制采样的过滤标准 | ||
| 53 | - */ | ||
| 54 | - private Double topP; | ||
| 55 | - | ||
| 56 | - /** | ||
| 57 | - * 温度参数,用于调整生成回复的随机性和多样性程度, | ||
| 58 | - * 较低的温度值会使输出更收敛于高频词汇,较高的则增加多样性 | ||
| 59 | - */ | ||
| 60 | - private Double temperature; | ||
| 61 | - | ||
| 62 | -} |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/chat/AiChatConversationDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.dal.dataobject.chat; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 4 | +import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModalDO; | ||
| 5 | +import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO; | ||
| 6 | +import cn.iocoder.yudao.module.ai.enums.AiOpenAiModelEnum; | ||
| 7 | +import com.baomidou.mybatisplus.annotation.KeySequence; | ||
| 8 | +import com.baomidou.mybatisplus.annotation.TableId; | ||
| 9 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
| 10 | +import lombok.*; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * AI Chat 会话 DO | ||
| 14 | + * | ||
| 15 | + * 用户每次发起 Chat 聊天时,会创建一个 {@link AiChatConversationDO} 对象,将它的消息关联在一起 | ||
| 16 | + * | ||
| 17 | + * @author fansili | ||
| 18 | + * @since 2024/4/14 17:35 | ||
| 19 | + */ | ||
| 20 | +@TableName("ai_chat_conversation") | ||
| 21 | +@KeySequence("ai_chat_conversation_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | ||
| 22 | +@Data | ||
| 23 | +@EqualsAndHashCode(callSuper = true) | ||
| 24 | +@Builder | ||
| 25 | +@NoArgsConstructor | ||
| 26 | +@AllArgsConstructor | ||
| 27 | +public class AiChatConversationDO extends BaseDO { | ||
| 28 | + | ||
| 29 | + /** | ||
| 30 | + * ID 编号,自增 | ||
| 31 | + */ | ||
| 32 | + @TableId | ||
| 33 | + private Long id; | ||
| 34 | + | ||
| 35 | + /** | ||
| 36 | + * 用户编号 | ||
| 37 | + * | ||
| 38 | + * 关联 AdminUserDO 的 userId 字段 | ||
| 39 | + */ | ||
| 40 | + private Long userId; | ||
| 41 | + | ||
| 42 | + /** | ||
| 43 | + * 标题 | ||
| 44 | + * | ||
| 45 | + * 默认由系统自动生成,可用户手动修改 | ||
| 46 | + */ | ||
| 47 | + private String title; | ||
| 48 | + | ||
| 49 | + /** | ||
| 50 | + * 角色编号 | ||
| 51 | + * | ||
| 52 | + * 关联 {@link AiChatRoleDO#getId()} | ||
| 53 | + */ | ||
| 54 | + private Long roleId; | ||
| 55 | + /** | ||
| 56 | + * 模型标志 | ||
| 57 | + * | ||
| 58 | + * 枚举 {@link AiOpenAiModelEnum} | ||
| 59 | + */ | ||
| 60 | + private String model; | ||
| 61 | + | ||
| 62 | + /** | ||
| 63 | + * 模型编号 | ||
| 64 | + * | ||
| 65 | + * 关联 {@link AiChatModalDO#getId()} 字段 | ||
| 66 | + */ | ||
| 67 | + private Long modelId; | ||
| 68 | + | ||
| 69 | + // ========== 会话配置 ========== | ||
| 70 | + | ||
| 71 | + /** | ||
| 72 | + * 温度参数 | ||
| 73 | + * | ||
| 74 | + * 用于调整生成回复的随机性和多样性程度:较低的温度值会使输出更收敛于高频词汇,较高的则增加多样性 | ||
| 75 | + */ | ||
| 76 | + private Double temperature; | ||
| 77 | + /** | ||
| 78 | + * 上下文数量 | ||
| 79 | + */ | ||
| 80 | + private Integer contextCount; | ||
| 81 | + /** | ||
| 82 | + * 单条回复的 Token 数量 | ||
| 83 | + */ | ||
| 84 | + private Integer maxTokens; | ||
| 85 | + | ||
| 86 | +} |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/chat/AiChatMessageDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.dal.dataobject.chat; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.ai.chat.messages.MessageType; | ||
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 5 | +import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModalDO; | ||
| 6 | +import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO; | ||
| 7 | +import cn.iocoder.yudao.module.ai.enums.AiOpenAiModelEnum; | ||
| 8 | +import com.baomidou.mybatisplus.annotation.KeySequence; | ||
| 9 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
| 10 | +import lombok.*; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * AI Chat 消息 DO | ||
| 14 | + * | ||
| 15 | + * @since 2024/4/14 17:35 | ||
| 16 | + * @since 2024/4/14 17:35 | ||
| 17 | + */ | ||
| 18 | +@TableName("ai_chat_message") | ||
| 19 | +@KeySequence("ai_chat_conversation_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | ||
| 20 | +@Data | ||
| 21 | +@EqualsAndHashCode(callSuper = true) | ||
| 22 | +@Builder | ||
| 23 | +@NoArgsConstructor | ||
| 24 | +@AllArgsConstructor | ||
| 25 | +public class AiChatMessageDO extends BaseDO { | ||
| 26 | + | ||
| 27 | + /** | ||
| 28 | + * 编号,作为每条聊天记录的唯一标识符 | ||
| 29 | + */ | ||
| 30 | + private Long id; | ||
| 31 | + | ||
| 32 | + /** | ||
| 33 | + * 会话编号 | ||
| 34 | + * | ||
| 35 | + * 关联 {@link AiChatConversationDO#getId()} | ||
| 36 | + */ | ||
| 37 | + private Long conversationId; | ||
| 38 | + | ||
| 39 | + /** | ||
| 40 | + * 消息类型 | ||
| 41 | + * | ||
| 42 | + * 也等价于 OpenAPI 的 role 字段 | ||
| 43 | + * | ||
| 44 | + * 枚举 {@link MessageType} | ||
| 45 | + */ | ||
| 46 | + private String type; | ||
| 47 | + /** | ||
| 48 | + * 用户编号 | ||
| 49 | + * | ||
| 50 | + * 仅当 user 发送时非空 | ||
| 51 | + * | ||
| 52 | + * 关联 AdminUserDO 的 userId 字段 | ||
| 53 | + */ | ||
| 54 | + private Long userId; | ||
| 55 | + /** | ||
| 56 | + * 角色编号 | ||
| 57 | + * | ||
| 58 | + * 仅当 assistant 回复时非空 | ||
| 59 | + * | ||
| 60 | + * 关联 {@link AiChatRoleDO#getId()} 字段 | ||
| 61 | + */ | ||
| 62 | + private Long roleId; | ||
| 63 | + | ||
| 64 | + /** | ||
| 65 | + * 模型标志 | ||
| 66 | + * | ||
| 67 | + * 枚举 {@link AiOpenAiModelEnum} | ||
| 68 | + */ | ||
| 69 | + private String model; | ||
| 70 | + /** | ||
| 71 | + * 模型编号 | ||
| 72 | + * | ||
| 73 | + * 关联 {@link AiChatModalDO#getId()} 字段 | ||
| 74 | + */ | ||
| 75 | + private Long modelId; | ||
| 76 | + | ||
| 77 | + /** | ||
| 78 | + * 聊天内容 | ||
| 79 | + */ | ||
| 80 | + private String content; | ||
| 81 | + /** | ||
| 82 | + * 消耗 Token 数量 | ||
| 83 | + */ | ||
| 84 | + private Integer usedTokens; | ||
| 85 | + | ||
| 86 | + // TODO 芋艿:是否作为上下文语料?use_context,待定 | ||
| 87 | + | ||
| 88 | + // ========== 会话配置 ========== | ||
| 89 | + | ||
| 90 | + /** | ||
| 91 | + * 上下文数量 | ||
| 92 | + * | ||
| 93 | + * 冗余 {@link AiChatConversationDO#getContextCount()} | ||
| 94 | + */ | ||
| 95 | + private Integer contextCount; | ||
| 96 | + /** | ||
| 97 | + * 温度参数 | ||
| 98 | + * | ||
| 99 | + * 冗余 {@link AiChatConversationDO#getTemperature()} | ||
| 100 | + */ | ||
| 101 | + private Double temperature; | ||
| 102 | + /** | ||
| 103 | + * 单条回复的 Token 数量 | ||
| 104 | + * | ||
| 105 | + * 冗余 {@link AiChatConversationDO#getMaxTokens()} | ||
| 106 | + */ | ||
| 107 | + private Integer maxTokens; | ||
| 108 | + | ||
| 109 | +} |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/AiImageDO.java renamed to yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/image/AiImageDO.java
| 1 | -package cn.iocoder.yudao.module.ai.dal.dataobject; | 1 | +package cn.iocoder.yudao.module.ai.dal.dataobject.image; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | import com.baomidou.mybatisplus.annotation.IdType; | 4 | import com.baomidou.mybatisplus.annotation.IdType; |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/model/AiApiKeyDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.dal.dataobject.model; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.ai.AiPlatformEnum; | ||
| 4 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||
| 5 | +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 6 | +import com.baomidou.mybatisplus.annotation.KeySequence; | ||
| 7 | +import com.baomidou.mybatisplus.annotation.TableId; | ||
| 8 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
| 9 | +import lombok.*; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * AI API 秘钥 DO | ||
| 13 | + * | ||
| 14 | + * @author 芋道源码 | ||
| 15 | + */ | ||
| 16 | +@TableName("ai_api_key") | ||
| 17 | +@KeySequence("ai_chat_conversation_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | ||
| 18 | +@Data | ||
| 19 | +@EqualsAndHashCode(callSuper = true) | ||
| 20 | +@Builder | ||
| 21 | +@NoArgsConstructor | ||
| 22 | +@AllArgsConstructor | ||
| 23 | +public class AiApiKeyDO extends BaseDO { | ||
| 24 | + | ||
| 25 | + /** | ||
| 26 | + * 编号 | ||
| 27 | + */ | ||
| 28 | + @TableId | ||
| 29 | + private Long id; | ||
| 30 | + /** | ||
| 31 | + * 名称 | ||
| 32 | + */ | ||
| 33 | + private String name; | ||
| 34 | + /** | ||
| 35 | + * 平台 | ||
| 36 | + * | ||
| 37 | + * 枚举 {@link AiPlatformEnum} | ||
| 38 | + */ | ||
| 39 | + private String platform; | ||
| 40 | + /** | ||
| 41 | + * 用途 | ||
| 42 | + * | ||
| 43 | + * TODO 芋艿:枚举;chat、image | ||
| 44 | + */ | ||
| 45 | + private Integer type; | ||
| 46 | + /** | ||
| 47 | + * API 地址 | ||
| 48 | + */ | ||
| 49 | + private String url; | ||
| 50 | + /** | ||
| 51 | + * 状态 | ||
| 52 | + * | ||
| 53 | + * 枚举 {@link CommonStatusEnum} | ||
| 54 | + */ | ||
| 55 | + private Integer status; | ||
| 56 | + | ||
| 57 | + // TODO 芋艿:proxyUrl 代理地址 | ||
| 58 | + | ||
| 59 | +} |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/AiChatModalDO.java renamed to yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/model/AiChatModalDO.java
| 1 | -package cn.iocoder.yudao.module.ai.dal.dataobject; | 1 | +package cn.iocoder.yudao.module.ai.dal.dataobject.model; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.ai.AiPlatformEnum; | ||
| 4 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 5 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 6 | +import com.baomidou.mybatisplus.annotation.TableId; | ||
| 4 | import com.baomidou.mybatisplus.annotation.TableName; | 7 | import com.baomidou.mybatisplus.annotation.TableName; |
| 5 | import lombok.Data; | 8 | import lombok.Data; |
| 6 | import lombok.experimental.Accessors; | 9 | import lombok.experimental.Accessors; |
| 7 | 10 | ||
| 8 | /** | 11 | /** |
| 9 | - * ai 模型 | 12 | + * AI 聊天模型 DO |
| 10 | * | 13 | * |
| 11 | * @author fansili | 14 | * @author fansili |
| 12 | * @time 2024/4/24 19:39 | 15 | * @time 2024/4/24 19:39 |
| @@ -20,36 +23,53 @@ public class AiChatModalDO extends BaseDO { | @@ -20,36 +23,53 @@ public class AiChatModalDO extends BaseDO { | ||
| 20 | /** | 23 | /** |
| 21 | * 编号 | 24 | * 编号 |
| 22 | */ | 25 | */ |
| 26 | + @TableId | ||
| 23 | private Long id; | 27 | private Long id; |
| 24 | /** | 28 | /** |
| 25 | - * 名字 | 29 | + * API 秘钥编号 |
| 30 | + * | ||
| 31 | + * 关联 {@link AiApiKeyDO#getId()} | ||
| 32 | + */ | ||
| 33 | + private Long key_id; | ||
| 34 | + /** | ||
| 35 | + * 模型名称 | ||
| 26 | */ | 36 | */ |
| 27 | private String name; | 37 | private String name; |
| 28 | /** | 38 | /** |
| 29 | - * 类型 | ||
| 30 | - * {@link cn.iocoder.yudao.framework.ai.chatyiyan.YiYanChatModel} | ||
| 31 | - * {@link cn.iocoder.yudao.framework.ai.chatxinghuo.XingHuoChatModel} | 39 | + * 模型标志 |
| 32 | */ | 40 | */ |
| 33 | - private String modal; | 41 | + private String model; |
| 34 | /** | 42 | /** |
| 35 | - * 平台 参考:{@link cn.iocoder.yudao.framework.ai.AiPlatformEnum} | 43 | + * 平台 |
| 44 | + * | ||
| 45 | + * 枚举 {@link AiPlatformEnum} | ||
| 36 | */ | 46 | */ |
| 37 | private String platform; | 47 | private String platform; |
| 48 | + | ||
| 38 | /** | 49 | /** |
| 39 | - * 图片地址 | 50 | + * 排序值 |
| 40 | */ | 51 | */ |
| 41 | - private String imageUrl; | 52 | + private Integer sort; |
| 42 | /** | 53 | /** |
| 43 | - * 禁用 0、正常 1、禁用 | 54 | + * 状态 |
| 55 | + * | ||
| 56 | + * 枚举 {@link CommonStatusEnum} | ||
| 44 | */ | 57 | */ |
| 45 | - private Integer disable; | 58 | + private Integer status; |
| 59 | + | ||
| 60 | + // ========== 会话配置 ========== | ||
| 61 | + | ||
| 46 | /** | 62 | /** |
| 47 | - * 排序 | 63 | + * 温度参数 |
| 64 | + * | ||
| 65 | + * 用于调整生成回复的随机性和多样性程度:较低的温度值会使输出更收敛于高频词汇,较高的则增加多样性 | ||
| 48 | */ | 66 | */ |
| 49 | - private Integer sort; | 67 | + private Double temperature; |
| 50 | /** | 68 | /** |
| 51 | - * modal 配置(json) | 69 | + * 单条回复的 Token 数量 |
| 52 | */ | 70 | */ |
| 53 | - private String config; | 71 | + private Integer maxTokens; |
| 72 | + | ||
| 73 | + // TODO 芋艿:到底使用 max_context、还是 contextCount,待定!一个是轮次,一个是长度数量;貌似轮次更常用一点; | ||
| 54 | 74 | ||
| 55 | } | 75 | } |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/AiChatRoleDO.java renamed to yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/model/AiChatRoleDO.java
| 1 | -package cn.iocoder.yudao.module.ai.dal.dataobject; | 1 | +package cn.iocoder.yudao.module.ai.dal.dataobject.model; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 4 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | import com.baomidou.mybatisplus.annotation.IdType; | 5 | import com.baomidou.mybatisplus.annotation.IdType; |
| 5 | import com.baomidou.mybatisplus.annotation.TableId; | 6 | import com.baomidou.mybatisplus.annotation.TableId; |
| @@ -17,40 +18,65 @@ import lombok.experimental.Accessors; | @@ -17,40 +18,65 @@ import lombok.experimental.Accessors; | ||
| 17 | @Accessors(chain = true) | 18 | @Accessors(chain = true) |
| 18 | @TableName("ai_chat_role") | 19 | @TableName("ai_chat_role") |
| 19 | public class AiChatRoleDO extends BaseDO { | 20 | public class AiChatRoleDO extends BaseDO { |
| 21 | + | ||
| 20 | /** | 22 | /** |
| 21 | - * 编号,表示聊天角色在数据库中的唯一标识符 | 23 | + * 编号 |
| 22 | */ | 24 | */ |
| 23 | - @TableId(type = IdType.AUTO) | 25 | + @TableId |
| 24 | private Long id; | 26 | private Long id; |
| 25 | - | ||
| 26 | /** | 27 | /** |
| 27 | - * 用户ID,关联到使用该聊天角色的用户 | 28 | + * 角色名称 |
| 28 | */ | 29 | */ |
| 29 | - private Long userId; | ||
| 30 | - | 30 | + private String name; |
| 31 | /** | 31 | /** |
| 32 | - * 角色名,角色的显示名称 | 32 | + * 角色头像 |
| 33 | */ | 33 | */ |
| 34 | - private String name; | 34 | + private String avatar; |
| 35 | + /** | ||
| 36 | + * 角色分类 | ||
| 37 | + */ | ||
| 38 | + private String category; | ||
| 39 | + /** | ||
| 40 | + * 角色描述 | ||
| 41 | + */ | ||
| 42 | + private String description; | ||
| 43 | + /** | ||
| 44 | + * 角色欢迎语 | ||
| 45 | + */ | ||
| 46 | + private String welcomeMessage; | ||
| 35 | 47 | ||
| 36 | /** | 48 | /** |
| 37 | - * 角色介绍,详细描述角色的功能或用途 | 49 | + * 用户编号 |
| 50 | + * | ||
| 51 | + * 关联 AdminUserDO 的 userId 字段 | ||
| 38 | */ | 52 | */ |
| 39 | - private String introduce; | 53 | + private Long userId; |
| 40 | 54 | ||
| 41 | /** | 55 | /** |
| 42 | - * 分类,角色所属的类别,如娱乐、创作等 | 56 | + * 模型编号 |
| 57 | + * | ||
| 58 | + * 关联 {@link AiChatModalDO#getId()} 字段 | ||
| 43 | */ | 59 | */ |
| 44 | - private String classify; | 60 | + private String modelId; |
| 45 | 61 | ||
| 46 | /** | 62 | /** |
| 47 | - * 是否开启 open、close | 63 | + * 是否公开 |
| 64 | + * | ||
| 65 | + * true - 公开;false - 私有 | ||
| 48 | */ | 66 | */ |
| 49 | - private String enable; | 67 | + private Boolean publicStatus; |
| 50 | 68 | ||
| 51 | /** | 69 | /** |
| 52 | - * 角色的使用次数统计 | 70 | + * 排序值 |
| 71 | + */ | ||
| 72 | + private Integer sort; | ||
| 73 | + /** | ||
| 74 | + * 状态 | ||
| 75 | + * | ||
| 76 | + * 枚举 {@link CommonStatusEnum} | ||
| 53 | */ | 77 | */ |
| 54 | - private Integer useCount; | 78 | + private Integer status; |
| 79 | + | ||
| 80 | + // TODO 芋艿:要不要加一个 context,内置的上下文 | ||
| 55 | 81 | ||
| 56 | } | 82 | } |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/mapper/AiChatConversationMapper.java
| @@ -5,7 +5,7 @@ import cn.hutool.core.util.StrUtil; | @@ -5,7 +5,7 @@ import cn.hutool.core.util.StrUtil; | ||
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageParam; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 7 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 7 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 8 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatConversationDO; | 8 | +import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatConversationDO; |
| 9 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 9 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 10 | import org.apache.ibatis.annotations.Mapper; | 10 | import org.apache.ibatis.annotations.Mapper; |
| 11 | import org.apache.ibatis.annotations.Param; | 11 | import org.apache.ibatis.annotations.Param; |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/mapper/AiChatMessageMapper.java
| @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.ai.mapper; | @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.ai.mapper; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 4 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 4 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 5 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatMessageDO; | 5 | +import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatMessageDO; |
| 6 | import org.apache.ibatis.annotations.Mapper; | 6 | import org.apache.ibatis.annotations.Mapper; |
| 7 | import org.springframework.stereotype.Repository; | 7 | import org.springframework.stereotype.Repository; |
| 8 | 8 | ||
| @@ -24,7 +24,7 @@ public interface AiChatMessageMapper extends BaseMapperX<AiChatMessageDO> { | @@ -24,7 +24,7 @@ public interface AiChatMessageMapper extends BaseMapperX<AiChatMessageDO> { | ||
| 24 | */ | 24 | */ |
| 25 | default int deleteByConversationAndId(Long chatConversationId, Long id) { | 25 | default int deleteByConversationAndId(Long chatConversationId, Long id) { |
| 26 | return this.delete(new LambdaQueryWrapperX<AiChatMessageDO>() | 26 | return this.delete(new LambdaQueryWrapperX<AiChatMessageDO>() |
| 27 | - .eq(AiChatMessageDO::getChatConversationId, chatConversationId) | 27 | + .eq(AiChatMessageDO::getConversationId, chatConversationId) |
| 28 | .eq(AiChatMessageDO::getId, id) | 28 | .eq(AiChatMessageDO::getId, id) |
| 29 | ); | 29 | ); |
| 30 | } | 30 | } |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/mapper/AiChatModalMapper.java
| @@ -5,7 +5,6 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; | @@ -5,7 +5,6 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 6 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 7 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 7 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 8 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatModalDO; | ||
| 9 | import org.apache.ibatis.annotations.Mapper; | 8 | import org.apache.ibatis.annotations.Mapper; |
| 10 | import org.springframework.stereotype.Repository; | 9 | import org.springframework.stereotype.Repository; |
| 11 | 10 |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/mapper/AiChatRoleMapper.java
| 1 | package cn.iocoder.yudao.module.ai.mapper; | 1 | package cn.iocoder.yudao.module.ai.mapper; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 4 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatRoleDO; | 4 | +import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO; |
| 5 | import org.apache.ibatis.annotations.Mapper; | 5 | import org.apache.ibatis.annotations.Mapper; |
| 6 | import org.springframework.stereotype.Repository; | 6 | import org.springframework.stereotype.Repository; |
| 7 | 7 |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/mapper/AiImageMapper.java
| 1 | package cn.iocoder.yudao.module.ai.mapper; | 1 | package cn.iocoder.yudao.module.ai.mapper; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 4 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiImageDO; | 4 | +import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO; |
| 5 | import org.apache.ibatis.annotations.Mapper; | 5 | import org.apache.ibatis.annotations.Mapper; |
| 6 | import org.springframework.stereotype.Repository; | 6 | import org.springframework.stereotype.Repository; |
| 7 | 7 |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/impl/AiChatConversationServiceImpl.java
| @@ -4,8 +4,6 @@ import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; | @@ -4,8 +4,6 @@ import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; | ||
| 4 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | 4 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| 5 | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | 5 | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; |
| 6 | import cn.iocoder.yudao.module.ai.convert.AiChatConversationConvert; | 6 | import cn.iocoder.yudao.module.ai.convert.AiChatConversationConvert; |
| 7 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatConversationDO; | ||
| 8 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatModalDO; | ||
| 9 | import cn.iocoder.yudao.module.ai.enums.AiChatConversationTypeEnum; | 7 | import cn.iocoder.yudao.module.ai.enums.AiChatConversationTypeEnum; |
| 10 | import cn.iocoder.yudao.module.ai.enums.AiChatModalDisableEnum; | 8 | import cn.iocoder.yudao.module.ai.enums.AiChatModalDisableEnum; |
| 11 | import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper; | 9 | import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper; |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/impl/AiChatMessageServiceImpl.java
| @@ -6,8 +6,8 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | @@ -6,8 +6,8 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||
| 6 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | 6 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| 7 | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | 7 | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; |
| 8 | import cn.iocoder.yudao.module.ai.convert.AiChatMessageConvert; | 8 | import cn.iocoder.yudao.module.ai.convert.AiChatMessageConvert; |
| 9 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatConversationDO; | ||
| 10 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatMessageDO; | 9 | +import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatConversationDO; |
| 10 | +import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatMessageDO; | ||
| 11 | import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper; | 11 | import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper; |
| 12 | import cn.iocoder.yudao.module.ai.mapper.AiChatMessageMapper; | 12 | import cn.iocoder.yudao.module.ai.mapper.AiChatMessageMapper; |
| 13 | import cn.iocoder.yudao.module.ai.service.AiChatMessageService; | 13 | import cn.iocoder.yudao.module.ai.service.AiChatMessageService; |
| @@ -38,7 +38,7 @@ public class AiChatMessageServiceImpl implements AiChatMessageService { | @@ -38,7 +38,7 @@ public class AiChatMessageServiceImpl implements AiChatMessageService { | ||
| 38 | public PageResult<AiChatMessageListRes> list(AiChatMessageReq req) { | 38 | public PageResult<AiChatMessageListRes> list(AiChatMessageReq req) { |
| 39 | // 查询 | 39 | // 查询 |
| 40 | LambdaQueryWrapperX<AiChatMessageDO> queryWrapperX = new LambdaQueryWrapperX<>(); | 40 | LambdaQueryWrapperX<AiChatMessageDO> queryWrapperX = new LambdaQueryWrapperX<>(); |
| 41 | - queryWrapperX.eq(AiChatMessageDO::getChatConversationId, req.getChatConversationId()); | 41 | + queryWrapperX.eq(AiChatMessageDO::getConversationId, req.getChatConversationId()); |
| 42 | // 默认排序 | 42 | // 默认排序 |
| 43 | queryWrapperX.orderByDesc(AiChatMessageDO::getId); | 43 | queryWrapperX.orderByDesc(AiChatMessageDO::getId); |
| 44 | PageResult<AiChatMessageDO> pageResult = aiChatMessageMapper.selectPage(req, queryWrapperX); | 44 | PageResult<AiChatMessageDO> pageResult = aiChatMessageMapper.selectPage(req, queryWrapperX); |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/impl/AiChatModalServiceImpl.java
| @@ -12,7 +12,6 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | @@ -12,7 +12,6 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | ||
| 12 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 12 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 13 | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | 13 | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; |
| 14 | import cn.iocoder.yudao.module.ai.convert.AiChatModalConvert; | 14 | import cn.iocoder.yudao.module.ai.convert.AiChatModalConvert; |
| 15 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatModalDO; | ||
| 16 | import cn.iocoder.yudao.module.ai.dal.vo.AiChatModalChatConfigVO; | 15 | import cn.iocoder.yudao.module.ai.dal.vo.AiChatModalChatConfigVO; |
| 17 | import cn.iocoder.yudao.module.ai.dal.vo.AiChatModalConfigVO; | 16 | import cn.iocoder.yudao.module.ai.dal.vo.AiChatModalConfigVO; |
| 18 | import cn.iocoder.yudao.module.ai.dal.vo.AiChatModalDallConfigVO; | 17 | import cn.iocoder.yudao.module.ai.dal.vo.AiChatModalDallConfigVO; |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/impl/AiChatRoleServiceImpl.java
| @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||
| 7 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | 7 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| 8 | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | 8 | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; |
| 9 | import cn.iocoder.yudao.module.ai.convert.AiChatRoleConvert; | 9 | import cn.iocoder.yudao.module.ai.convert.AiChatRoleConvert; |
| 10 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatRoleDO; | 10 | +import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO; |
| 11 | import cn.iocoder.yudao.module.ai.enums.AiChatRoleClassifyEnum; | 11 | import cn.iocoder.yudao.module.ai.enums.AiChatRoleClassifyEnum; |
| 12 | import cn.iocoder.yudao.module.ai.enums.AiChatRoleEnableEnum; | 12 | import cn.iocoder.yudao.module.ai.enums.AiChatRoleEnableEnum; |
| 13 | import cn.iocoder.yudao.module.ai.mapper.AiChatRoleMapper; | 13 | import cn.iocoder.yudao.module.ai.mapper.AiChatRoleMapper; |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/impl/AiChatServiceImpl.java
| @@ -10,7 +10,7 @@ import cn.iocoder.yudao.framework.ai.chat.prompt.Prompt; | @@ -10,7 +10,7 @@ import cn.iocoder.yudao.framework.ai.chat.prompt.Prompt; | ||
| 10 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | 10 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| 11 | import cn.iocoder.yudao.module.ai.config.AiChatClientFactory; | 11 | import cn.iocoder.yudao.module.ai.config.AiChatClientFactory; |
| 12 | import cn.iocoder.yudao.module.ai.controller.Utf8SseEmitter; | 12 | import cn.iocoder.yudao.module.ai.controller.Utf8SseEmitter; |
| 13 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatMessageDO; | 13 | +import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatMessageDO; |
| 14 | import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper; | 14 | import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper; |
| 15 | import cn.iocoder.yudao.module.ai.mapper.AiChatMessageMapper; | 15 | import cn.iocoder.yudao.module.ai.mapper.AiChatMessageMapper; |
| 16 | import cn.iocoder.yudao.module.ai.mapper.AiChatRoleMapper; | 16 | import cn.iocoder.yudao.module.ai.mapper.AiChatRoleMapper; |
| @@ -89,7 +89,7 @@ public class AiChatServiceImpl implements AiChatService { | @@ -89,7 +89,7 @@ public class AiChatServiceImpl implements AiChatService { | ||
| 89 | aiChatMessageMapper.insert( | 89 | aiChatMessageMapper.insert( |
| 90 | new AiChatMessageDO() | 90 | new AiChatMessageDO() |
| 91 | .setId(null) | 91 | .setId(null) |
| 92 | - .setChatConversationId(chatConversationId) | 92 | + .setConversationId(chatConversationId) |
| 93 | .setUserId(loginUserId) | 93 | .setUserId(loginUserId) |
| 94 | .setMessage(req.getPrompt()) | 94 | .setMessage(req.getPrompt()) |
| 95 | .setMessageType(MessageType.USER.getValue()) | 95 | .setMessageType(MessageType.USER.getValue()) |
| @@ -107,7 +107,7 @@ public class AiChatServiceImpl implements AiChatService { | @@ -107,7 +107,7 @@ public class AiChatServiceImpl implements AiChatService { | ||
| 107 | aiChatMessageMapper.insert( | 107 | aiChatMessageMapper.insert( |
| 108 | new AiChatMessageDO() | 108 | new AiChatMessageDO() |
| 109 | .setId(null) | 109 | .setId(null) |
| 110 | - .setChatConversationId(chatConversationId) | 110 | + .setConversationId(chatConversationId) |
| 111 | .setUserId(loginUserId) | 111 | .setUserId(loginUserId) |
| 112 | .setMessage(systemPrompts) | 112 | .setMessage(systemPrompts) |
| 113 | .setMessageType(MessageType.SYSTEM.getValue()) | 113 | .setMessageType(MessageType.SYSTEM.getValue()) |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/impl/AiImageServiceImpl.java
| @@ -15,7 +15,7 @@ import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; | @@ -15,7 +15,7 @@ import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; | ||
| 15 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | 15 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| 16 | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; | 16 | import cn.iocoder.yudao.module.ai.ErrorCodeConstants; |
| 17 | import cn.iocoder.yudao.module.ai.controller.Utf8SseEmitter; | 17 | import cn.iocoder.yudao.module.ai.controller.Utf8SseEmitter; |
| 18 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiImageDO; | 18 | +import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO; |
| 19 | import cn.iocoder.yudao.module.ai.enums.AiChatDrawingStatusEnum; | 19 | import cn.iocoder.yudao.module.ai.enums.AiChatDrawingStatusEnum; |
| 20 | import cn.iocoder.yudao.module.ai.mapper.AiImageMapper; | 20 | import cn.iocoder.yudao.module.ai.mapper.AiImageMapper; |
| 21 | import cn.iocoder.yudao.module.ai.service.AiImageService; | 21 | import cn.iocoder.yudao.module.ai.service.AiImageService; |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/midjourneyHandler/YuDaoMidjourneyMessageHandler.java
| @@ -5,7 +5,7 @@ import cn.hutool.core.util.StrUtil; | @@ -5,7 +5,7 @@ import cn.hutool.core.util.StrUtil; | ||
| 5 | import cn.iocoder.yudao.framework.ai.midjourney.MidjourneyMessage; | 5 | import cn.iocoder.yudao.framework.ai.midjourney.MidjourneyMessage; |
| 6 | import cn.iocoder.yudao.framework.ai.midjourney.constants.MidjourneyGennerateStatusEnum; | 6 | import cn.iocoder.yudao.framework.ai.midjourney.constants.MidjourneyGennerateStatusEnum; |
| 7 | import cn.iocoder.yudao.framework.ai.midjourney.webSocket.MidjourneyMessageHandler; | 7 | import cn.iocoder.yudao.framework.ai.midjourney.webSocket.MidjourneyMessageHandler; |
| 8 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiImageDO; | 8 | +import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO; |
| 9 | import cn.iocoder.yudao.module.ai.enums.AiChatDrawingStatusEnum; | 9 | import cn.iocoder.yudao.module.ai.enums.AiChatDrawingStatusEnum; |
| 10 | import cn.iocoder.yudao.module.ai.mapper.AiImageMapper; | 10 | import cn.iocoder.yudao.module.ai.mapper.AiImageMapper; |
| 11 | import com.alibaba.fastjson2.JSON; | 11 | import com.alibaba.fastjson2.JSON; |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/vo/AiChatModalListRes.java
| 1 | package cn.iocoder.yudao.module.ai.vo; | 1 | package cn.iocoder.yudao.module.ai.vo; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatModalDO; | ||
| 4 | import io.swagger.v3.oas.annotations.media.Schema; | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 5 | import lombok.Data; | 4 | import lombok.Data; |
| 6 | import lombok.experimental.Accessors; | 5 | import lombok.experimental.Accessors; |