当前位置: 首页 > news >正文

spring boot + langchain4j +milvus实现向量存储

我在gitee上有整体的项目示例,有兴趣的可以拉下来看看:https://gitee.com/JR542784/langchain4j-test,如果不知道怎么部署milvus可以从我的主页走索milvus有相关的说明

POM相关依赖

<properties><java.version>21</java.version><junit.platform.version>1.9.2</junit.platform.version><junit.jupiter.version>5.9.2</junit.jupiter.version><langchain4j.version>0.36.2</langchain4j.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webmvc</artifactId></dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-spring-boot-starter</artifactId><version>${langchain4j.version}</version></dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-milvus-spring-boot-starter</artifactId><version>${langchain4j.version}</version></dependency><!-- Source: https://mvnrepository.com/artifact/dev.langchain4j/langchain4j-spring-boot-starter --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai-spring-boot-starter</artifactId><version>${langchain4j.version}</version></dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId><version>${langchain4j.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><!-- 4.0.x 已经没有 vintage,可省略 exclusion --></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies>

配置AiService

importcom.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(){ChatMemorymessageWindowChatMemory=MessageWindowChatMemory.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(name="milvusEmbeddingStore")privateEmbeddingStore<TextSegment>embeddingStore;/** * 检索器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(fromResource="Prompt.txt")Stringchat(StringuserMessage);@SystemMessage(fromResource="Prompt.txt")ReportchatReport(StringuserMessage);recordReport(Stringname,List<String>suggetionList){}}

不同调用方式的调用

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 */@Slf4j@ServicepublicclassChatServiceImplimplementsChatService{privatestaticfinalStringCOLLECTION_NAME="test_collection";@ResourceprivateChatLanguageModelqwenChatModel;privateStringSYSTEM_MESSAGE=""" 你是AI面试助手**小光**,专注面试题库检索、答案整理与分类工作。 1. 接收用户面试相关提问,精准检索对应面试题目、标准答案与解题思路 2. 按**技术方向、难度等级、题型类别**规整划分内容 3. 排版清晰简洁,题目与答案分区展示,冗余信息剔除 4. 主动区分基础题、进阶题、实操题、问答论述题,按需归类输出 5. 严格围绕面试考点作答,不偏离求职面试场景 """;@OverridepublicStringchat(StringmessageChat){// 1. 组装消息UserMessageuserMsg=UserMessage.from("你的提问内容");ChatRequestchatRequest=ChatRequest.builder().messages(userMsg).build();ChatResponseresponse=qwenChatModel.chat(chatRequest);AiMessageaiMessage=response.aiMessage();log.info("ai message:{}",aiMessage.toString());returnaiMessage.text();}@OverridepublicStringchatUserMessage(UserMessageuserMessage){ChatRequestchatRequest=ChatRequest.builder().messages(userMessage).build();ChatResponseresponse=qwenChatModel.chat(chatRequest);AiMessageaiMessage=response.aiMessage();log.info("ai message:{}",aiMessage.toString());returnaiMessage.text();}@OverridepublicStringchatPrompt(Stringmessage){SystemMessagesystemMessage=newSystemMessage(SYSTEM_MESSAGE);UserMessageuserMessage=UserMessage.from(message);ChatRequestchatRequest=ChatRequest.builder().messages(systemMessage,userMessage).build();ChatResponseresponse=qwenChatModel.chat(chatRequest);AiMessageaiMessage=response.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中进行配置StringresponseMessage=chatService.chat("你好,我是安多尼");System.out.println(responseMessage);}@TestpublicvoidchatImageHandel(){// 需要使用多模态的模型,在yml中进行配置// 还可以处理其他文件,相关的对象有:// AudioContent VideoContent PdfFileContent TextContent ImageContent// 音频,视频,pdf,文本,图片UserMessageuserMessage=newUserMessage(TextContent.from("这张图片的内容是什么"),ImageContent.from("https://tse4.mm.bing.net/th/id/OIP.bl-kQplMxE9HV27SrrmekAHaLn?r=0&rs=1&pid=ImgDetMain&o=7&rm=3"));StringresponseMessage=chatService.chatUserMessage(userMessage);System.out.println(responseMessage);}/** * 系统预设提示词,可以指定ai的身份作用等等 */@TestpublicvoidchatPrompt(){// 需要使用多模态的模型,在yml中进行配置// 还可以处理其他文件,相关的对象有:// AudioContent VideoContent PdfFileContent TextContent ImageContent// 音频,视频,pdf,文本,图片StringresponseMessage=chatService.chatPrompt("你是谁?你的功能是什么?");System.out.println(responseMessage);}/** * 通过aiService实现ai的调用(无会话记忆) */@TestpublicvoidchatPromptAiService(){// 需要使用多模态的模型,在yml中进行配置// 还可以处理其他文件,相关的对象有:// AudioContent VideoContent PdfFileContent TextContent ImageContent// 音频,视频,pdf,文本,图片StringresponseMessage=aiHelperService.chat("你是谁?你的功能是什么?");System.out.println(responseMessage);}@TestpublicvoidchatPromptMemoryAiService(){StringresponseMessage=aiHelperService.chat("现在是那年哪月那日,星期几");System.out.println("AI第一次回答:"+responseMessage);responseMessage=aiHelperService.chat("我刚刚问了你什么问题,你怎么回答的");System.out.println("AI第二次回答:"+responseMessage);}/** * 以Json scheam的方式返回数据 */@TestpublicvoidchatJsonScheam(){AiHelperService.Reportreport=aiHelperService.chatReport("给我几条学习建议,规划一些学习目标");System.out.println(report);System.out.println(report.suggetionList().size());}@ResourceprivateMilvusVectorIngestServicemilvusVectorIngestService;@TestpublicvoidchatRag(){// RAG相关配置需要查看AiRagConfig中的contentRetrieverStringresponseMessage=aiHelperService.chat("JDK命令行工具有哪些");System.out.println(responseMessage);}/** * 加载文档并向量化后存入milvus(向量数据库)中 */@TestpublicvoidloadDocsToMilvus(){milvusVectorIngestService.loadDocsToMilvus();}}
http://www.zskr.cn/news/1534588.html

相关文章:

  • 2026佛山本地防雷检测哪家专业?TOP 正规机构榜单 + 防雷装置 + 接地电阻 + SPD 检测 附电话地址 - 中安检测集团
  • 南京玄武区黄金回收市场揭秘:六家正规机构行情与避坑指南 - 上门黄金回收
  • 枚举 jvm图
  • LKP2074S系列1.5A低噪声LDO芯片,直击噪声痛点,赋能高精度电源设计
  • 抖音无水印下载终极指南:douyin-downloader完整教程与实战技巧
  • 2026年安徽省中考结束低分段考不上高中适合去哪所学校? - 小张zc
  • okbiye 文献综述 AI 创作:打通引文、撰写、自检全链路,破解综述撰写低效难题
  • 贵州智能酒店产品公司推荐 | 4家经验型服务商深度盘点 - 互联网科技品牌测评
  • 2026 xmind最新保姆级安装教程图解(亲测可用)
  • 2026濮阳本地认可的 5 家排污许可废气废水监测机构实地测评汇总 废水废气 + 自行监测 + CMA 检测报告 附电话地址 - 科信检测
  • 2026安徽省六安中考的家长和学生注意!最新简章!不是只有上高中才能考大学! - cc江江
  • 2026昭通建筑工程材料检测 CMA 机构哪家强?TOP 正规检测中心榜单 + 电话地址 - 中检检测集团
  • 2026六安本地认可的 5 家排污许可废气废水监测机构实地测评汇总 废水废气 + 自行监测 + CMA 检测报告 附电话地址 - 科信检测
  • 昆明财税公司哪家好?2026 昆明靠谱财税公司五大推荐,昆明财税公司高性价比口碑排行 - 品牌智鉴榜
  • 国产数据库有哪些?2026年主流产品选型对比
  • 2026丽水贵金属旧料回收优质实体店精选 5 家 黄金回收铂金白银回收真实探店测评清单 - 中业金奢再生回收中心
  • 电子汽车衡选型前值得关注的五个细节——西南地区设备供应商能力梳理 - 深度智识库
  • 网络访问故障排查指南:从DNS解析到服务器连接的完整解决方案
  • 阴阳师自动化脚本:百鬼夜行智能撒豆系统全面解析
  • 合肥理工学校2026年最新招生简章(附报名方式) - 我叫小周
  • 2026.6 上海黄金回收指南:核心门店电话汇总与耀辉回收流程详解 - 奢侈品回收
  • “见一面,少一面“——104岁道长含泪奉劝,这句话重若千钧
  • 舞台之外的选择:解码河北传媒学院就业率与传媒艺术高校的理性推荐 - 品牌评测官
  • DWD认证公司推荐排行榜单 一站式欧盟 DWD 认证办理机构精选榜单 - 商业新知
  • 2026年长沙门窗五金与硅酮胶供应商选型指南:从工程痛点到一站式解决方案 - 企业名录优选推荐
  • 2026年蚌埠初三考不上高中怎么办?这些择校出路可参考 - 小张zc
  • G-Helper:华硕笔记本硬件控制的轻量化一站式解决方案
  • 2026年安徽省初中毕业学医可以去哪个学校?如何择校? - 小张zc
  • 2026眉山贵金属旧料回收优质实体店精选 5 家 黄金回收铂金白银回收真实探店测评清单 - 中业金奢再生回收中心
  • 2026深圳上门回收黄金测评 四家平台谁最快 - 逸程