ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

LangChainForJava?/Spring集成/流式输出/会话记忆Redis/Rag

LangChainForJava?/Spring集成/流式输出/会话记忆Redis/Rag

如果采用最原始的方法用Spring集成大模型,势必会引起大量繁杂众多的代码。我们可以利用Langchain4J提供的框架或者使用Spring Ai都可以集成。都能快速搭建我们的基于大模型的项目。

1. 基于流式输出的配置

2. 会话控制器

 3. AIService

4. 会话记忆对象

5. 基于redis存储的ChatMemoryStore

@Repository
public class RedisChatMemoryStore implements ChatMemoryStore {@Autowiredprivate StringRedisTemplate redisTemplate;@Overridepublic List<ChatMessage> getMessages(Object memoryId) {System.err.println("开始获取消息");String json = redisTemplate.opsForValue().get(memoryId);//将json转换成listList<ChatMessage> list = ChatMessageDeserializer.messagesFromJson(json);System.out.println("记忆消息列表:"+list);return list;}@Overridepublic void updateMessages(Object memoryId, List<ChatMessage> list) {System.err.println("开始更新消息");//更新会话参数//将list转换成jsonString json = ChatMessageSerializer.messagesToJson(list);//将json数据存储到redis中 1天后删除redisTemplate.opsForValue().set(memoryId.toString(),json, Duration.ofDays(1));}@Overridepublic void deleteMessages(Object memoryId) {System.err.println("删除消息");redisTemplate.delete(memoryId.toString());}
}

6. Rag

1. 文档加载器

 

2. 文档解析器 

默认使用的是ApacheTika文档解析器,虽然几乎可以解析所有格式文件,但如果对于专业解析能力不强。

    // 构建向量数据库@Beanpublic EmbeddingStore store(){//加载文档到内存中 指定文档解析器 默认不写为ApacheTikaDocumentParserList<Document> documents = ClassPathDocumentLoader.loadDocuments("content",new ApacheTikaDocumentParser());// 构建向量数据库InMemoryEmbeddingStore store = new InMemoryEmbeddingStore();//构建EmbeddingStoreIngestor 分词器 对文本进行切割 向量化 存储到向量数据库EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder().embeddingStore(store).build();// 输入文本ingestor.ingest(documents);return store;}

3. 文档分割器 

 无论是按照段落,行,句子,词... 最后在向量数据库还是要组成一个chunk进行向量化。

为了进一步保证chunk的稳定以及生成效果

我们一般使用递归分割器。大到小 --> 填满chunk

4. 向量模型

替换LangChain4J内嵌的向量模型,提升效果

5. 向量数据库RedisSearch 

完整项目代码获取:私聊+点赞

返回列表