mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2025-01-31 09:30:05 +08:00
【代码评审】AI:调整表结构
This commit is contained in:
parent
c0470dcabb
commit
e9cbee9d7e
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user