spring boot + langchain4j +milvus实现向量存储
我在gitee上有整体的项目示例有兴趣的可以拉下来看看https://gitee.com/JR542784/langchain4j-test如果不知道怎么部署milvus可以从我的主页走索milvus有相关的说明POM相关依赖propertiesjava.version21/java.versionjunit.platform.version1.9.2/junit.platform.versionjunit.jupiter.version5.9.2/junit.jupiter.versionlangchain4j.version0.36.2/langchain4j.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-webmvc/artifactId/dependencydependencygroupIddev.langchain4j/groupIdartifactIdlangchain4j-spring-boot-starter/artifactIdversion${langchain4j.version}/version/dependencydependencygroupIddev.langchain4j/groupIdartifactIdlangchain4j-milvus-spring-boot-starter/artifactIdversion${langchain4j.version}/version/dependency!-- Source: https://mvnrepository.com/artifact/dev.langchain4j/langchain4j-spring-boot-starter --dependencygroupIddev.langchain4j/groupIdartifactIdlangchain4j-open-ai-spring-boot-starter/artifactIdversion${langchain4j.version}/version/dependencydependencygroupIddev.langchain4j/groupIdartifactIdlangchain4j-open-ai/artifactIdversion${langchain4j.version}/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope!-- 4.0.x 已经没有 vintage可省略 exclusion --/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency/dependencies配置AiServiceimportcom.ai.langchain.langchain4jtest.service.AiHelperService;importdev.langchain4j.memory.ChatMemory;importdev.langchain4j.memory.chat.MessageWindowChatMemory;importdev.langchain4j.model.chat.ChatLanguageModel;importdev.langchain4j.rag.content.retriever.ContentRetriever;importdev.langchain4j.service.AiServices;importjakarta.annotation.Resource;importorg.springframework.beans.factory.annotation.Configurable;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;/** * author JR * version 1.0 * description: * date 2026年05月25日 17:39 */ConfigurationpublicclassAiServiceConfig{ResourceprivateChatLanguageModelqwenChatModel;ResourceprivateContentRetrievercontentRetriever;/** * 加入RAG检索增强生成 * return */BeanpublicAiHelperServiceaiHelperService(){ChatMemorymessageWindowChatMemoryMessageWindowChatMemory.withMaxMessages(10);returnAiServices.builder(AiHelperService.class).chatLanguageModel(qwenChatModel).chatMemory(messageWindowChatMemory).chatMemoryProvider(memoryId-messageWindowChatMemory).contentRetriever(contentRetriever).tools().build();}}RAG的相关配置importdev.langchain4j.data.segment.TextSegment;importdev.langchain4j.model.embedding.EmbeddingModel;importdev.langchain4j.rag.content.retriever.ContentRetriever;importdev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;importdev.langchain4j.store.embedding.EmbeddingStore;importjakarta.annotation.Resource;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;/** * author JR * version 1.0 * description: * date 2026年05月25日 18:45 */ConfigurationpublicclassAiRagConfig{ResourceprivateEmbeddingModelqwenEmbeddingModel;// EmbeddingStore 的作用是什么Resource(namemilvusEmbeddingStore)privateEmbeddingStoreTextSegmentembeddingStore;/** * 检索器Bean用于问答时从Milvus检索向量不负责入库 */BeanpublicContentRetrievercontentRetriever(){returnEmbeddingStoreContentRetriever.builder().embeddingStore(embeddingStore).embeddingModel(qwenEmbeddingModel).maxResults(5)// 召回top5.minScore(0.75)// 相似度阈值过滤低相关.build();}}AiService的接口/** * author JR * version 1.0 * description: * date 2026年05月25日 17:35 */publicinterfaceAiHelperService{SystemMessage(fromResourcePrompt.txt)Stringchat(StringuserMessage);SystemMessage(fromResourcePrompt.txt)ReportchatReport(StringuserMessage);recordReport(Stringname,ListStringsuggetionList){}}不同调用方式的调用importcom.ai.langchain.langchain4jtest.service.ChatService;importdev.langchain4j.data.message.AiMessage;importdev.langchain4j.data.message.SystemMessage;importdev.langchain4j.data.message.UserMessage;importdev.langchain4j.data.segment.TextSegment;importdev.langchain4j.model.chat.ChatLanguageModel;importdev.langchain4j.model.chat.request.ChatRequest;importdev.langchain4j.model.chat.response.ChatResponse;importdev.langchain4j.store.embedding.EmbeddingStore;importio.milvus.client.MilvusClient;importjakarta.annotation.Resource;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;/** * author JR * version 1.0 * description: * date 2026年05月25日 10:09 */Slf4jServicepublicclassChatServiceImplimplementsChatService{privatestaticfinalStringCOLLECTION_NAMEtest_collection;ResourceprivateChatLanguageModelqwenChatModel;privateStringSYSTEM_MESSAGE 你是AI面试助手**小光**专注面试题库检索、答案整理与分类工作。 1. 接收用户面试相关提问精准检索对应面试题目、标准答案与解题思路 2. 按**技术方向、难度等级、题型类别**规整划分内容 3. 排版清晰简洁题目与答案分区展示冗余信息剔除 4. 主动区分基础题、进阶题、实操题、问答论述题按需归类输出 5. 严格围绕面试考点作答不偏离求职面试场景 ;OverridepublicStringchat(StringmessageChat){// 1. 组装消息UserMessageuserMsgUserMessage.from(你的提问内容);ChatRequestchatRequestChatRequest.builder().messages(userMsg).build();ChatResponseresponseqwenChatModel.chat(chatRequest);AiMessageaiMessageresponse.aiMessage();log.info(ai message:{},aiMessage.toString());returnaiMessage.text();}OverridepublicStringchatUserMessage(UserMessageuserMessage){ChatRequestchatRequestChatRequest.builder().messages(userMessage).build();ChatResponseresponseqwenChatModel.chat(chatRequest);AiMessageaiMessageresponse.aiMessage();log.info(ai message:{},aiMessage.toString());returnaiMessage.text();}OverridepublicStringchatPrompt(Stringmessage){SystemMessagesystemMessagenewSystemMessage(SYSTEM_MESSAGE);UserMessageuserMessageUserMessage.from(message);ChatRequestchatRequestChatRequest.builder().messages(systemMessage,userMessage).build();ChatResponseresponseqwenChatModel.chat(chatRequest);AiMessageaiMessageresponse.aiMessage();log.info(ai message:{},aiMessage.toString());returnaiMessage.text();}}单元测试importcom.ai.langchain.langchain4jtest.service.AiHelperService;importcom.ai.langchain.langchain4jtest.service.ChatService;importcom.ai.langchain.langchain4jtest.service.MilvusVectorIngestService;importdev.langchain4j.data.message.ImageContent;importdev.langchain4j.data.message.TextContent;importdev.langchain4j.data.message.UserMessage;importjakarta.annotation.Resource;importorg.junit.jupiter.api.Test;importorg.springframework.boot.test.context.SpringBootTest;SpringBootTestclassLangchain4jTestApplicationTests{ResourceprivateChatServicechatService;ResourceprivateAiHelperServiceaiHelperService;TestpublicvoidbaseChat(){// 普通文本处理模型在yml中进行配置StringresponseMessagechatService.chat(你好我是安多尼);System.out.println(responseMessage);}TestpublicvoidchatImageHandel(){// 需要使用多模态的模型在yml中进行配置// 还可以处理其他文件相关的对象有// AudioContent VideoContent PdfFileContent TextContent ImageContent// 音频视频pdf,文本图片UserMessageuserMessagenewUserMessage(TextContent.from(这张图片的内容是什么),ImageContent.from(https://tse4.mm.bing.net/th/id/OIP.bl-kQplMxE9HV27SrrmekAHaLn?r0rs1pidImgDetMaino7rm3));StringresponseMessagechatService.chatUserMessage(userMessage);System.out.println(responseMessage);}/** * 系统预设提示词可以指定ai的身份作用等等 */TestpublicvoidchatPrompt(){// 需要使用多模态的模型在yml中进行配置// 还可以处理其他文件相关的对象有// AudioContent VideoContent PdfFileContent TextContent ImageContent// 音频视频pdf,文本图片StringresponseMessagechatService.chatPrompt(你是谁你的功能是什么);System.out.println(responseMessage);}/** * 通过aiService实现ai的调用(无会话记忆) */TestpublicvoidchatPromptAiService(){// 需要使用多模态的模型在yml中进行配置// 还可以处理其他文件相关的对象有// AudioContent VideoContent PdfFileContent TextContent ImageContent// 音频视频pdf,文本图片StringresponseMessageaiHelperService.chat(你是谁你的功能是什么);System.out.println(responseMessage);}TestpublicvoidchatPromptMemoryAiService(){StringresponseMessageaiHelperService.chat(现在是那年哪月那日星期几);System.out.println(AI第一次回答responseMessage);responseMessageaiHelperService.chat(我刚刚问了你什么问题你怎么回答的);System.out.println(AI第二次回答responseMessage);}/** * 以Json scheam的方式返回数据 */TestpublicvoidchatJsonScheam(){AiHelperService.ReportreportaiHelperService.chatReport(给我几条学习建议规划一些学习目标);System.out.println(report);System.out.println(report.suggetionList().size());}ResourceprivateMilvusVectorIngestServicemilvusVectorIngestService;TestpublicvoidchatRag(){// RAG相关配置需要查看AiRagConfig中的contentRetrieverStringresponseMessageaiHelperService.chat(JDK命令行工具有哪些);System.out.println(responseMessage);}/** * 加载文档并向量化后存入milvus向量数据库中 */TestpublicvoidloadDocsToMilvus(){milvusVectorIngestService.loadDocsToMilvus();}}