【LangChain4J】LangChain4J 第二弹:连续对话与数据持久化存储

目录

一、MessageWindowChatMemory

1.1 构建 AiService

1.2 配置 AiService

1.3 编写调用代码

二、TokenWindowChatMemory

三、连续对话保存到数据库(三种实现)

3.1 数据保存到 Redis

3.2 数据保存到 MySQL

3.2.1 创建表

3.2.2 添加数据库和 MyBatisPlus 依赖

3.2.3 设置配置文件

3.2.4 编写实体类

3.2.5 编写 Mapper

3.2.6 自定义数据存储类(关键)

3.2.7 定义 AI Service

3.2.8 自动注入 AI Service(关键)

3.3 数据存储到 MongoDB


前言:LangChain4j 的简介

“LangChain4j 是一个让Java开发者轻松玩转大模型的工具包,像搭积木一样组合各种AI功能!这篇教你5分钟搞定接入“

LangChain4j的背景

LangChain4j(LangChain for java) 的目标是简化将大语言模型(LLM - Large Language Model)集成到 Java 应用程序中的过程。

官网: https://docs.langchain4j.dev

  • 2022 年10月,Harrison Chase 发布了基于 Python 的 LangChain。随后同时包含了 Python 版和 JavaScript(LangChain.js)版的LangChain 也发布了。

  • 2023 年 11 月,Quarkus 发布了 LangChain4j 的 0.1 版本,2025 年 2 月发布了 1.0 - Beta1 版本,4 月发布了1.0 - Beta3(公测) 版本

主要功能

  • 与大型语言模型和向量数据库的便捷交互:通过统一的应用程序编程接口(API),可以轻松访问所有主要的商业和开源大型语言模型以及向量数据库,使你能够构建聊天机器人、智能助手等应用。

  • 专为 Java 打造:借助Spring Boot 集成,能够将大模型集成到ava 应用程序中。大型语言模型与 Java 之间实现了双向集成:你可以从 Java 中调用大型语言模型,同时也允许大型语言模型反过来调用你的 Java 代码

  • 智能代理、工具、检索增强生成(RAG):为常见的大语言模型操作提供了广泛的工具,涵盖从底层的提示词模板创建、聊天记忆管理和输出解析,到智能代理和检索增强生成等高级模式。

应用场景

  1. 你想要实现一个自定义的由人工智能驱动的聊天机器人,它可以访问你的数据,并按照你期望的方式运行:

    1. 客户支持聊天机器人

    2. 处理 / 更改 / 取消订单

    3. 教育助手

    4. 解释不清楚的部分

  2. 你想要处理大量的非结构化数据(文件、网页等),并从中提取结构化信息

    1. 从客户评价和支持聊天记录中提取有效评价

    2. 从竞争对手的网站上提取有趣的信息

    3. 从求职者的简历中提取有效信息

  3. 你想要生成信息

    1. 为你的每个客户量身定制的电子邮件

    2. 为你的应用程序 / 网站生成内容

  4. 你想要转换信息

    1. 校对和改写

    2. 总结/翻译

一、MessageWindowChatMemory

1.1 构建 AiService

接口类定义方法:通过注解进行指定 memoryId

public interface ChatMemoryService {​
​
    Flux<String> chat(@MemoryId String memoryId,@UserMessage String message);​
}

1.2 配置 AiService

import dev.langchain4j.memory.chat.MessageWindowChatMemory;​
import dev.langchain4j.memory.chat.TokenWindowChatMemory;​
import dev.langchain4j.model.chat.StreamingChatLanguageModel;​
import dev.langchain4j.model.openai.OpenAiTokenizer;​
import dev.langchain4j.service.AiServices;​
import org.example.langchain4jdemo3.service.ChatMemoryService;​
import org.springframework.beans.factory.annotation.Autowired;​
import org.springframework.context.annotation.Bean;​
import org.springframework.context.annotation.Configuration;​
​
​
@Configuration​
public class ChatMemoryConfig {​
​
    @Bean​
    public ChatMemoryService chatMemoryService(StreamingChatLanguageModel qwenStreamingChatModel) {​
        return AiServices.builder(ChatMemoryService.class)​
                .streamingChatLanguageModel(qwenStreamingChatModel)​
                // 连续对话​
                .chatMemoryProvider( memoryId ->​
                    MessageWindowChatMemory.builder()​
                            .maxMessages(10)​
                            .build()​
                )​
                .build();​
    }​
}

1.3 编写调用代码

@RestController​
@RequestMapping("/chatMemory")​
public class ChatMemoryController {​
​
    @Autowired​
    private ChatMemoryService chatMemoryService;​
​
    @RequestMapping("/chat")​
    public Flux<String> chat(String memoryId, String question) {​
        return chatMemoryService.chat(memoryId, question);​
    }​
​
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敖云岚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值