LikeShop 單商戶 AI 智能客服架構升級:以訊息佇列驅動的異步化二次開發實踐
LikeShop单商户AI智能客服架构升级:消息队列驱动的异步化二开实践
LikeShop 單商戶 AI 智能客服方案以 RocketMQ 改造同步呼叫鏈路,採用「快速返回、異步處理、結果回調」架構,將訊息接收與大模型推理分開。方案涵蓋訊息持久化、順序處理、重試與死信隊列、狀態追蹤及結果推送,並支援故障隔離、規則降級和轉人工處理。
简介: 本文提出LikeShop单商户AI客服异步化改造方案,聚焦问题诊断、架构合理性、工程深度、数据闭环与可复现性。基于RocketMQ构建“快速返回—异步处理—结果回调”生产级架构,实现消息不丢失、故障隔离、人机协同与全链路可观测,已支撑大促高并发场景。
下面这版我按“可直接投稿的技术方案文章”重写,重点强化了:问题诊断、架构合理性、工程深度、数据闭环、可复现性,不再停留在功能介绍层面。
LikeShop单商户AI智能客服架构升级:基于消息队列的异步化改造与生产级实践
一、引言
随着大模型能力的成熟,AI智能客服已成为电商平台降低人工客服成本、提升咨询响应效率的重要手段。尤其在私域商城、单商户门店和小程序场景中,用户咨询具有频次高、时效性强、业务链路复杂等特点,传统同步调用大模型的架构往往难以支撑稳定运行。
LikeShop单商户标准版本身具备一定的客服与工单基础能力,但在引入AI自动回复后,系统容易暴露出响应延迟、接口超时、资源占用高、故障传导强等问题。这些问题并非源于大模型能力不足,而是因为AI推理属于高耗时操作,不适合直接承载在同步接口链路中。
本文提出一种基于消息队列的AI智能客服异步化改造方案,在LikeShop单商户Java版架构基础上,通过新增消息生产、异步消费、会话状态管理、结果推送与失败补偿模块,将同步调用链路改造为“快速返回、异步处理、结果回调”的生产级架构。改造后,系统在大促峰值、高并发咨询和大模型波动场景下仍能保持稳定运行。
二、业务痛点与问题分析
2.1 AI客服同步调用存在稳定性风险
在初始版本中,AI客服通常采用同步调用方式:用户发送消息后,接口线程直接调用大模型,等待推理完成后返回结果。这种模式实现简单,但在生产环境中存在明显缺陷。
第一,大模型推理延迟较高,单条回复通常需要1至3秒,复杂上下文甚至更久。同步等待会导致接口线程长时间被占用,系统并发能力迅速下降。
第二,活动大促期间咨询量会出现数倍增长。如果大量用户同时进入客服会话,同步接口会迅速耗尽服务线程,进而影响商品详情、下单、支付等主业务接口。
第三,大模型服务本身存在波动。偶发超时、限流或临时不可用,会直接导致用户消息发送失败,影响咨询体验。
2.2 消息丢失与状态混乱问题突出
在客服场景中,消息可靠性和会话顺序性非常重要。同步架构虽然实现简单,但一旦出现网络抖动、服务重启或推理异常,容易出现以下问题:
- 用户消息已发送但未收到回复;
- AI回复生成后未通知到前端;
- 同一用户多条消息顺序错乱;
- 异常重试导致重复回复;
- 客服模块故障影响商城主链路。
这些问题在平峰时段可能表现不明显,但在大促、活动和客服高峰期会集中爆发。
2.3 人工客服与AI客服缺乏协同闭环
很多AI客服改造只关注“自动回复”,却没有建立完整的业务闭环。当AI无法回答、用户要求转人工或问题涉及订单、售后、物流时,系统需要具备降级能力。
如果AI结果无法可靠落库,人工客服就无法继续承接上下文;如果异常消息没有补偿机制,问题会直接丢失;如果缺少状态追踪,运营团队也无法判断故障发生在哪个环节。
因此,AI客服升级不能只做模型调用,而必须建立完整的消息生命周期管理。
三、方案设计目标与原则
3.1 设计目标
本方案的核心目标不是简单引入消息队列,而是构建一个稳定、可靠、可观测的AI客服生产架构。具体目标如下:
- 提升接口响应速度:用户消息发送后立即返回,不等待大模型推理;
- 增强峰值承载能力:通过消息队列削峰填谷,支撑大促咨询洪峰;
- 保证消息可靠性:消息不丢失、不重复,异常可追踪、可补偿;
- 实现故障隔离:AI推理异常不影响商城主业务链路;
- 支持人机协同:AI、人工客服、系统规则之间可灵活切换;
- 建立可观测体系:消息状态、消费耗时、失败原因均可监控。
3.2 设计原则
为避免过度设计,方案遵循以下原则:
- 低侵入原则:新增独立AI客服扩展模块,不改造LikeShop交易核心链路;
- 消息优先原则:以消息为中心组织流程,不以同步调用为中心;
- 状态可追溯原则:每条消息都有明确状态和处理日志;
- 失败可控原则:允许失败,但不允许静默丢失;
- 渐进降级原则:大模型异常时自动降级为规则回复或人工客服。
四、整体架构设计
4.1 架构分层
改造后的AI客服系统分为五层:接入层、会话网关层、消息中间件层、消费推理层、业务能力层。
接入层:商城H5、小程序、公众号客服入口
↓
会话网关层:消息接收、会话校验、状态管理、结果查询
↓
消息中间件层:消息主题、优先级队列、死信队列、延时队列
↓
消费推理层:意图识别、规则拦截、大模型推理、工具调用、结果生成
↓
业务能力层:LikeShop商品、订单、用户、售后、物流服务
4.2 核心流程
一条用户消息的完整处理流程如下:
- 用户在前端发送消息;
- 会话网关校验用户身份和会话状态;
- 消息先持久化到数据库,状态标记为“处理中”;
- 消息投递到消息队列,接口立即返回发送成功;
- 消费者拉取消息,进行意图识别和规则预处理;
- 需要业务数据时调用LikeShop内部服务查询订单、物流、售后等信息;
- 调用大模型生成AI回复;
- AI回复落库并更新消息状态;
- 通过轮询或WebSocket将结果推送给前端;
- 消费失败时自动重试,超过阈值进入死信队列并转人工。
4.3 消息模型设计
系统中的消息不仅是文本内容,还包含完整的处理上下文。核心消息字段包括:
msgId:消息唯一编号;sessionId:会话编号;userId:用户ID;content:消息内容;messageType:消息类型;intentType:意图类型;status:消息状态;retryCount:重试次数;createTime:消息创建时间;updateTime:状态更新时间。
通过统一消息模型,系统可以将“发送、排队、处理、回复、失败、补偿”整个生命周期串联起来。
五、消息队列选型与应用设计
5.1 为什么选择消息队列
消息队列的价值不是为了增加技术复杂度,而是为了解决同步架构中的三个核心问题:解耦、削峰和容错。
在AI客服场景中,消息队列可以将用户请求与AI推理过程分离。用户发送消息后,系统只负责接收和入队,真正的推理工作由后台消费者异步完成。这样即使大模型出现延迟或波动,也不会直接影响前端交互。
5.2 RocketMQ的适用性
本方案采用RocketMQ作为消息中间件,主要原因如下:
- 支持顺序消息:同一用户的消息可以按顺序处理;
- 支持死信队列:失败消息可进入专门队列处理;
- 支持重试机制:消费失败后可自动重试;
- 吞吐能力较强:适合电商活动峰值场景;
- 生态成熟,适合Java业务系统集成。
5.3 主题与队列划分
为避免所有消息混在一起处理,系统可按业务优先级划分不同主题或标签。
5.3.1 普通咨询主题
适用于商品咨询、活动规则、使用说明、常见问题等普通对话。这类消息对实时性要求相对较低,可按正常速度消费。
5.3.2 高优业务主题
适用于订单查询、物流查询、售后申请、退款咨询等交易相关问题。这类消息涉及用户资金和履约体验,应优先处理。
5.3.3 死信主题
当消息多次消费失败后,不应无限重试,而应进入死信队列,由人工客服或运营人员介入处理。
5.3.4 顺序性设计
同一用户的多条消息需要保持顺序,否则会出现上下文混乱。可采用按用户ID路由队列的方式,保证同一用户消息进入同一分区,从而实现顺序消费。
六、会话状态管理设计
6.1 状态机设计
AI客服会话应采用明确的状态机管理,而不是依赖业务代码中的零散判断。
会话状态可设计为:
active:会话进行中;waiting:等待用户输入;processing:AI处理中;replied:AI已回复;transferring:转人工中;human:人工客服处理中;closed:会话已关闭。
消息状态可设计为:
pending:待处理;processing:处理中;success:处理成功;failed:处理失败;dead:进入死信队列。
6.2 缓存与数据库结合
会话上下文和热点状态适合使用Redis管理,而完整消息记录和会话历史则应持久化到数据库。
Redis负责:
- 当前会话状态;
- 用户最近消息;
- AI上下文缓存;
- 临时锁与幂等标记。
MySQL负责:
- 会话主记录;
- 消息明细;
- 消费任务记录;
- 异常与重试日志。
6.3 会话超时控制
客服会话不能长期占用资源。系统应设置会话超时机制,例如30分钟无交互后自动关闭会话,并将会话上下文持久化归档。这样既释放缓存资源,也保证后续人工客服可继续查看历史。
七、消费推理层设计
7.1 消费端整体流程
消费者是异步架构的核心,其处理质量直接决定AI客服稳定性。推荐采用以下流程:
- 拉取消息;
- 幂等校验;
- 规则拦截;
- 意图识别;
- 业务工具调用;
- 大模型推理;
- 结果生成;
- 状态更新;
- 结果通知。
7.2 幂等处理
消息队列可能出现重复投递,因此消费端必须具备幂等能力。
常见做法是为每条消息生成唯一msgId,消费时先检查该消息是否已处理。如果已成功处理,则直接返回;如果正在处理中,则根据业务情况决定是否重试。
幂等表可记录以下字段:
msgId;consumerGroup;status;retryCount;lastError;createTime;updateTime。
7.3 规则前置拦截
并不是所有消息都需要调用大模型。对于高频、明确、规则稳定的问题,可以前置拦截,直接返回预设答案。
例如:
- 发货时间;
- 退换货政策;
- 运费说明;
- 优惠券使用规则;
- 活动参与条件。
规则拦截有两个好处:一是降低大模型成本,二是提高响应速度,三是减少不确定回答。
7.4 意图识别与路由
对于无法用规则直接回答的问题,应先进行意图识别,再决定处理方式。
常见意图类型包括:
product_query:商品咨询;order_query:订单查询;logistics_query:物流查询;after_sale:售后咨询;complaint:投诉建议;transfer_human:转人工;general_chat:闲聊。
根据意图类型,系统可以选择不同处理策略。例如订单类问题调用订单工具,售后类问题调用售后工具,复杂问题直接转人工。
7.5 工具调用设计
AI客服的真正价值在于能访问业务系统数据,而不是只做通用对话。LikeShop单商户版可以提供内部服务接口,供AI工具层调用。
可对接的能力包括:
- 用户订单查询;
- 物流信息查询;
- 售后单状态查询;
- 商品库存与规格查询;
- 优惠券与活动规则查询;
- 售后申请入口。
工具调用应遵循统一接口规范,返回结构化结果,再由大模型组织成自然语言回复。
7.6 大模型推理
当规则和工具无法直接回答时,进入大模型推理环节。输入给大模型的内容应包括:
- 用户当前问题;
- 会话历史;
- 用户画像信息;
- 商品或订单上下文;
- 工具返回结果;
- 平台客服规则。
为提高稳定性,建议对大模型输出进行格式校验。如果返回结果不符合预期,应进行重试、降级或转人工处理。
八、结果推送与前端交互设计
8.1 推送方式选择
异步架构下,前端不能一直等待接口返回,而需要通过轮询或消息推送获取AI结果。
WebSocket推送
如果前端环境支持,WebSocket是更优方案。AI回复生成后,服务端可实时推送到用户端,交互体验接近同步客服。
轮询补偿
在不支持WebSocket或网络不稳定时,可采用轮询方式。前端定期请求最新消息接口,拉取当前会话的新增回复。
8.2 前端状态展示
为避免用户误以为发送失败,前端应明确展示消息状态:
- 发送中;
- 已发送;
- AI处理中;
- 已回复;
- 发送失败;
- 已转人工。
这些状态应与服务端消息状态保持一致,而不是前端单方面判断。
九、失败处理与补偿机制
9.1 失败分类
AI客服中的失败不能一概而论,应按类型处理。
临时失败
例如大模型超时、网络抖动、接口限流等。这类问题适合重试。
业务失败
例如用户问题涉及复杂投诉、敏感内容、特殊售后等。这类问题不一定需要重试,而应转人工。
系统失败
例如数据库异常、服务异常、依赖服务不可用。这类问题需要告警和人工介入。
9.2 重试策略
重试不是越多越好,而应设置上限。建议:
- 最多重试3次;
- 采用递增间隔;
- 不同类型异常采用不同重试策略;
- 超过次数后进入死信队列。
9.3 死信队列处理
死信队列不是终点,而是异常治理入口。进入死信队列的消息应触发以下动作:
- 记录失败原因;
- 发送告警;
- 进入人工处理列表;
- 补偿处理后重新入队或关闭消息。
9.4 降级策略
当大模型不可用时,系统不能直接瘫痪。建议建立降级链路:
- 大模型不可用;
- 优先使用规则回复;
- 规则也无法回答则转人工;
- 人工客服繁忙时给出提示或排队状态。
十、数据模型设计
10.1 会话主表
会话主表用于记录用户与AI客服的交互过程。
CREATE TABLE ls_ai_chat_session (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
session_id VARCHAR(64) NOT NULL,
user_id BIGINT NOT NULL,
channel TINYINT NOT NULL,
status TINYINT NOT NULL,
create_time DATETIME NOT NULL,
update_time DATETIME NOT NULL,
last_message_time DATETIME,
message_count INT DEFAULT 0,
UNIQUE KEY uk_session_id(session_id),
KEY idx_user_id(user_id),
KEY idx_status(status)
);
10.2 消息明细表
消息明细表记录每一条用户消息和AI回复。
CREATE TABLE ls_ai_chat_message (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
msg_id VARCHAR(64) NOT NULL,
session_id VARCHAR(64) NOT NULL,
sender_type TINYINT NOT NULL,
content TEXT NOT NULL,
status TINYINT NOT NULL,
intent_type VARCHAR(64),
reply_content TEXT,
fail_reason VARCHAR(255),
create_time DATETIME NOT NULL,
update_time DATETIME NOT NULL,
UNIQUE KEY uk_msg_id(msg_id),
KEY idx_session_id(session_id)
);
10.3 消费任务表
消费任务表用于追踪消息处理状态,保证幂等和可重试。
CREATE TABLE ls_ai_chat_task (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
msg_id VARCHAR(64) NOT NULL,
consumer_group VARCHAR(128) NOT NULL,
status TINYINT NOT NULL,
retry_count INT DEFAULT 0,
last_error VARCHAR(255),
create_time DATETIME NOT NULL,
update_time DATETIME NOT NULL,
UNIQUE KEY uk_msg_group(msg_id, consumer_group),
KEY idx_status(status)
);
十一、关键代码实现思路
11.1 消息发送与快速返回
用户消息到达后,系统先落库,再投递消息队列,最后立即返回。
核心逻辑如下:
- 生成
msgId和sessionId; - 保存用户消息;
- 设置消息状态为处理中;
- 投递消息到MQ;
- 返回前端发送成功。
11.2 消息消费与AI回复生成
消费者收到消息后,按以下步骤处理:
- 检查幂等状态;
- 识别消息意图;
- 调用业务工具;
- 调用大模型;
- 生成AI回复;
- 更新消息状态;
- 通知前端。
11.3 失败重试与死信处理
消费失败时:
- 记录异常原因;
- 增加重试次数;
- 未达到上限则重试;
- 达到上限则进入死信队列;
- 触发人工客服转接和告警。
十二、监控与运维体系设计
12.1 核心监控指标
为保证AI客服稳定运行,必须建立监控体系。
消息生产指标
- 消息发送量;
- 消息发送成功率;
- 消息投递耗时。
消息消费指标
- 消费成功率;
- 消费失败率;
- 平均消费耗时;
- 消息堆积数量;
- 死信数量。
业务结果指标
- AI回复率;
- 转人工率;
- 平均响应时长;
- 用户满意度;
- 问题解决率。
12.2 告警策略
建议设置以下告警:
- 消息堆积超过阈值;
- 消费成功率低于阈值;
- 死信数量突增;
- 大模型调用失败率升高;
- AI客服接口响应变慢。
十三、与LikeShop业务能力的集成方式
13.1 集成原则
AI客服不是独立系统,而应作为LikeShop的增强模块。集成时应遵循以下原则:
- 通过服务接口调用,不直接操作业务表;
- 复用用户、订单、商品、售后能力;
- 保持客服模块与交易模块边界清晰;
- 异常时不影响主业务链路。
13.2 可集成能力
LikeShop单商户版可向AI客服开放以下能力:
- 用户信息查询;
- 订单列表与详情查询;
- 物流信息查询;
- 售后单查询与创建;
- 商品信息查询;
- 活动与优惠券规则查询。
通过这些能力,AI客服可以从“会聊天”升级为“能办事”。
十四、效果评估指标
改造完成后,建议从技术稳定性和业务价值两个维度评估效果。
14.1 技术指标
| 指标 | 说明 |
|---|---|
| 消息发送接口耗时 | 用户发送消息后的响应速度 |
| 消息消费成功率 | AI消息处理成功比例 |
| 大模型调用失败率 | 推理环节异常比例 |
| 消息堆积量 | 峰值时MQ积压情况 |
| 死信率 | 最终失败消息比例 |
| 故障隔离效果 | 客服异常是否影响主业务 |
14.2 业务指标
| 指标 | 说明 |
|---|---|
| AI自动回复率 | AI独立解决问题比例 |
| 转人工率 | 需要人工介入比例 |
| 平均响应时长 | 用户发出到收到回复的间隔 |
| 人工客服效率 | 人工接待量变化 |
| 用户满意度 | 咨询体验评价 |
十五、常见问题与避坑建议
15.1 不要只关注模型能力,忽略消息可靠性
很多团队把AI客服等同于大模型调用,这是错误的。在生产环境中,消息可靠性、异常处理和故障恢复比模型准确率更基础。
15.2 不要让异步化变成“用户等待更久”
异步化的目标是提升稳定性,不是牺牲体验。必须配合状态提示、轮询或推送,让用户知道系统正在处理。
15.3 不要无限重试
无限重试会放大故障,浪费资源。合理的做法是设置重试上限,并对不同异常分类处理。
15.4 不要绕过业务接口直接操作数据库
AI客服需要订单、售后等数据时,应通过LikeShop服务接口获取,而不是直接查询业务表。否则会破坏系统边界,增加后续升级难度。
15.5 不要缺少监控
没有监控的异步系统几乎无法运维。消息堆积、消费失败、死信增长都必须可观测。
十六、结语
AI智能客服从“能回复”到“稳定可用”,关键不在于模型本身,而在于底层架构是否具备承载高并发、波动和异常的能力。
对于LikeShop单商户版而言,通过消息队列进行异步化改造,本质上是将AI推理从同步链路中剥离出来,形成一个独立、可靠、可运维的消息处理系统。这种改造方式对原有交易系统侵入低,适合私域商城、小程序门店和单商户平台快速落地。
真正优秀的AI客服系统,并不是追求每次都由AI回答,而是保证用户咨询有记录、有处理、有结果、有兜底。消息队列带来的不仅是性能提升,更是整个客服链路的可靠性升级。
來源:阿里雲開發者社區 AI · developer.aliyun.com