在构建对话式AI应用时,一个常见的挑战是如何让AI记住之前的对话内容。想象一下,如果你每次与助手交谈时,它都会忘记你之前说过的话,这样的体验是多么令人沮丧!今天,我们将深入探讨如何使用LangChain4j的ChatMemory功能为Java AI应用实现强大的对话记忆能力。

什么是ChatMemory?

ChatMemory是LangChain4j中的一个核心组件,它负责存储和管理对话历史。通过ChatMemory,AI模型能够:

记住对话的上下文

理解用户的后续问题

提供更加连贯和个性化的回复

环境搭建
首先,让我们创建一个Spring Boot项目并添加必要的依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.springai</groupId>
        <artifactId>Ai</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>langchain4j-chatmemory</artifactId>
    <packaging>jar</packaging>

    <name>langchain4j-chatmemory</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j</artifactId>
        </dependency>


        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-open-ai</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>
创建service接口

package com.springai.service;

import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.UserMessage;

public interface ChatAssistant {
    
    
    /*
    * @Param userId 用户id 
    * @Param message 用户消息
    * */
    String chat(@MemoryId Long userId, @UserMessage String message);
}
编写配置类创建模块元信息

package com.springai.config;

import com.springai.service.ChatAssistant;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class LLMConfig {

    @Bean
    public ChatLanguageModel chatLanguageModel() {
        ChatLanguageModel chatLanguageModel = OpenAiChatModel.builder()
                //apiKey
                .apiKey("sk-3dbcd881d8db42ddb24e1b095539f72e")
                //模型名称
                .modelName("qwen3-max")
                //baseUrl
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                //是否记录请求
                .logRequests(true)
                //是否记录响应
                .logResponses(true)
                .build();
        return chatLanguageModel;
    }

    @Bean
    public ChatAssistant chatAssistant(ChatLanguageModel chatLanguageModel) {
        return AiServices.builder(ChatAssistant.class)
                //语言模型
                .chatLanguageModel(chatLanguageModel)
                //聊天记忆
                .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10))
                .build();
    }
}
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