楼层: 首页/ 软件技术/ Spring AI/ 小项目实战:企业智能客服
十二

小项目实战:企业智能客服

Enterprise Customer Service Bot

把前面学的串起来,搭一个"企业智能客服":能查订单(Function Calling)、能查物流(Function Calling)、能读产品文档回答(RAG)、能多轮对话(ChatMemory)。用户问"我订单 12345 到哪了",AI 自己调物流工具;问"你们退货政策是啥",AI 自己去 RAG 里找文档回答。

论系统设计

用户问题进来 → ChatClient 判断意图 →

① 如果是查订单/物流 → 走 @Tool 调真实业务接口;

② 如果是问产品/政策 → 走 RAG 检索产品文档;

③ 拿工具结果或检索片段 → 拼成 Prompt → 大模型组织成人话回答;

④ ChatMemory 记住上下文,支持追问。

进阶:再上 AgentScope,让"意图识别 Agent"把任务分发给"查询 Agent"和"文档 Agent"。学习阶段先把单 ChatClient + Tools + RAG 跑通。

项目搭建清单

搭这个智能客服,依赖和配置如下:

pom.xml 关键依赖

<dependencies> <artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-ai-alibaba-starter</artifactId> <!-- RAG 用的向量库,这里以 Redis 为例 --> <artifactId>spring-ai-starter-vector-store-redis</artifactId> <!-- PDF 读取 --> <artifactId>spring-ai-pdf-document-reader</artifactId> </dependencies>

application.yml

spring: ai: alibaba: chat: options: model: qwen-plus api-key: ${DASHSCOPE_API_KEY} vectorstore: redis: index: product-idx # Redis 连接信息以实际环境为准

一个客服接口整合 Tools + RAG

@RestController @RequestMapping("/cs") public class CustomerServiceController { @Autowired private OrderTools orderTools; // 查订单/物流的工具 @GetMapping("/ask") public String ask(String q, String sessionId) { return chatClient.prompt(q) // 人设:你是企业客服,礼貌、专业、不知道就说不知道,别编 .system("你是企业客服助手,基于工具和文档回答,不确定就说转人工。") // 注册工具:查订单、查物流 .tools(orderTools) // RAG:自动检索产品文档拼进上下文 .advisors(a -> a.advisors( MessageChatMemoryAdvisor.builder(chatMemory).build(), QuestionAnswerAdvisor.builder(vectorStore).build()) .param(ChatMemory.CONVERSATION_ID, sessionId)) .call() .content(); } }

测试一下

# 问订单:AI 自动调 trackLogistics 工具 GET /cs/ask?q=我订单12345到哪了&sessionId=u1 # 问政策:AI 自动去 RAG 找文档 GET /cs/ask?q=你们支持七天无理由退货吗&sessionId=u1 # 追问:因为有 ChatMemory,AI 记得上一轮 GET /cs/ask?q=那运费谁出呢&sessionId=u1

验证清单

搭完按这几条验收:

验证项预期
问订单物流AI 调 trackLogistics,返回真实物流。
问退货政策AI 从 RAG 找到文档,基于文档回答。
追问上下文带同一个 sessionId,AI 记得上一轮。
问不知道的事AI 说不知道/转人工,不编。
停掉物流接口AI 友好提示,不崩。

观察 AI 的决策日志

# 打开 SimpleLoggerAdvisor,看 AI 每次: # 1. 收到的 system + user prompt 长啥样 # 2. 决定调了哪个工具、传了啥参数 # 3. 工具返回了什么 # 4. 最终回答是什么 # 出问题时对着日志一步步看,比瞎猜强十倍
客服机器人最容易被问崩的情况

① 用户问一个你根本没接工具、也没文档覆盖的问题,AI 开始编。② 用户连续追问,历史越攒越长,开始答非所问。③ 工具报错,AI 拿到异常信息不知道怎么处理。对策:system prompt 里写死"不知道就说不知道,转人工";历史截断;工具异常返回友好错误让 AI 转达。

记
实战心法

① 先跑通"Hello World"对话,再加工具、再加 RAG,别一口吃胖子。

② AI 是助手不是神,工具结果要校验,幻觉要兜底。

③ 版本和 API 变化快,遇到报错先查 spring-ai-alibaba 官方最新文档。