Spring AI 实战:电商客服智能知识库 RAG 系统全流程开发
通过之前的学习我们已掌握 Spring AI 核心模块对话、Embedding、RAG与优化技巧。本文将聚焦电商行业高频痛点通过实战案例 —— 电商客服智能知识库 RAG 系统带大家完成从需求分析、环境搭建到系统测试的全流程开发。该系统支持本地 PDF 格式的电商规则文档导入、Milvus 向量存储、双 Advisor 检索增强可精准解答用户关于退换货政策、物流查询、促销活动等咨询帮助企业提升客服响应效率、降低沟通成本同时避免大模型 “幻觉” 问题。一、项目需求与技术选型1. 核心需求支持导入本地 PDF 格式电商规则文档如《电商知识库标准条款》等。实现电商场景高频问题智能问答如 “双 11 买的口红拆封能退吗”“未发货订单怎么改地址”“偏远地区包邮吗”。支持两种检索模式精准条款匹配QuestionAnswerAdvisor与复杂场景增强RetrievalAugmentationAdvisor适配不同咨询场景。回答需基于知识库内容标注信息来源避免编造规则同时过滤与电商业务无关的查询。支持提取用户问题中的核心实体商品类型、购买时间、需求类型提升检索精准度。2. 技术选型二、项目初始化与环境配置1. 创建 Spring Boot 项目项目名称Weiz-SpringAI-RAG-EcommerceCustomerJDK 版本17Spring Boot 版本3.5.3核心依赖Spring Web、Spring AI 相关依赖智普 AI、Milvus、RAG 组件、Tika 文档解析PDF 文档解析2. 配置 pom.xml 依赖?xml version1.0encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.example/groupIdartifactIdWeiz-SpringAI/artifactIdversion0.0.1-SNAPSHOT/version/parentartifactIdWeiz-SpringAI-RAG-EcommerceCustomer/artifactIdnameWeiz-SpringAI-RAG-EcommerceCustomer/namedescriptionWeiz-SpringAI-RAG-EcommerceCustomer/descriptiondependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-zhipuai/artifactId/dependency!--spring-ai-client-chat 中包括TokenTextSplitter、TextReader、Document等工具--dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-client-chat/artifactId/dependency!--PDF 文档解析依赖--dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-pdf-document-reader/artifactId/dependency!--DOC 文档解析依赖Tika--dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-tika-document-reader/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency!--Milvus向量数据库Starter--dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-vector-store-milvus/artifactId/dependency!--QuestionAnswerAdvisor依赖--dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-advisors-vector-store/artifactId/dependency!--RetrievalAugmentationAdvisor依赖--dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-rag/artifactId/dependency/dependencies/project3. 配置 application.properties# 应用基础配置 spring.application.nameWeiz-SpringAI-RAG-EcommerceCustomerserver.port8080# 智普 AI 配置 spring.ai.zhipuai.api-key你的智普 AI APIKeyspring.ai.zhipuai.base-urlhttps://open.bigmodel.cn/api/paas spring.ai.zhipuai.embedding.options.modelembedding-2spring.ai.zhipuai.chat.options.modelGLM-4-Flash#Milvus向量数据库配置 spring.ai.vectorstore.milvus.client.hostlocalhost spring.ai.vectorstore.milvus.client.port19530spring.ai.vectorstore.milvus.client.tokenroot:Milvusspring.ai.vectorstore.milvus.database-namedefaultspring.ai.vectorstore.milvus.collection-nameguide_exam_store spring.ai.vectorstore.milvus.initialize-schematruespring.ai.vectorstore.milvus.embedding-dimension1024# 日志配置便于调试 logging.level.org.springframework.aiINFO logging.level.com.exampleDEBUG三、知识库构建电商规则文档导入与向量入库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.vectorStorevectorStore;}/** * 项目启动时初始化知识库解析 PDF 文档 → 切分文本 → 向量入库 */PostConstructpublicvoidinitKnowledgeBase(){try{System.out.println(开始初始化电商客服知识库...);// 1. 定义需要导入的 PDF 文档列表ListStringpdfFilesList.of(电商知识库标准条款.docx);ListDocumentallSplitDocsnewArrayList();for(StringfileName:pdfFiles){// 2. 读取单个 PDF 文档ResourceresourcenewClassPathResource(fileName);TikaDocumentReaderreadernewTikaDocumentReader(resource);ListDocumentrawDocsreader.read();// 3. 优化文本切分策略适配电商规则条款化特点TokenTextSplittersplitterTokenTextSplitter.builder().withChunkSize(600)// 每段最大 600 Token匹配规则条款长度.withMinChunkSizeChars(200)// 每段最小 200 字符.withKeepSeparator(true)// 保留条款分隔符.build();// 4. 切分当前文档并添加到总列表ListDocumentsplitDocssplitter.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.vectorStorevectorStore;}/** * 配置 QuestionAnswerAdvisor适合精准条款查询如具体政策匹配 */BeanpublicQuestionAnswerAdvisorquestionAnswerAdvisor(){returnQuestionAnswerAdvisor.builder(vectorStore).searchRequest(SearchRequest.builder().similarityThreshold(0.07)// 优化阈值适配电商规则检索.topK(4)// 取 Top4 相似片段提升精准度.build()).build();}/** * 配置 RetrievalAugmentationAdvisor适合复杂场景查询如促销退换货组合问题 */BeanpublicRetrievalAugmentationAdvisorretrievalAugmentationAdvisor(){// 1. 向量检索器配置检索参数VectorStoreDocumentRetrieverretrieverVectorStoreDocumentRetriever.builder().vectorStore(vectorStore).similarityThreshold(0.07).topK(4).build();// 查询增强器ContextualQueryAugmenterqueryAugmenterContextualQueryAugmenter.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;RestControllerRequestMapping(/ecommerce/service)publicclassCustomerServiceController{AutowiredprivateChatClientchatClient;AutowiredprivateQuestionAnswerAdvisorquestionAnswerAdvisor;AutowiredprivateRetrievalAugmentationAdvisorretrievalAugmentationAdvisor;/** * 精准条款查询接口基于 QuestionAnswerAdvisor * 适用场景查询具体规则条款如包邮条件、退换货时限、价保规则 */GetMapping(/chat/precise)publicMapString,StringpreciseChat(RequestParam(question)Stringquestion){StringanswerchatClient.prompt().user(question).advisors(List.of(questionAnswerAdvisor)).call().content();returnMap.of(question,question,answer,answer,mode,precise精准条款查询);}/** * 复杂场景增强查询接口基于 RetrievalAugmentationAdvisor * 适用场景组合类、流程类问题如促销期退换货、已下单改地址、VIP用户物流查询 */GetMapping(/chat/enhanced)publicMapString,StringenhancedChat(RequestParam(question)Stringquestion){StringanswerchatClient.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 也在不断迭代升级未来将支持更多场景、更多模型、更多功能。

