langchain4j整合mongo实现对话记忆
依赖
<dependencyManagement>
<!--langchain包管理-->
<dependencies>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-bom</artifactId>
<version>1.0.0-beta3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--整合阿里百炼-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-bom</artifactId>
<version>1.0.0-beta3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
配置
langchain4j:
community:
dashscope:
chat-model:
api-key: ${ALI_API_KEY}
model-name: qwen-max
spring:
data:
mongodb:
uri: mongodb://localhost:27017/test
存储类
@Component
public class MongoChatMemoryStore implements ChatMemoryStore {
@Autowired
private MongoTemplate mongoTemplate;
@Override
public List<ChatMessage> getMessages(Object o) {
Query query = new Query(Criteria.where("memoryId").is(o));
ChatMessages chatMessages = mongoTemplate.findOne(query, ChatMessages.class);
if (chatMessages == null) {
return List.of();
}
String content = chatMessages.getContent();
return ChatMessageDeserializer.messagesFromJson(content);
}
@Override
public void updateMessages(Object o, List<ChatMessage> list) {
Query query = new Query(Criteria.where("memoryId").is(o));
String s = ChatMessageSerializer.messagesToJson(list);
Update update = new Update();
update.set("content", s);
mongoTemplate.upsert(query, update, ChatMessages.class);
}
@Override
public void deleteMessages(Object o) {
Query query = new Query(Criteria.where("memoryId").is(o));
mongoTemplate.remove(query, ChatMessages.class);
}
}
配置类
@Configuration
public class AIConfig {
@Bean
public ChatMemoryProvider chatMemoryProvider(MongoChatMemoryStore store){
return mid-> MessageWindowChatMemory.builder()
.id(mid)//对话隔离
.maxMessages(10)
.chatMemoryStore(store)//使用存储类
.build();
}
}
AiService
@AiService(wiringMode = AiServiceWiringMode.EXPLICIT,
chatModel = "qwenChatModel",
chatMemoryProvider = "chatMemoryProvider")
public interface Assistant {
String chat(@MemoryId Integer id,@UserMessage String message);
}
controller
@RestController
@RequestMapping("chat")
public class ChatController {
@Autowired
private Assistant assistant;
@GetMapping("{id}/{message}")
public String chat(@PathVariable Integer id,@PathVariable("message") String message) {
return assistant.chat(id,message);
}
}