【代码评审】AI:调整表结构

This commit is contained in:
zhijiantianya@gmail.com 2024-05-06 19:17:05 +08:00
parent c0470dcabb
commit e9cbee9d7e
33 changed files with 468 additions and 255 deletions

View File

@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
// TODO done @fansili1类注释要加下2author time javadoc@author @since3@AllArgsConstructor 使用这个注解去掉构造方法4value 改成 model 字段然后注释都写下哈5message 改成 name然后注释都写下哈
// TODO @fan: AiModelEnum 是不是可以缩写成这个哈所有的模型都写在这里枚举
/**
* @author: fansili
* @time: 2024/3/4 12:36
@ -12,24 +13,18 @@ import lombok.Getter;
@AllArgsConstructor
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;
}

View File

@ -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<>>
}

View File

@ -0,0 +1 @@
package cn.iocoder.yudao.module.ai.controller.admin.chat.vo;

View File

@ -0,0 +1,4 @@
/**
* TODO 芋艿站位无特殊作用
*/
package cn.iocoder.yudao.module.ai.controller.admin;

View File

@ -0,0 +1,4 @@
/**
* TODO 芋艿站位无特殊作用
*/
package cn.iocoder.yudao.module.ai.controller.app;

View File

@ -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;

View File

@ -1,6 +1,6 @@
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 org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

View File

@ -1,6 +1,6 @@
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 org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

View File

@ -1,6 +1,6 @@
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.AiChatModalListRes;
import cn.iocoder.yudao.module.ai.vo.AiChatModalRes;

View File

@ -1,6 +1,6 @@
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.AiChatRoleRes;
import cn.iocoder.yudao.module.ai.vo.AiChatRoleUpdateReq;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
/**
* 是否开启 openclose
*/
private String enable;
/**
* 角色的使用次数统计
*/
private Integer useCount;
}

View File

@ -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") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 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;
}

View File

@ -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") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 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;
}

View File

@ -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 com.baomidou.mybatisplus.annotation.IdType;

View File

@ -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") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 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 芋艿枚举chatimage
*/
private Integer type;
/**
* API 地址
*/
private String url;
/**
* 状态
*
* 枚举 {@link CommonStatusEnum}
*/
private Integer status;
// TODO 芋艿proxyUrl 代理地址
}

View File

@ -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待定一个是轮次一个是长度数量貌似轮次更常用一点
}

View File

@ -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内置的上下文
}

View File

@ -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.PageResult;
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 org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

View File

@ -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.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.springframework.stereotype.Repository;
@ -24,7 +24,7 @@ public interface AiChatMessageMapper extends BaseMapperX<AiChatMessageDO> {
*/
default int deleteByConversationAndId(Long chatConversationId, Long id) {
return this.delete(new LambdaQueryWrapperX<AiChatMessageDO>()
.eq(AiChatMessageDO::getChatConversationId, chatConversationId)
.eq(AiChatMessageDO::getConversationId, chatConversationId)
.eq(AiChatMessageDO::getId, id)
);
}

View File

@ -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.mybatis.core.mapper.BaseMapperX;
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.springframework.stereotype.Repository;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.ai.mapper;
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.springframework.stereotype.Repository;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.ai.mapper;
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.springframework.stereotype.Repository;

View File

@ -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.module.ai.ErrorCodeConstants;
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.AiChatModalDisableEnum;
import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper;

View File

@ -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.module.ai.ErrorCodeConstants;
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.AiChatMessageDO;
import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatConversationDO;
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.AiChatMessageMapper;
import cn.iocoder.yudao.module.ai.service.AiChatMessageService;
@ -38,7 +38,7 @@ public class AiChatMessageServiceImpl implements AiChatMessageService {
public PageResult<AiChatMessageListRes> list(AiChatMessageReq req) {
// 查询
LambdaQueryWrapperX<AiChatMessageDO> queryWrapperX = new LambdaQueryWrapperX<>();
queryWrapperX.eq(AiChatMessageDO::getChatConversationId, req.getChatConversationId());
queryWrapperX.eq(AiChatMessageDO::getConversationId, req.getChatConversationId());
// 默认排序
queryWrapperX.orderByDesc(AiChatMessageDO::getId);
PageResult<AiChatMessageDO> pageResult = aiChatMessageMapper.selectPage(req, queryWrapperX);

View File

@ -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.module.ai.ErrorCodeConstants;
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.AiChatModalConfigVO;
import cn.iocoder.yudao.module.ai.dal.vo.AiChatModalDallConfigVO;

View File

@ -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.module.ai.ErrorCodeConstants;
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.AiChatRoleEnableEnum;
import cn.iocoder.yudao.module.ai.mapper.AiChatRoleMapper;

View File

@ -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.module.ai.config.AiChatClientFactory;
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.AiChatMessageMapper;
import cn.iocoder.yudao.module.ai.mapper.AiChatRoleMapper;
@ -89,7 +89,7 @@ public class AiChatServiceImpl implements AiChatService {
aiChatMessageMapper.insert(
new AiChatMessageDO()
.setId(null)
.setChatConversationId(chatConversationId)
.setConversationId(chatConversationId)
.setUserId(loginUserId)
.setMessage(req.getPrompt())
.setMessageType(MessageType.USER.getValue())
@ -107,7 +107,7 @@ public class AiChatServiceImpl implements AiChatService {
aiChatMessageMapper.insert(
new AiChatMessageDO()
.setId(null)
.setChatConversationId(chatConversationId)
.setConversationId(chatConversationId)
.setUserId(loginUserId)
.setMessage(systemPrompts)
.setMessageType(MessageType.SYSTEM.getValue())

View File

@ -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.module.ai.ErrorCodeConstants;
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.mapper.AiImageMapper;
import cn.iocoder.yudao.module.ai.service.AiImageService;

View File

@ -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.constants.MidjourneyGennerateStatusEnum;
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.mapper.AiImageMapper;
import com.alibaba.fastjson2.JSON;

View File

@ -1,6 +1,5 @@
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 lombok.Data;
import lombok.experimental.Accessors;