news 2026/2/25 19:53:47

Spring AI 实战:电商客服智能知识库 RAG 系统全流程开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring AI 实战:电商客服智能知识库 RAG 系统全流程开发

通过之前的学习,我们已掌握 Spring AI 核心模块(对话、Embedding、RAG)与优化技巧。本文将聚焦电商行业高频痛点,通过实战案例 —— 电商客服智能知识库 RAG 系统,带大家完成从需求分析、环境搭建到系统测试的全流程开发。该系统支持本地 PDF 格式的电商规则文档导入、Milvus 向量存储、双 Advisor 检索增强,可精准解答用户关于退换货政策、物流查询、促销活动等咨询,帮助企业提升客服响应效率、降低沟通成本,同时避免大模型 “幻觉” 问题。

一、项目需求与技术选型

1. 核心需求
支持导入本地 PDF 格式电商规则文档(如《电商知识库标准条款》等)。

实现电商场景高频问题智能问答(如 “双 11 买的口红拆封能退吗?”“未发货订单怎么改地址?”“偏远地区包邮吗?”)。

支持两种检索模式:精准条款匹配(QuestionAnswerAdvisor)与复杂场景增强(RetrievalAugmentationAdvisor),适配不同咨询场景。

回答需基于知识库内容,标注信息来源,避免编造规则,同时过滤与电商业务无关的查询。

支持提取用户问题中的核心实体(商品类型、购买时间、需求类型),提升检索精准度。

2. 技术选型

二、项目初始化与环境配置

1. 创建 Spring Boot 项目
项目名称:Weiz-SpringAI-RAG-EcommerceCustomer
JDK 版本:17
Spring Boot 版本:3.5.3
核心依赖:Spring Web、Spring AI 相关依赖(智普 AI、Milvus、RAG 组件、Tika 文档解析,PDF 文档解析)

2. 配置 pom.xml 依赖

