8. 综合演练聊天面板后端实现-SpringAI实战

后端会话与消息管理

后端实现

后端实现会话和消息记录必然要先从建表开始,然后编写增删改查,最后实现一些功能。

会话

  • 会话保存接口
    • 会话保存dto
  • 会话列表接口
    • 获取当前登录用户id作为查询条件
    • 一对多关联获取会话内的消息
  • 会话删除接口
    • 根据会话id列表批量删除
    • 删除会话时,会话内的消息也一并级联删除
  • 会话id查询接口
    • 一对多关联获取会话内的消息

消息

  • 消息发送接口
    • 消息保存dto(接收前端发送的消息)
    • 消息实体内容设计,支持图片/语音/文字
    • MessageChatMemoryAdvisor历史消息增强和消息自动保存,调用AiMessageChatMemoryget方法获取会话的历史消息和add方法保存消息。
    • 使用ChatClient填写用户发送的消息(可能包含图片/语言),填写MessageChatMemoryAdvisor。最后发起流式请求,获取AI回复的消息。
  • 历史消息实现
    • add方法,保存用户发送的消息和AI回复的消息。因为需要填写创建人id,创建人id是在请求里面存储的。保存的时候是在异步的线程里面,要模拟请求环境才能插入数据到数据库。
    • get方法,获取会话历史消息
    • clear方法,清空会话的历史消息
    • 消息转换器,将消息实体转换为SpringAI的Message,将Message转换为消息实体。互相转换。

实体设计

消息实体设计

消息表

create table ai_message
(
    id            varchar(36) not null
        primary key,
    created_time  datetime(6) not null,
    edited_time   datetime(6) not null,
    creator_id    varchar(32) not null,
    editor_id     varchar(32) not null,
    type          varchar(32) not null comment '消息类型(用户/ 助手/ 系统)',
    text_content  text        not null comment '消息内容',
    medias        json        null comment '媒体内容如图片链接、语音链接',
    ai_session_id varchar(32) not null comment '会话id'
);

消息实体类

/**
 * 历史消息
 */ 
@Entity
public interface AiMessage extends BaseEntity {
   
   

    /**
     * 消息类型(用户/助手/系统)
     */
    MessageType type();

    /**
     * 消息内容
     */
    String textContent();

    @Serialized
    @Null
    List<Media> medias();

    @IdView
    String sessionId();

    /**
     * 会话
     */
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值