当前位置: 首页 > news >正文

springboot集成LangChain4j

langchain4j和springboot3需要安装jdk17环境
本次测试使用的 https://qwen3.slmnb.cn/#api,免费的api测试

一、测试案例

1、改pom

<?xml version="1.0" encoding="UTF-8"?>
<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><groupId>org.openchat</groupId><artifactId>openchat</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-boot.version>3.2.6</spring-boot.version><knife4j.version>4.3.0</knife4j.version><langchain4j.version>1.0.0-beta3</langchain4j.version><mybatis-plus.version>3.5.11</mybatis-plus.version><java.version>17</java.version><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><tomcat.version>10.1.24</tomcat.version></properties><dependencies><!-- web应用程序核心依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 编写和运行测试用例 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai-spring-boot-starter</artifactId></dependency></dependencies><dependencyManagement><dependencies><!--引入SpringBoot依赖管理清单--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!--引入langchain4j依赖管理清单--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-bom</artifactId><version>${langchain4j.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version> <!-- 使用最新版本 --><configuration><source>17</source><target>17</target><release>17</release> <!-- 重要:确保使用JDK9+的release参数 --></configuration></plugin></plugins></build>
</project>

2、改配置

servert:port: 8081tomcat:apr:enabled: false
langchain4j:open-ai:chat-model:base-url: "https://api.suanli.cn/v1"api-key: "you-key"model-name: "deepseek-r1"log-requests: truelog-responses: true

3、测试类

public class LLMTest {@Autowiredprivate OpenAiChatModel openAiChatModel;@Testpublic void testAiChatModel() {//向模型提问String answer = openAiChatModel.chat("你是谁");//输出结果System.out.println("输出结果:" + answer);}
}

在这里插入图片描述

二、ChatMemery实现记忆,ChatMemoryStore实现持久化

1、ChatMemery实现记忆

1.1 ChatMemory 实现类对比

LangChain4j 提供两种实现,适应不同场景:

  • MessageWindowChatMemory: 保留最近的 N 条消息,适用于原型开发、轻量级对话。 ⚡ 简单高效;❌ 忽略 token 长度,可能超限
  • TokenWindowChatMemory: 保留最近的 N 个 tokens,适用于生产环境、成本敏感场景 ✅ 精准控制 token 用量;❌ 需搭配 Tokenizer(如 OpenAiTokenizer)
@Configuration
public class MemoryConfig {@Beanpublic ChatMemoryProvider chatMemoryProvider(ChatMemoryStore store) {return memoryId -> MessageWindowChatMemory.builder().id(memoryId).maxMessages(10).chatMemoryStore(store).build();}
}

2、ChatMemoryStore持久化

通过实现 ChatMemoryStore 接口,可将消息存储到 Redis、数据库等。以下是 Redis 持久化 的完整示例:

pom

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

yaml

spring:data:redis:host: localhostport: 6379database: 0

实现ChatMemoryStore接口

@Component
public class RedisChatMemoryStore implements ChatMemoryStore {@Autowiredprivate RedisTemplate<String, String> redisTemplate;@Overridepublic List<ChatMessage> getMessages(Object memoryId) {String key = "chat:" + memoryId;String json = redisTemplate.opsForValue().get(key);return (json != null) ? ChatMessageDeserializer.messagesFromJson(json) : List.of();}@Overridepublic void updateMessages(Object memoryId, List<ChatMessage> messages) {String key = "chat:" + memoryId;String json = ChatMessageSerializer.messagesToJson(messages);redisTemplate.opsForValue().set(key, json);}@Overridepublic void deleteMessages(Object memoryId) {redisTemplate.delete("chat:" + memoryId);}
}
@AiService
public interface ChatAssistant {String chat(@MemoryId String sessionId, @UserMessage String input);
}

3、测试

public class LLMTest {private static final Logger logger = LogManager.getLogger(LLMTest.class);@Autowiredprivate ChatAssistant chatAssistant;@Testpublic void testAliAiChat() {logger.info("sessionId1问我是李四:" + chatAssistant.chat("sessionId1", "我是李四"));logger.info("sessionId1问我12岁了:" + chatAssistant.chat("sessionId1", "我13岁了"));logger.info("sessionId1我是谁,我多少岁:" + chatAssistant.chat("sessionId1", "我是谁,我多少岁"));logger.info("sessionId2我是谁,我多少岁:" + chatAssistant.chat("sessionId2", "我是谁,我多少岁"));}
}

Tokenizer tokenizer = new OpenAiTokenizer("gpt-4o");
ChatMemory memory = TokenWindowChatMemory.builder()
.maxTokens(4096)  // 设置内存容量上限
.tokenizer(tokenizer)
.build();在这里插入图片描述

http://www.lryc.cn/news/597232.html

相关文章:

  • 华为仓颉编程语言实践体验
  • 开源 Arkts 鸿蒙应用 开发(十)通讯--Http数据传输
  • 高级IO简单介绍
  • 小架构step系列23:加载自定义配置
  • 基于 XGBoost 与 SHAP 的医疗自动化办公与可视化系统(上)
  • 快速梳理遗留项目
  • AI聊天方案:vue+nodeJs+SSE
  • Git 常用的提交类型
  • NX741NX777美光固态闪存NX783NX791
  • CentOS 7 Linux 基础知识点汇总
  • Day01_C++
  • 河南萌新联赛2025第二场-河南农业大学
  • 第九讲:C++中的list与forward_list
  • (进阶向)Python第十三期,opencv的图像预处理方法[1]
  • 性能测试-jmeter实战5
  • 28. 探秘重写与重载:面向对象基础
  • ubuntulinux快捷键
  • Ubuntu 1804 编译ffmpeg qsv MediaSDK libva 遇到的问题记录
  • freqtrade在docker运行一个dryrun实例
  • Python实战:基于Streamlit的股票筛选系统,实时K线图+数据缓存优化
  • C/C++中的内存管理
  • uniapp+vue3小程序点击保存图片、保存二维码
  • 一洽客服系统:小程序接入功能说明
  • 优化:Toc小程序猜你喜欢功能
  • 校园后勤服务平台小程序的设计与实现
  • FastGPT + Kymo:解锁企业专属知识库与智能体开发新体验
  • 【黑马SpringCloud微服务开发与实战】(六)分布式事务
  • Leetcode力扣解题记录--第54题(矩阵螺旋)
  • 算法:数组part01:704. 二分查找 +977.有序数组的平方
  • Java开发岗面试记录合集