最近在做一个客服系统的升级项目老系统响应慢、人力成本高的问题越来越突出。趁着这个机会我研究了一下如何用 Spring AI 结合阿里云的服务来搭建一个更“聪明”的客服系统。折腾下来效果还不错响应效率提升很明显运维也简单了不少。这里把整个实践过程和一些心得记录下来希望能给有类似需求的同学一些参考。1. 背景与痛点为什么需要智能客服我们之前的客服系统主要靠人工坐席和一套简单的关键词匹配规则。随着业务量增长问题越来越明显响应速度慢高峰期用户排队等待时间长体验差。人力成本高需要大量客服人员7x24小时在线培训和管理成本都不低。问题解决率低简单重复的问题如“怎么修改密码”、“订单状态”占用了大量人力复杂问题反而得不到及时处理。知识更新滞后产品规则一变客服知识库和匹配规则就得手动更新容易出错。所以我们的核心目标很明确用技术手段让机器先处理掉大部分标准化、重复性的咨询释放人力去处理更复杂、更有价值的问题同时提升整体响应速度。2. 技术选型为什么是 Spring AI 阿里云在方案选型时我们主要对比了几种路径纯自研 NLP 模型如 TensorFlow/PyTorch效果上限高但技术门槛更高需要专业的算法团队进行模型训练、调优和持续维护开发和部署周期长不适合我们快速迭代的业务节奏。直接调用各大云厂商的 NLP API简单快速但业务逻辑和云服务强耦合代码里会充斥各种 HTTP 调用和 JSON 解析不够优雅也难以做统一的异常处理和降级策略。Spring AI这是一个新兴的框架它的核心价值在于抽象和统一。它定义了一套标准的 API 来与各种 AI 模型/服务如 OpenAI、Azure OpenAI、阿里云通义千问等进行交互。对于 Java/Spring 开发者来说这意味着可以用熟悉的Bean、Service注解方式来集成 AI 能力大大降低了集成复杂度。最终我们选择了Spring AI 阿里云 NLP的组合Spring AI负责整体的应用集成、对话流程管理、上下文维护和模板渲染。阿里云 NLP 服务如通义千问、自然语言处理基础版作为底层的“大脑”提供强大的意图识别和语义理解能力。阿里云服务在国内访问稳定、合规并且提供了丰富的、针对中文场景优化的预训练模型。这个组合让我们既能享受云服务带来的强大能力又能保持应用架构的清晰和可维护性。3. 核心实现三步搭建智能客服核心整个智能客服的核心可以拆解为三个步骤接收用户问题 - 理解用户意图 - 生成并返回回答。下面我们结合代码来看具体实现。3.1 项目初始化与依赖引入首先创建一个标准的 Spring Boot 项目。在pom.xml中引入关键依赖。Spring AI 的版本迭代较快建议使用当前稳定版。dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-alibaba-tongyi-spring-boot-starter/artifactId version0.8.1/version !-- 请使用最新稳定版本 -- /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency这里我们直接使用了spring-ai-alibaba-tongyi-spring-boot-starter它是 Spring AI 对阿里云通义千问的官方适配器开箱即用。3.2 配置与Bean定义在application.yml中配置阿里云的通义千问访问密钥和参数。切记这些敏感信息不要提交到代码仓库应该使用配置中心或环境变量。spring: ai: alibaba: tongyi: api-key: ${ALIBABA_CLOUD_API_KEY} # 从环境变量读取 chat: options: model: qwen-max # 指定使用的模型如 qwen-plus, qwen-max temperature: 0.7 # 控制回复的随机性客服场景建议较低值以保证稳定性然后我们定义一个ChatClient的 Bean。Spring AI 的自动配置会帮我们完成与阿里云服务的连接。import org.springframework.ai.chat.client.ChatClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; Configuration public class AiConfig { Bean public ChatClient chatClient(ChatClient.Builder builder) { return builder.build(); } }3.3 实现意图识别与自动回复服务这是最核心的业务服务。我们创建一个CustomerService它利用ChatClient与 AI 交互。import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.chat.prompt.PromptTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Map; Service public class CustomerService { Autowired private ChatClient chatClient; /** * 处理用户咨询的核心方法 * param sessionId 会话ID用于维护上下文 * param userQuestion 用户问题 * return AI生成的回复 */ public String handleQuery(String sessionId, String userQuestion) { // 1. 构建Prompt指令模板 // 这里我们通过Prompt来给AI设定“角色”和“任务”这是影响回复质量的关键 String systemPrompt 你是一个专业的电商客服助手态度友好、专业。 请根据以下已知的客服知识库来回答问题 - 退货政策商品签收后7天内可无理由退货保持商品完好。 - 修改密码请登录APP进入“我的-设置-账户安全”进行修改。 - 查看订单在“我的订单”页面可以查看所有订单状态。 - 物流查询点击订单详情页的“查看物流”即可。 如果用户的问题超出上述知识范围请礼貌地表示无法回答并建议联系人工客服。 请用简洁明了的中文回复。 ; // 2. 将系统指令和用户问题组合成完整的Prompt Prompt prompt new Prompt(systemPrompt \n\n用户问题 userQuestion); // 3. 调用ChatClient获取AI回复 ChatResponse response chatClient.prompt(prompt) .call() .chatResponse(); // 4. 提取并返回回复内容 return response.getResult().getOutput().getContent(); } }3.4 提供 RESTful API 接口最后我们暴露一个简单的 HTTP 接口供前端调用。import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; RestController RequestMapping(/api/customer-service) public class CustomerServiceController { Autowired private CustomerService customerService; PostMapping(/chat) public String chat(RequestParam String sessionId, RequestBody MapString, String request) { String question request.get(question); if (question null || question.trim().isEmpty()) { return 请输入您的问题。; } return customerService.handleQuery(sessionId, question); } }至此一个最基础的、具备意图识别和自动回复能力的智能客服后端就完成了。启动应用向/api/customer-service/chat发送一个 POST 请求携带sessionId和question就能收到 AI 客服的回复了。4. 性能优化让系统跑得更快更稳基础功能跑通后就要考虑性能和稳定性了。客服系统并发量可能不小直接每次请求都调用远程 AI 服务延迟和成本都是问题。引入缓存Redis场景很多用户问的是高度重复的问题比如“退货流程”。没必要每次都问 AI。做法在CustomerService.handleQuery方法里先根据问题内容生成一个 Key比如 MD5(question)去 Redis 里查一下有没有缓存过的答案。有则直接返回没有则调用 AI并将结果存入 Redis 并设置一个合理的过期时间如10分钟。// 伪代码示例 String cacheKey cs:answer: DigestUtils.md5DigestAsHex(question.getBytes()); String cachedAnswer redisTemplate.opsForValue().get(cacheKey); if (cachedAnswer ! null) { return cachedAnswer; } // ... 调用AI ... redisTemplate.opsForValue().set(cacheKey, aiAnswer, 10, TimeUnit.MINUTES);异步处理与消息队列场景对于可能需要较长时间处理、或非实时性要求的任务如生成复杂的订单分析报告。做法将用户请求放入消息队列如 RocketMQ/Kafka由后台 worker 异步消费处理处理完成后通过 WebSocket 或站内信通知用户。这样前端请求可以立刻返回避免长时间阻塞。连接池与超时设置确保 HTTP ClientSpring AI 底层使用的配置了连接池和合理的连接、读写超时时间防止个别慢请求拖垮整个服务。5. 避坑指南那些我踩过的“坑”上下文丢失问题现象用户在多轮对话中AI 忘记了之前说过的话。解决Spring AI 的ChatClient本身支持上下文管理。我们需要维护一个Conversation对象或者利用Prompt的ChatOptions传递历史消息。更简单的做法是在systemPrompt后面手动拼接上最近几轮的“用户-助手”对话历史再发送给 AI。注意要控制上下文长度避免超出模型 Token 限制。高并发下的稳定性现象促销时流量激增直接调用 AI 服务可能因限流或网络波动导致大量失败。解决熔断降级集成 Resilience4j 或 Sentinel当调用 AI 服务失败率达到阈值时快速失败直接返回预设的兜底话术如“当前咨询人数较多请稍后再试”。限流在应用入口对/chat接口进行限流保护后端 AI 服务和我们自己的系统。回复内容不可控现象AI 偶尔会“胡说八道”或生成不符合要求的回复。解决强化 System Prompt在指令中更明确地规定回答的格式、边界和禁止事项。后置过滤对 AI 返回的文本进行关键词过滤或敏感词审核。人工审核通道对于置信度不高的回答可以标记出来转给人工客服复核。6. 安全考量保护用户与数据数据加密所有用户与客服的对话记录如果存储到数据库应考虑对问题和个人信息如订单号、手机号进行脱敏或加密存储。确保与阿里云服务之间的通信是 HTTPS 加密的。隐私保护在systemPrompt中明确告知 AI 模型“你是一个客服助手不得在回复中泄露任何内部系统信息、用户个人数据或未公开的业务规则。”避免将真实的用户 ID、手机号等直接作为 Prompt 的一部分发送给 AI 模型。可以使用匿名化的sessionId。访问控制对智能客服的 API 接口实施认证和授权确保只有合法的前端应用或用户才能调用。7. 总结与展望通过将 Spring AI 与阿里云智能服务结合我们确实能够以较高的开发效率构建出一个效果不错的智能客服系统。Spring AI 的抽象让集成工作变得非常“Spring 风格”而阿里云则提供了稳定强大的底层 AI 能力。目前这个系统还处于初级阶段未来还有不少可以优化的方向知识库向量化将产品文档、历史问答等知识库转换成向量存入向量数据库如阿里云 OpenSearch。当用户提问时先进行向量相似度搜索找到最相关的知识片段再连同片段一起发给 AI 生成答案。这能极大提升回答的准确性和专业性。多模态支持未来客服可能不只是文字用户可能会发送图片如商品损坏图、语音。可以考虑集成阿里云的多模态模型提供更丰富的交互方式。情感分析与智能路由利用 NLP 技术分析用户对话中的情绪如愤怒、焦急对于情绪负面的用户可以优先转接给经验丰富的人工客服提升用户体验。数据分析与优化收集所有对话记录定期分析哪些问题 AI 回答得好哪些回答不好。针对回答不好的问题优化知识库或 Prompt 指令形成闭环迭代。这次实践让我深刻感受到AI 技术的工程化落地选择合适的框架和云服务能事半功倍。希望这篇笔记能帮你少走些弯路。如果你也在做类似的项目欢迎一起交流探讨。