当前位置: 首页 > 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.dtcms.com/a/294240.html

相关文章:

  • 世博会无法在Android上启动项目:无法连接到TCP端口5554:连接被拒绝
  • 2025暑期—05神经网络-BP网络
  • PyCharm配置python软件安装步骤(附安装包)PyCharm 2025 超详细下载安装教程
  • 【CNN】LeNet网络架构
  • 盟接之桥说制造:浅谈“客供共生关系”:构建能力闭环,实现价值共赢
  • 论文笔记:On the Biology of a Large Language Model
  • Java 高频算法
  • Python通关秘籍(七)数据结构——集合
  • mysql什么时候用char,varchar,text,longtext
  • Git 完全手册:从入门到团队协作实战(4)
  • 经典神经网络之LetNet
  • 【前沿技术动态】【AI总结】RustFS:从 0 到 1 打造下一代分布式对象存储
  • Java 时间处理 API 全解析:从 JDK7 到 JDK8 的演进
  • 有序数组中出现次数超过25%的元素
  • 数字人形象视频:开启虚拟世界的全新篇章
  • Linux 723 磁盘配额 限制用户写入 quota;snap快照原理
  • IRF 真机实验
  • [AI8051U入门第八步]硬件IIC驱动AHT10温湿度传感器
  • 密码学中的概率论与统计学:从频率分析到现代密码攻击
  • 【Kubernetes】集群启动nginx,观察端口映射,work节点使用kubectl配置
  • scikit-learn 包
  • 【后端】 FastAPI
  • AI替代人工:浪潮中的沉浮与觉醒
  • LNMP-zblog分布式部署
  • 前端/后端,前台/中台/后台概念区别
  • kafka 消费者组
  • RLVR的一种扩展方案--RLPR论文阅读
  • 负压产生电路分析
  • 新增 UART 消息 - OpenExo
  • 【markdown】 VSCode 使用 Markdown Preview Enhanced 插件转PDF