相关新闻

BentoPDF - 隐私优先的浏览器端免费 PDF 工具箱

BentoPDF - 隐私优先的浏览器端免费 PDF 工具箱

项目标题与描述 BentoPDF 是一个强大、以隐私为先、客户端运行的 PDF 工具套件,支持自托管。它允许您直接在浏览器中操作、编辑、合并和处理 PDF 文件,无需服务器端处理,确保您的文件始终保持安全和私密。 项目的核心目标是提供一个完全免费、…

2026/7/3 15:19:05 阅读更多 →
【高精度气象】极端天气,新能源时代最昂贵的账单:你的风控,离真实的P99风险有多远?

【高精度气象】极端天气,新能源时代最昂贵的账单:你的风控,离真实的P99风险有多远?

2025年的一场区域性暴雪,让华北某大型光伏基地功率预测连续失准42小时。账面显示月度准确率达标,但仅偏差考核一项的直接经济损失就超过600万元——这还不包括因现货市场误判带来的机会成本。这绝非危言耸听。在全球变暖背景下,气象极端化趋势…

2026/7/7 6:11:38 阅读更多 →
风电光伏功率预测服务协议:指标模糊就是陷阱!延迟、缺测、回补、降级四大红线全解析

风电光伏功率预测服务协议:指标模糊就是陷阱!延迟、缺测、回补、降级四大红线全解析

