Langchain4j 整合向量数据库
上传知识库到pinecone
@SpringBootTest
public class PineconeTest {@Resourceprivate EmbeddingStore embeddingStore;@Resourceprivate EmbeddingModel embeddingModel;@Testpublic void testUploadKnowledgeLibrary() {//使用ClassPathDocumentLoader读取指定目录下的知识库文档//并使用默认的文档解析器对文档进行解析Document document1 = ClassPathDocumentLoader.loadDocument("knowledge/医院信息.md");Document document2 = ClassPathDocumentLoader.loadDocument("knowledge/科室信息.md");Document document3 = ClassPathDocumentLoader.loadDocument("knowledge/神经内科.md");List<Document> documents = Arrays.asList(document1, document2, document3);//文本向量化并存入向量数据库:将每个片段进行向量化,得到一个嵌入向量EmbeddingStoreIngestor.builder().embeddingStore(embeddingStore) //向量数据库,pinecone.embeddingModel(embeddingModel).build().ingest(documents);}
}

修改XiaozhiAgentConfig
@Resourceprivate EmbeddingStore embeddingStore;@Resourceprivate EmbeddingModel embeddingModel;@BeanContentRetriever contentRetrieverXiaozhiPinecone() {// 创建一个 EmbeddingStoreContentRetriever 对象,用于从嵌入存储中检索内容return EmbeddingStoreContentRetriever.builder()// 设置用于生成嵌入向量的嵌入模型.embeddingModel(embeddingModel)// 指定要使用的嵌入存储.embeddingStore(embeddingStore)// 设置最大检索结果数量,这里表示最多返回 1 条匹配结果.maxResults(1)// 设置最小得分阈值,只有得分大于等于 0.8 的结果才会被返回.minScore(0.8)// 构建最终的 EmbeddingStoreContentRetriever 实例.build();}
修改XiaozhiAgent
@AiService(wiringMode = AiServiceWiringMode.EXPLICIT,streamingChatModel = "qwenStreamingChatModel",chatMemory = "chatMemory",chatMemoryProvider = "chatMemoryProviderXiaozhi",tools = "appointmentTools",
// contentRetriever = "contentRetriever" ,// 使用内存存储向量数据contentRetriever = "contentRetrieverXiaozhiPinecone" // 使用pinecone存储向量数据
) // 添加内容检索工具
public interface XiaozhiAgent {@SystemMessage(fromResource = "xiaozhi-prompt-template.txt")Flux<String> chat(@MemoryId Long memoryId, @UserMessage String userMessage);}