package com.ruoyi.ai.config; import com.ruoyi.ai.store.MongoChatMemoryStore; import dev.langchain4j.data.document.Document; import dev.langchain4j.data.document.loader.FileSystemDocumentLoader; import dev.langchain4j.data.segment.TextSegment; import dev.langchain4j.memory.chat.ChatMemoryProvider; import dev.langchain4j.memory.chat.MessageWindowChatMemory; import dev.langchain4j.model.embedding.EmbeddingModel; import dev.langchain4j.rag.content.retriever.ContentRetriever; import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever; import dev.langchain4j.store.embedding.EmbeddingStore; import dev.langchain4j.store.embedding.EmbeddingStoreIngestor; import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.Collections; import java.util.List; /** * @author :yys * @date : 2025/5/2 20:01 */ @Configuration public class XiaozhiAgentConfig { @Autowired private MongoChatMemoryStore mongoChatMemoryStore; @Autowired private EmbeddingStore embeddingStore; @Autowired private EmbeddingModel embeddingModel; @Value("${knowledge.one}") private String one; // // @Value("${knowledge.two}") // private String two; // // @Value("${knowledge.three}") // private String three; @Bean ChatMemoryProvider chatMemoryProviderXiaozhi() { return memoryId -> MessageWindowChatMemory.builder() .id(memoryId) .maxMessages(20) .chatMemoryStore(mongoChatMemoryStore) .build(); } // @Bean // ContentRetriever contentRetrieverXiaozhi() { // //使用FileSystemDocumentLoader读取指定目录下的知识库文档 // //并使用默认的文档解析器对文档进行解析 // Document document1 = FileSystemDocumentLoader.loadDocument(one); //// Document document2 = FileSystemDocumentLoader.loadDocument(two); //// Document document3 = FileSystemDocumentLoader.loadDocument(three); //// List documents = Arrays.asList(document1, document2, document3); // // List documents = Collections.singletonList(document1); //// 2. 将数据库数据转为LangChain4j的Document对象 //// List documents = new ArrayList<>(); // // //使用内存向量存储 // InMemoryEmbeddingStore inMemoryEmbeddingStore = new InMemoryEmbeddingStore<>(); // //使用默认的文档分割器 // EmbeddingStoreIngestor.builder() // .embeddingModel(embeddingModel) // .embeddingStore(inMemoryEmbeddingStore) // .build() // .ingest(documents); // //从嵌入存储(EmbeddingStore)里检索和查询内容相关的信息 // return EmbeddingStoreContentRetriever.builder() // .embeddingModel(embeddingModel) // .embeddingStore(inMemoryEmbeddingStore) // .build(); // } @Bean ContentRetriever contentRetrieverXiaozhiPincone() { // 创建一个 EmbeddingStoreContentRetriever 对象,用于从嵌入存储中检索内容 return EmbeddingStoreContentRetriever .builder() // 设置用于生成嵌入向量的嵌入模型 .embeddingModel(embeddingModel) // 指定要使用的嵌入存储 .embeddingStore(embeddingStore) // 设置最大检索结果数量,这里表示最多返回 1 条匹配结果 .maxResults(1) // 设置最小得分阈值,只有得分大于等于 0.8 的结果才会被返回 .minScore(0.8) // 构建最终的 EmbeddingStoreContentRetriever 实例 .build(); } }