<?xml version="1.0"encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>Weiz-SpringAI</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>Weiz-SpringAI-RAG-EcommerceCustomer</artifactId><name>Weiz-SpringAI-RAG-EcommerceCustomer</name><description>Weiz-SpringAI-RAG-EcommerceCustomer</description><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-zhipuai</artifactId></dependency><!--spring-ai-client-chat 中包括TokenTextSplitterTextReaderDocument等工具--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-client-chat</artifactId></dependency><!--PDF 文档解析依赖--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-pdf-document-reader</artifactId></dependency><!--DOC 文档解析依赖(Tika--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-tika-document-reader</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--Milvus向量数据库Starter--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-vector-store-milvus</artifactId></dependency><!--QuestionAnswerAdvisor依赖--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-advisors-vector-store</artifactId></dependency><!--RetrievalAugmentationAdvisor依赖--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-rag</artifactId></dependency></dependencies></project>

3. 配置 application.properties

# 应用基础配置 spring.application.name=Weiz-SpringAI-RAG-EcommerceCustomerserver.port=8080# 智普 AI 配置 spring.ai.zhipuai.api-key=你的智普 AI APIKeyspring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas spring.ai.zhipuai.embedding.options.model=embedding-2spring.ai.zhipuai.chat.options.model=GLM-4-Flash#Milvus向量数据库配置 spring.ai.vectorstore.milvus.client.host=localhost spring.ai.vectorstore.milvus.client.port=19530spring.ai.vectorstore.milvus.client.token=root:Milvusspring.ai.vectorstore.milvus.database-name=defaultspring.ai.vectorstore.milvus.collection-name=guide_exam_store spring.ai.vectorstore.milvus.initialize-schema=truespring.ai.vectorstore.milvus.embedding-dimension=1024# 日志配置(便于调试) logging.level.org.springframework.ai=INFO logging.level.com.example=DEBUG

三、知识库构建:电商规则文档导入与向量入库

1. 准备电商客服知识库文档
将 电商知识库标准条款.doc 文档放入 src/main/resources 目录,文档内容示例:

一、退换货政策(核心条款) (一)通用退换货规则1.7天无理由退换:用户签收商品后7天内,商品完好(吊牌未拆、包装完整、 无使用痕迹),支持无理由退换;美妆、个护类商品拆封后仍支持7天无理由退 换,但需保留赠品及原包装配件。2.质量问题退换:商品存在破损、功能故障、材质不符等质量问题,支持签收后30天内免费退换,往返运费由商家承担;需提供问题商品清晰照片、快递面单作为 凭证,48小时内响应处理。3.退换货流程:用户发起申请 → 商家审核(24小时内)→ 用户寄回商品(7天 内)→ 商家验收 → 退款/换货(验收后48小时内)。 (二)特殊商品退换规则1.定制类商品:刻字首饰、定制尺寸服装、个性化印刷品等,无质量问题不支持退 换;质量问题需在签收后48小时内反馈,提供定制凭证及问题证明。2.食品/美妆类:食品、饮料、保健品等开封后不支持退换;美妆类商品(口红、 粉底液等)使用后出现过敏需提供医院诊断证明,支持全额退款。3.数码家电类:未拆封数码家电支持7天无理由退换;拆封后仅支持质量问题退 换,需提供品牌售后检测报告;保修服务按品牌官方政策执行。.......后面省略

2. 编写知识库初始化配置
创建com.example.weizspringai.config.KnowledgeBaseConfig 类,实现 DOC 文档解析、文本切分与向量入库:

importorg.springframework.ai.document.Document;importorg.springframework.ai.reader.tika.TikaDocumentReader;importorg.springframework.ai.transformer.splitter.TokenTextSplitter;importorg.springframework.ai.vectorstore.VectorStore;importorg.springframework.core.io.ClassPathResource;importorg.springframework.core.io.Resource;importorg.springframework.stereotype.Component;importjakarta.annotation.PostConstruct;importjava.util.ArrayList;importjava.util.List;@ComponentpublicclassKnowledgeBaseConfig{privatefinalVectorStorevectorStore;publicKnowledgeBaseConfig(VectorStorevectorStore){this.vectorStore=vectorStore;}/** * 项目启动时初始化知识库:解析 PDF 文档 → 切分文本 → 向量入库 */@PostConstructpublicvoidinitKnowledgeBase(){try{System.out.println("开始初始化电商客服知识库...");// 1. 定义需要导入的 PDF 文档列表List<String>pdfFiles=List.of("电商知识库标准条款.docx");List<Document>allSplitDocs=newArrayList<>();for(StringfileName:pdfFiles){// 2. 读取单个 PDF 文档Resourceresource=newClassPathResource(fileName);TikaDocumentReaderreader=newTikaDocumentReader(resource);List<Document>rawDocs=reader.read();// 3. 优化文本切分策略(适配电商规则条款化特点)TokenTextSplittersplitter=TokenTextSplitter.builder().withChunkSize(600)// 每段最大 600 Token(匹配规则条款长度).withMinChunkSizeChars(200)// 每段最小 200 字符.withKeepSeparator(true)// 保留条款分隔符.build();// 4. 切分当前文档并添加到总列表List<Document>splitDocs=splitter.apply(rawDocs);allSplitDocs.addAll(splitDocs);System.out.println("已解析文档:"+fileName+",生成 "+splitDocs.size()+" 个文本片段");}// 5. 批量向量入库(Spring AI 自动调用 EmbeddingModel 完成向量化)vectorStore.add(allSplitDocs);System.out.println("知识库初始化完成,共导入 "+allSplitDocs.size()+" 个文本片段");}catch(Exceptione){System.err.println("知识库初始化失败:"+e.getMessage());e.printStackTrace();}}}

四、RAG 核心配置: Advisor 初始化

创建com.example.ecommerceservicerag.config.RAGConfig类,配置QuestionAnswerAdvisor与 RetrievalAugmentationAdvisor 等 RAG 组件,优化提示词以提取电商业务实体、提升检索精准度:

importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.ai.chat.client.advisor.vectorstore.QuestionAnswerAdvisor;importorg.springframework.ai.rag.advisor.RetrievalAugmentationAdvisor;importorg.springframework.ai.rag.generation.augmentation.ContextualQueryAugmenter;importorg.springframework.ai.rag.retrieval.search.VectorStoreDocumentRetriever;importorg.springframework.ai.vectorstore.SearchRequest;importorg.springframework.ai.vectorstore.VectorStore;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassRAGConfig{privatefinalVectorStorevectorStore;publicRAGConfig(VectorStorevectorStore){this.vectorStore=vectorStore;}/** * 配置 QuestionAnswerAdvisor(适合精准条款查询,如具体政策匹配) */@BeanpublicQuestionAnswerAdvisorquestionAnswerAdvisor(){returnQuestionAnswerAdvisor.builder(vectorStore).searchRequest(SearchRequest.builder().similarityThreshold(0.07)// 优化阈值,适配电商规则检索.topK(4)// 取 Top4 相似片段,提升精准度.build()).build();}/** * 配置 RetrievalAugmentationAdvisor(适合复杂场景查询,如促销+退换货组合问题) */@BeanpublicRetrievalAugmentationAdvisorretrievalAugmentationAdvisor(){// 1. 向量检索器(配置检索参数)VectorStoreDocumentRetrieverretriever=VectorStoreDocumentRetriever.builder().vectorStore(vectorStore).similarityThreshold(0.07).topK(4).build();// 查询增强器ContextualQueryAugmenterqueryAugmenter=ContextualQueryAugmenter.builder().allowEmptyContext(true).build();// 3. 构建检索增强 AdvisorreturnRetrievalAugmentationAdvisor.builder().documentRetriever(retriever).queryAugmenter(queryAugmenter).build();}/** * 配置 ChatClient(集成智普 AI GLM-4-Flash,适配电商客服语气) */@BeanpublicChatClientchatClient(org.springframework.ai.chat.model.ChatModelchatModel){returnChatClient.builder(chatModel).defaultSystem(""" 你是友好的电商客服顾问,仅基于提供的知识库内容回答用户问题,规则如下: 1. 回答需亲切、简洁、准确,符合电商客服沟通语气,避免生硬表述; 2. 涉及政策规则时,分点说明关键信息,让用户一目了然; 3. 回答末尾必须标注信息来源(格式:信息来源:[文档名称 - 相关条款类别]); 4. 若未查询到相关信息,回复"非常抱歉,暂未查询到该问题的相关规则,建议联系人工客服咨询~"; 5. 仅回应与电商购物(退换货、促销、物流等)相关的问题,无关问题直接回复上述统一话术。 """).build();}}

五、编写控制器:提供问答接口

创建com.example.ecommerag.controller.CustomerServiceController 类,提供精准条款查询与复杂场景增强查询两种接口,适配电商客服日常咨询场景:

importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.ai.chat.client.advisor.vectorstore.QuestionAnswerAdvisor;importorg.springframework.ai.rag.advisor.RetrievalAugmentationAdvisor;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importjava.util.List;importjava.util.Map;@RestController@RequestMapping("/ecommerce/service")publicclassCustomerServiceController{@AutowiredprivateChatClientchatClient;@AutowiredprivateQuestionAnswerAdvisorquestionAnswerAdvisor;@AutowiredprivateRetrievalAugmentationAdvisorretrievalAugmentationAdvisor;/** * 精准条款查询接口(基于 QuestionAnswerAdvisor) * 适用场景:查询具体规则条款(如包邮条件、退换货时限、价保规则) */@GetMapping("/chat/precise")publicMap<String,String>preciseChat(@RequestParam("question")Stringquestion){Stringanswer=chatClient.prompt().user(question).advisors(List.of(questionAnswerAdvisor)).call().content();returnMap.of("question",question,"answer",answer,"mode","precise(精准条款查询)");}/** * 复杂场景增强查询接口(基于 RetrievalAugmentationAdvisor) * 适用场景:组合类、流程类问题(如促销期退换货、已下单改地址、VIP用户物流查询) */@GetMapping("/chat/enhanced")publicMap<String,String>enhancedChat(@RequestParam("question")Stringquestion){Stringanswer=chatClient.prompt().user(question).advisors(List.of(retrievalAugmentationAdvisor)).call().content();returnMap.of("question",question,"answer",answer,"mode","enhanced(复杂场景增强)");}}

六、测试与验证

测试 1:查询具体概念(精准问答)

访问http://localhost:8083/ecommerce/service/chat/precise?question=新疆地区订单多少金额包邮?,响应结果:{"question":"新疆地区订单多少金额包邮?","answer":"新疆属于偏远地区,订单金额满199元可享受包邮服务,不满199元需收取20元运费哦~ 信息来源:[物流服务标准 - 包邮政策]","mode":"precise(精准条款查询)"}

测试 2:查询多步骤问题(检索增强)

访问http://localhost:8080/ecommerce/service/chat/enhanced?question=11买的口红拆封了能退吗?我是VIP用户?,响应结果:{"question":"双11买的口红拆封了能退吗?我是VIP用户?","answer":"非常抱歉,根据我们的退换货政策,口红属于美妆类商品,拆封后不支持7天无理由退换。不过,作为VIP用户,您在促销期间退换货可以享受免审核和优先处理的特权。如果您确实需要退换,建议联系客服了解具体情况。信息来源:[电商知识库标准条款文档模板 - 退换货政策]","mode":"enhanced(复杂场景增强)"}

测试 3:流程类查询(未发货订单改地址)

访问http://localhost:8080/ecommerce/service/chat/enhanced?question=我刚下单还没发货,想修改收货地址可以吗?,响应结果:{"question":"我刚下单还没发货,想修改收货地址可以吗?","answer":"当然可以,您下单后24小时内可以通过APP修改收货地址和联系电话。如果超过24小时,需要联系客服协调,但仅支持同城市地址修改哦。信息来源:[电商知识库标准条款文档模板 - 订单修改与追踪]。","mode":"enhanced(复杂场景增强)"}

测试 4:查询无关问题(验证过滤)

访问http://localhost:8083/ecommerce/service/chat/precise?question=怎么办理信用卡?,响应结果:{"question":"怎么办理信用卡?","answer":"非常抱歉,暂未查询到关于如何办理信用卡的相关规则,建议联系人工客服咨询~信息来源:[电商知识库标准条款文档模板 - 退换货政策]","mode":"precise(精准条款查询)"}

测试结果表明,系统完全满足需求:能精准回答导游考试相关问题,支持不同类型的查询场景,且能过滤无关问题,符合生产级应用的要求。

七、项目扩展方向

1、多格式文档支持
扩展支持 PDF、Excel、PPT 等格式的知识库导入,使用 Spring AI 提供的对应文档阅读器。
2、知识库增量更新
实现知识库的新增、修改、删除功能,避免每次更新都需重启服务。
3、前端可视化界面
开发 Web 前端,支持文档上传、问题输入、回答展示、历史记录查询等功能。
4、权限控制
添加用户认证与授权功能,限制知识库的访问权限(如仅导游考试学员可使用)。
5、系统监控
集成 Prometheus + Grafana,监控 Milvus 检索性能、大模型调用耗时、接口响应速度等指标。

总结

本文我们通过一个完整的导游考试知识库 RAG 系统,演示了 Spring AI 在实际业务场景中的落地流程。从需求分析、技术选型,到环境配置、知识库构建,再到核心组件开发与系统测试,每一步都围绕 “实用、稳定、高效” 的原则展开。通过该项目,我们不仅巩固了 Spring AI 的核心技术(Embedding、RAG、向量数据库集成),还掌握了从 0 到 1 构建 AI 应用的思维方式。

Spring AI 作为 Java 生态的原生生成式 AI 框架,其最大价值在于降低了 AI 技术的落地门槛,让 Java 开发者无需跨生态即可快速构建智能应用。随着大模型技术的持续演进,Spring AI 也在不断迭代升级,未来将支持更多场景、更多模型、更多功能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/16 6:20:00

NLP深度学习的四步公式详解

简介 在过去六个月中&#xff0c;一种强大的神经网络新方法已为自然语言处理领域整合成型。这种新方法可以概括为一个简单的四步公式&#xff1a;嵌入&#xff08;Embed&#xff09;、编码&#xff08;Encode&#xff09;、注意力机制&#xff08;Attend&#xff09;、预测&am…

作者头像 李华
网站建设 2026/2/17 13:18:25

UG/NX过量采购许可证的内部调剂与盘活策略

一、问题本质&#xff1a;是什么&#xff1f;你有没有遇到过这种情况&#xff1f;采购了一大堆许可证&#xff0c;但实际使用起来却寥寥无几。是在使用UG/NX这类高端CAD软件时&#xff0c;很多企业为了应对项目的不确定性&#xff0c;提前大量采购了许可证&#xff0c;结果这些…

作者头像 李华
网站建设 2026/2/23 7:08:39

UG/NX许可证“资源池”动态弹性伸缩管理策略

UG/NX许可证“资源池”动态弹性伸缩管理策略&#xff1a;如何高效利用资源提升设计效率 在当今制造业数字化转型的大潮下&#xff0c;CAD软件的使用普及度越来越高&#xff0c;是像UG/NX这样的工业设计软件&#xff0c;已经成为许多企业的核心设计工具。设计任务的复杂度逐年提…

作者头像 李华
网站建设 2026/2/18 13:46:36

React Native鸿蒙版:自定义useMask输入掩码

React Native for OpenHarmony 实战&#xff1a;自定义useMask输入掩码Hook 摘要 本文深入探讨如何在React Native应用中为OpenHarmony 6.0.0平台实现自定义输入掩码Hook。我们将从输入掩码的核心原理出发&#xff0c;逐步构建一个高性能的useMask自定义Hook&#xff0c;重点…

作者头像 李华
网站建设 2026/2/22 4:10:22

uniapp+python基于微信小程序的付费厨房管理系统的设计与实现

文章目录摘要概述技术架构核心功能模块创新点与优势应用价值系统设计与实现的思路主要技术与实现手段源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要概述 该系统基于UniApp框架与Python后端技术&#xff0c;结合微信小程序平台&…

作者头像 李华