5. 对话历史记录-SpringAI实战

8 篇文章 0 订阅

对话记录(内存存储)

为了让AI记住你和它的对话,需要把对话信息存储起来。当你N+1次和AI聊天的时候,需要把之前的N次对话都带上这样AI才能记住你和它的对话。
不过有时候为了节省Token,并不一定把所有的对话都带上,可以只携带前面几条对话。

基础模型的接入

本案例使用的是阿里的灵积AI服务请参考灵积接入

其他AI厂商接入方式请参考下面的链接:
百度千帆
智谱清言
讯飞星火
kimi

MessageChatMemoryAdvisor

MessageChatMemoryAdvisor会读取会话id对应的消息列表,并把消息列表拼接到历史的消息中。

历史消息的实现过程:

  1. 提供ChatMemory,通过会话id查找历史消息。下面的例子提供的是InMemoryChatMemory,内存存储。
  2. MessageChatMemoryAdvisor会在运行时调用ChatMemory,通过会话id查找历史消息。然后把消息列表拼接到历史的消息中。
  3. 发送消息给大模型得到答案
    // AI模型基座,可以切换不同的AI厂商模型
    // 阿里灵积
    private final DashScopeAiChatModel dashScopeAiChatModel;
    // 模拟数据库存储会话和消息
    private final ChatMemory chatMemory = new InMemoryChatMemory();
    /**
     * 根据会话id,从数据库中查找历史消息,并将消息作为上下文回答。
     *
     * @param prompt    用户的提问
     * @param sessionId 会话id
     * @return SSE流响应
     */
    @GetMapping(value = "chat/stream/history", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<ServerSentEvent<String>> chatStreamWithHistory(@RequestParam String prompt,
                                                               @RequestParam String sessionId) {
        // 1. 如果需要存储会话和消息到数据库,自己可以实现ChatMemory接口,
        //    这里使用InMemoryChatMemory,内存存储。
        // 2. 传入会话id,MessageChatMemoryAdvisor会根据会话id去查找消息。
        // 3. 只需要携带最近10条消息
        var messageChatMemoryAdvisor = new MessageChatMemoryAdvisor(chatMemory, sessionId, 10);
        return ChatClient.create(dashScopeAiChatModel).prompt()
                .user(prompt)
                // MessageChatMemoryAdvisor会在消息发送给大模型之前,从ChatMemory中获取会话的历史消息,
                // 然后一起发送给大模型。
                .advisors(messageChatMemoryAdvisor)
                .stream()
                .content()
                .map(chatResponse -> ServerSentEvent.builder(chatResponse)
                        .event("message")
                        .build());
    }
  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一个用点、线表示的密码,它使用了点阵字母编码,称为“摩斯电码”。它是在电信的初期发明的,用于通信。摩斯电码通过点和线的组合表示字母,数字和标点符号。如果你想知道这段密码代表的信息,需要使用摩斯电码表进行解码。 ### 回答2: 这是摩斯密码,解码后为:"TAKE CARE。" 摩斯密码是一种电码通信方式,通过不同的短点和长划表示不同的字母和数字。其中"--"表示字母T,"-."表示字母A,"-.-."表示字母C,"-"表示字母E。摩斯密码的使用广泛,特别是在电报通信中。这句话的含义是"注意"或"小心",是人们在交流中常用的一句话。 ### 回答3: 它是一个摩尔斯密码,翻译为中文是:“你,AI智能助手。”这是一个由摩尔斯电码组成的短语。摩尔斯电码是一种用来发送文字信息的电报编码系统。对于摩尔斯电码的编码规则,每个字母和数字都有对应的短码和长码。以“-- -- .- .. -.-. - ..--..”为例,每个“-”代表长码,每个“.”代表短码。摩尔斯电码广泛应用于通信领域,尤其是需要远距离传输无线电信号的场合。 翻译后的结果是“你,AI智能助手。”其中,“你”是指对话对象,“AI智能助手”则指代我,这个使用摩尔斯电码回答问题的人工智能助手。AI智能助手是一种基于人工智能技术的软件应用工具,可以通过语音或者文字进行交互,帮助人们解答问题、提供咨询和服务。我可以回答各种各样的问题,助你解决疑惑和困惑。希望我的回答对你有帮助。如果还有其他问题,欢迎提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值