SpringBoot LangChain4j 模型接入(一)
若依项目改造,springboot3 java17 langchain4j官网地址:https://docs.langchain4j.dev/
一、Langchain4j pom依赖 ollama本地模型
<!-- langchain4j的依赖配置-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
<version>${langchain.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>1.15.0</version>
</dependency><dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-http-client-spring-restclient</artifactId>
<version>${langchain.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-ollama</artifactId>
<version>1.10.0</version>
</dependency>二、模型配置、以及消息会话的配置(使用redis作为消息会话持久化存储)
模型配置
@GetMapping("/chat")
public String test(String msg) {
HttpClientBuilder httpClientBuilder = new SpringRestClientBuilder();
if (assistant == null) {
ChatModel ollamaChatModel = OllamaChatModel.builder()
.baseUrl("http://192.168.2.136:11434")
.modelName("qwen3:8b")
.httpClientBuilder(httpClientBuilder)
.logRequests(true)
.logResponses(true)
.build();
assistant = AiServices.builder(Assistant.class)
.chatModel(ollamaChatModel)
.chatMemoryProvider(getChatMemoryProvider("12345"))
.build();
}
String chat = assistant.chat("12345", msg);
return chat;
}
public ChatMemoryProvider getChatMemoryProvider(String memoryId) {
ChatMemoryProvider provider = new ChatMemoryProvider() {
@Override
public ChatMemory get(Object o) {
ChatMemory m = MessageWindowChatMemory.builder().id(memoryId).maxMessages(100)
.chatMemoryStore(redisChatMemoryStore).build();
return m;
}
};
return provider;
}@AiService
public interface Assistant {
@SystemMessage("You are a polite assistant")
String chat(@MemoryId String memoryId, @UserMessage String userMessage);
}redis 会话存储
@Component
public class RedisChatMemoryStore implements ChatMemoryStore {
private final StringRedisTemplate redisTemplate;
// 定义一个 Key 前缀,防止和其他 Redis 数据冲突
private static final String KEY_PREFIX = "chat:memory:";
// 定义数据过期时间,例如 7 天后自动删除闲置的聊天记录
private static final Duration TTL = Duration.ofDays(7);
public RedisChatMemoryStore(StringRedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
@Override
public List<ChatMessage> getMessages(Object memoryId) {
// 1. 拼接 Key
String key = KEY_PREFIX + memoryId;
// 2. 从 Redis 获取 JSON 字符串
String json = redisTemplate.opsForValue().get(key);
// 3. 如果为空,返回空列表;否则反序列化
if (json == null || json.isEmpty()) {
return new ArrayList<>();
}
return messagesFromJson(json);
}
@Override
public void updateMessages(Object memoryId, List<ChatMessage> messages) {
String key = KEY_PREFIX + memoryId;
String json = messagesToJson(messages);
// 4. 保存到 Redis,并设置过期时间
// set(key, value, timeout)
redisTemplate.opsForValue().set(key, json, TTL);
}
@Override
public void deleteMessages(Object memoryId) {
String key = KEY_PREFIX + memoryId;
redisTemplate.delete(key);
}
}三、会话测试