当电网调度中心要求99%的预测准确率时,供应商承诺了98%。这1%的差距背后,藏着的是每年数百万的考核罚款和千万级的现货交易损失。预测服务的价值,正在从承诺的数字转向执行的细节。 随着2026年风电、光伏在电力系统中占比突破临界点&#xff…

2026/7/8 6:48:06 阅读更多 →

最新新闻

《伤寒论》398条方剂数据库构建:Python 爬虫抓取与 10 类方证关系分析

《伤寒论》398条方剂数据库构建:Python 爬虫抓取与 10 类方证关系分析

《伤寒论》398条方剂数据库构建:Python爬虫抓取与10类方证关系分析中医药古籍数字化是当前中医药信息化建设的重要方向。《伤寒论》作为中医四大经典之一,其398条条文蕴含着丰富的临床经验和辨证论治思想。本文将详细介绍如何利用Python技术构建《伤寒论…

2026/7/8 22:52:30 阅读更多 →
Twitter API v2 数据采集实战:5万用户样本的 Shadowban 回归分析模型构建

Twitter API v2 数据采集实战:5万用户样本的 Shadowban 回归分析模型构建

Twitter API v2 数据采集与 Shadowban 分析实战:从数据获取到模型构建社交媒体平台的算法治理机制一直是开发者社区关注的焦点,其中"影子禁令"(Shadowban)作为平台内容审核的重要手段,其运作机制和影响因素值得深入研究。本文将基于…

2026/7/8 22:52:30 阅读更多 →
OpenCV 4.8 图像压缩实战:3种无损编码算法对比与Python实现

OpenCV 4.8 图像压缩实战:3种无损编码算法对比与Python实现

OpenCV 4.8 图像压缩实战:3种无损编码算法对比与Python实现图像压缩技术是计算机视觉领域的基础能力之一,尤其在嵌入式设备和实时视频传输场景中,高效的压缩算法直接影响系统性能。本文将深入解析游程编码、哈夫曼编码和LZW三种经典无损压缩算…

2026/7/8 22:48:29 阅读更多 →
LabVIEW弹性VI标签消失问题

LabVIEW弹性VI标签消失问题

问题背景 LabVIEW 2020引入的Malleable VI(弹性VI)功能是一项革命性特性,允许创建泛型化的子VI,使其能够根据输入数据类型自动适配不同的实现路径。然而,许多在实际使用中报告了一个令人困扰的现象:Mallea…

2026/7/8 22:48:29 阅读更多 →
拉普拉斯算子图像边缘检测实战:Python+OpenCV 4.x 实现3种卷积核对比

拉普拉斯算子图像边缘检测实战:Python+OpenCV 4.x 实现3种卷积核对比

拉普拉斯算子图像边缘检测实战:PythonOpenCV 4.x 实现3种卷积核对比在计算机视觉领域,边缘检测是一项基础而关键的任务。它能够从图像中提取出物体的轮廓和结构信息,为后续的图像分析、目标识别等高级任务奠定基础。拉普拉斯算子作为一种经典…

2026/7/8 22:48:29 阅读更多 →
TrollInstallerX:解锁iOS设备安装自由的一键式解决方案

TrollInstallerX:解锁iOS设备安装自由的一键式解决方案

TrollInstallerX:解锁iOS设备安装自由的一键式解决方案 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 还在为iOS设备无法自由安装应用而烦恼吗?…

2026/7/8 22:48:29 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