最近做完了这个电商客服+导购智能体的项目,从需求梳理到上线总共花了两个多月。做完之后最大的感受是:把客服和导购塞进同一个系统里,远不是"加个意图分类"那么简单。运营团队要的是售后问题别答错、售前问题能帮着促成下单,用户那边要的是别跟机器人绕圈子、推荐别像牛皮癣一样硬推。这两条线交织在一起,对架构设计、Prompt策略、知识库组织方式都提出了完全不同的要求。这篇文章就把整个项目的设计思路、开发细节和踩坑记录完整拆出来,给正在做类似项目的朋友做个参考。
这套系统适合谁、解决什么问题,先说清楚:如果你的业务是标准电商,日常咨询量大、商品种类多、客服人力不够用,想用LLM做智能客服,又希望它能结合用户会话上下文做商品推荐,那这个项目的框架基本可以套用。即使你只是一个中小型团队,没有专门算法工程师,这套方案里核心部分也尽量做到了"开箱即用"——用现成大模型接口、用向量数据库做检索、用规则和模型配合做意图判断,不需要从零训练模型。项目上线后,人工客服的日常咨询处理量少了六成左右,导购场景里通过智能推荐带来的成交转化比纯人工导购提升了大概一成,当然这个数字受品类影响很大,后面细说。
1. 项目整体定位与需求拆解
1.1 客服与导购为什么要合并到一个系统里
去年初我们复盘客服数据,发现两个非常典型的现象。第一,大量售前咨询其实集中在少数高频问题上,比如"什么时候发货""这个尺码怎么选""这款和另一款有什么差别",这些问题客服每天复制粘贴同一套话术,时间占比很高。第二,用户在咨询过程中被推荐商品的接受度并不低,但前提是推荐必须出现在合适的时机——比如用户主动问了"有没有适合大干皮的护肤品",这时的推荐转化率远超客服在闲聊中硬塞的广告。
但问题在于,过去客服机器人和导购推荐是两个独立系统,用户问一句"你们发货用哪家快递",推荐系统可能完全无感。即使做触发,也只是简单匹配关键词,根本没有把"售后询单"和"购前咨询"区分开。把两个能力塞进同一个智能体,核心目的不是炫技,而是让系统拥有完整的"会话场景理解"——知道用户此刻是带着情绪来催件,还是带着预算来挑货。这个判断做对了,后续所有回复策略和推荐逻辑才能成立。
从产品角度来说,用户端的感知也更有连贯性。传统方案里用户问完客服问题,再被引导去购物助手那,多了环节就多了流失。合并之后用户只需要在一个对话框里完成"咨询—比较—下单—查单售后"全链路,这才是一只合格的会话式导购客服。这背后需要统一管理会话状态、用户画像、知识库调用顺序和回复策略,正是整个项目最核心的复杂度来源。
1.2 核心需求梳理与技术选型思路
我们最终把需求切成四条主线。
第一条是意图识别与对话理解,要能区分售后、售前、闲聊、导购四类大意图,并细分出催发货、查物流、申请退换、商品对比、推荐请求等二三级意图。第二条是知识问答与信息检索,既要回答店铺政策、运费说明这类静态FAQ,也要查询订单状态、库存、物流轨迹这些动态数据。第三条是商品推荐与对比导购,能根据用户需求描述从商品库中筛选候选,并做差异讲解。第四条是服务兜底与转人工,当用户情绪异常、问题超出边界或者连续两次回答不被采纳时,要能无缝转给人工客服,并且附带完整上下文。
基于这四条需求,技术选型上没有太多纠结。底层直接用大语言模型做对话生成,但外层要叠加意图分类器和业务规则来保证可控性。知识库部分采用RAG方案,把FAQ和商品库向量化,既保留灵活的语言表达,又能在必要时给出有依据的准确信息。订单物流这类动态信息走API查询,不允许模型凭记忆输出。商品推荐分两步走,先走结构化筛选(品牌、品类、价格约束这些硬条件),再做语义匹配和话术润色。整体架构不追求新,只追求每一层都能被review、被测试、被兜底。
2. 系统架构设计与核心环节拆解
2.1 整体技术架构
整个系统从上到下分四层:接入层、会话理解层、业务执行层、数据服务层。接入层很常规,就是Web客服窗口和小程序消息入口,把用户消息统一推给后端的会话服务。会话理解层是智能体的"大脑",包含意图分类器、情感识别模块、实体抽取模块和多轮状态管理。业务执行层负责对接各种外部动作,包括商品检索服务、订单服务、退换货服务、人工客服工作台。数据服务层则管理着FAQ知识库、商品向量库、会话日志库和用户标签库。
凡是要跟外部系统打交道的环节,都通过独立的执行服务来封装,模型本身不直接调业务接口,而是输出结构化的工具调用指令,由执行服务去落地。这样设计的好处是:接口不稳定时可以在执行层做重试和熔断,模型生成出错时不会直接影响业务系统,权限控制和数据审计也比较集中。后面调优时也证明这个设计非常关键——有一段时间模型频繁在订单查询参数上出错,就是因为我们在执行层加了参数校验和补全逻辑,才没让脏数据流到下游。
2.2 意图识别与对话管理系统
意图识别是整个智能体里面最重要的模块,它错了后面全错。我们没有完全依赖大模型的自主判断,而是用一个三层结构来保证意图识别的准确率。
第一层是规则优先器,处理那些意图极度明确的表达。比如用户直接输入订单号的纯数字串,或者包含"退""换""投诉""人工"这类强意图词,直接用规则锁定意图,根本不进模型。这么做不是为了省成本,而是因为最关键的意图必须保证百分之百准确,规则匹配在核心场景上永远比模型可靠。第二层是模型分类器,用一个较小的模型在限定标签集上做分类,相比直接问大模型"用户意图是什么"要稳定得多,输出格式也规范,方便后续逻辑判断。第三层才是让大模型做主对话判断,处理分类器置信度低、前后文有歧义的场景。
对话管理部分用的是"槽位+状态机"的模式,但比传统框架灵活一些。每个大意图对应一个会话状态节点,节点内部维护所需槽位。比如"退换货申请"这个节点,必须要收集订单号、退货原因、商品ID这些核心槽位,槽位没齐就继续追问,齐了就交回给大模型组织确认话术。导购类话术对槽位的要求更低,更依赖用户的自然描述。这套混合状态机的好处是:确定性的流程用代码控制,确定不会跑偏;开放性的语言生成交给模型,体验不死板。
2.3 知识库与商品数据接入方案
知识库建设是工作量最大的部分。FAQ知识库大概整理了一千多条,覆盖了物流时效、发票政策、价格保护、退款流程、尺码建议等十二个大类。每条FAQ都经过话术改写和扩充,同一个问题至少三种问法,这样才能保证召回效果。商品知识库则是把全平台在售的SKU结构化属性和介绍文案做了清洗,再切块向量化。向量化这一块有个经验很关键:光用商品标题和详情页做向量不够,实际检索效果很差,因为用户的问题和商品文案往往不是同一个语言体系。我们后来让运营团队为每个重点品类补充了"场景词表",比如"油皮救星""上脸不干""大体重适合"这类偏用户表达的词,把它们关联到对应商品标签上,召回率才显著上去。
动态数据这块单独走API。用户查物流、查订单状态、申请售后,全部通过工具调用去实时请求订单服务。模型只负责从对话里抽取订单号和必要参数,实际数据必须来自接口返回。这个原则一定要守住:模型可以帮用户理解数据,但不能用内部参数生成数据。一旦让模型把查到的一半和想象的一半拼在一起,系统离出事就不远了。
3. 实操开发过程与关键步骤实现
3.1 数据准备与标注流程
整个项目的数据工作分三条线并行推进。
第一条线是历史客服会话清洗。我们拿了过去一年的脱敏客服对话记录,大概五十万条,做了以下处理:去掉客服内部备注和工单流转信息,把多轮会话切分成上面的"单意图片段",过滤掉包含手机号、地址等隐私信息的片段,最后做一轮敏感信息打码。清洗完还剩三十万条左右,质量基本可用。
第二条线是意图标注。标注任务包括三类:原始客服会话的意图标签、对话中的实体标签(订单号、商品名、尺码、价格等)、以及"用户满意度"这个主观标签——用来筛选高质量会话做后续的Prompt示例和few-shot语料。标注工作我们请了五位有客服经验的同事来做的,这里强烈建议:标注员务必用有业务经验的人,不要用外包通用标注团队,客服对话里的口语省略和业务黑话太多,没有业务背景的人根本标不准。
第三条线是导购语料构造,这部分没有现成数据,只能造。方法是让有经验的导购员根据真实成交案例,写"用户需求描述—推荐话术—成交结果"的三元组,再通过改写和扩充生成变体。用这套数据来对推荐话术做监督微调,效果远好于直接让大模型凭空生成推荐话术。
3.2 Prompt设计与多轮上下文管理
Prompt设计这块我们迭代了七八个版本,最重要的体会有三条。
第一条是系统提示词里必须写清楚"你是做什么的边界是什么",而不是只写"你是金牌客服"。我们最终版的系统提示词明确写了:你是某电商平台的智能客服兼导购助手,职责范围包括售前咨询、订单查询、退换货指引、商品推荐,超出这四个范围的问题必须引导用户转向人工客服。加了范围限制之后,模型胡编乱造的概率明显下降,遇到不会答的问题也更倾向于承认不会了,而不是硬答。
第二条是给模型提供结构化的会话记忆摘要。多轮对话中直接塞全量历史会导致两个问题:长对话时上下文爆掉,短对话时无关信息干扰判断。我们方案是在每轮对话结束后,用一个小模型把当前会话压缩成结构化摘要,包括用户身份、当前诉求、已确认信息、已推荐商品、待办事项。下一轮对话将摘要作为上下文注入,既省token又保持关键信息不丢。实测在十轮以上的长会话场景里,这套方案比直接拼接历史的效果要好得多。
第三条是给模型示例要精选。我们在每个意图场景下面放了3到5条高质量示例对话,这些示例不是随便写的,而是从标注阶段筛选的"五星会话"中抽取的真实样例。真正高质量的few-shot对模型行为的规训作用,比你在提示词里写一百遍"要友好"都管用。
3.3 商品推荐策略与RAG检索实现
商品推荐是整个项目里最容易做成"四不像"的部分。既要有客服的耐心与克制,又要有导购的主动与专业,两者之间的度很难拿捏。我们最终把推荐策略拆成三层规则来控制。
第一层是意图门槛。只有识别到的会话场景是导购或售前咨询,推荐逻辑才会启动。在售后场景里哪怕是用户问了一句"那我能不能换个贵的",也要等售后流程处理完再推荐,不然会让用户觉得平台在趁机做买卖,体验很差。
第二层是候选生成。先把用户的自然语言需求翻译成结构化筛选条件,比如"适合25岁以下混合皮日常通勤用的粉底液",就翻译成价格区间、适用肤质、使用场景这三个筛选标签。这部分我们用大模型做标签抽取,输出一个固定JSON结构,然后走结构化查询。结构化查询的结果为空或不足时,才退回到向量检索。这样做的好处非常明显:硬性条件不会出错,比如用户说"不要蓝色的",结构化筛选能保证绝对不推蓝色商品,而纯向量检索大概率会漏掉这个约束。
第三层是推荐话术生成。模板和模型混合使用,先由模板拼出用户诉求确认和核心推荐理由,再由模型润色语言、生成自然衔接的说明。润色时严格禁止模型推荐候选列表之外的任何商品,测试时专门对这条做了冒烟测试:给模型塞一个高佣金的竞品词,让它输出推荐列表,必须能稳定地拒绝。做AI产品久了你会明白,这类可控性测试往往比效果测试更优先。
3.4 系统集成与联调上线
系统集成主要解决两个问题:消息路由和状态同步。
消息路由方面,所有入口渠道的消息统一到消息网关,网关根据用户是否在会话中来决定走智能体还是直接转人工。这里有一个容易踩坑的细节:用户如果是从已下单的订单详情页进来,需要把订单上下文一并传给智能体,这样当用户问"我这个衣服能退吗",系统不需要再让用户复制一遍订单号。这个体验细节很影响用户对"智能体是否聪明"的判断。
状态同步方面,人工客服介入后智能体要暂停发言,等人工结束会话再恢复。我们做了个简单的会话所有权切换机制,人工接管时把智能体的"发言权"置为禁言,结束接管后再恢复,并把人工处理的结果同步给模型作为后续参考。这个机制上线初期救了系统好几次——有一次模型在人工正在处理退款时突然又问"还有什么可以帮您",被客服同事追着吐槽了两周。
联调阶段测试用例全部结构化,按照意图识别准确率、槽位填充通过率、知识答案精确率、推荐商品相关性、敏感话题收敛率、转人工成功率这几个维度,分别跑自动化回归。上线前最后一轮测试跑了三千条消息样本,意图识别的整体准确率做到了94%左右,其中售后类场景准确率最高达到97%,导购类场景低一些,在88%左右。识别错误的样本里,有三成是"售前咨询"和"导购推荐"之间的互相混淆,这也是发起专项优化最多的环节。
4. 常见问题排查与避坑实录
4.1 售前和导购意图纠缠不清的问题
导购和售前咨询在日常表达里经常混在一起,这是最影响体验的意图分类难点。用户说"这款手机续航怎么样"是售前咨询,说"有没有续航好的手机推荐"是导购,但大量真实用户会这么说"我想买个手机,续航要好点,之前看的那个不太行"。这句话里既有商品咨询也有换品推荐的诉求。
我们的解法是引入一个"咨询响应优先"策略:只要无法可靠区分意图,优先做咨询回应,但同时把商品推荐作为补充内容附在回复末尾。因为从业务角度来算账,把导购误判成咨询,损失的是少推荐了一个商品;把咨询误判成导购,用户会感觉答非所问,直接流失。这个决策在试点数据上也得到了验证——优先保证咨询准确率比优先保证导购触发率带来的总体转化更高。后来我们干脆改成了更精细的方式:用意图置信度来控制推荐紧迫度,高置信度导购场景直接推荐,中置信度先答疑再顺带提一句,低置信度只答疑不推荐。
4.2 模型幻觉与事实性错误控制
模型幻觉在客服场景里的杀伤力比在内容创作场景里大十倍,因为用户会拿"客服说的"当承诺。实测最危险的幻觉类型是编造退换货政策、编造物流时效、编造优惠活动。比如模型曾经生成过"可以无理由退换30天内有效",实际上平台政策是7天,用户拿着这个截图来投诉,处理成本极高。后来上线的防幻觉机制有这么几个关键点。
一是所有事实型回复都以检索到的知识库原文为基准,模型只做改写和精简,不允许凭空新增事实。我们在Prompt里强制要求模型输出内容必须能在给定知识片段中找到对应支撑,否则就回复"这个问题我需要帮您转接人工客服详细确认"。二是价格、日期、百分比、天数这类关键数字在生成后要做一致性校验,与知识库不一致就直接拦截改写。三是对知识库没有覆盖的新问题和新政策,不猜测,一律走人工兜底。宁可交给你转人工,也不能冒险猜。从上线后的用户满意度数据看,"未能直接回答但转人工正确"的用户满意度反而比"答错但态度好"的用户满意度高出一截。
4.3 知识库更新与数据漂移问题
知识库上线后不是一劳永逸的,随着平台政策和商品库频繁变动,知识库内容很容易过时。遇到过的最尴尬场景是:模型还在用老版本的满减规则回答问题,用户已经看到了新规则页面,两边信息不一致,用户直接觉得AI是个摆设。
这个问题需要建立一套知识库生命周期机制。运营侧每次修改政策或上新品时,要同步提交知识库变更工单,系统内部用数据管线的形式跑一遍"内容更新—向量化重算—线上发布"。变更发布后,系统会自动生成一组与该变更相关的验证用例,跑一轮回归检测,比如改了运费规则,就自动测试"运费多少""谁承担运费""为什么运费变了"这几个相关问题。这套机制要自动化到什么程度呢?我们在内部规定过一个目标:从运营提交变更到新知识生效,整个过程不超过30分钟,不能有任何一天出现线上和知识库的明显不一致。
4.4 性能延迟与成本控制的平衡
LLM接口的响应时间在整个链路里占了大头,慢的时候一次对话要2到3秒。用户能接受的客服回复延迟在2秒以内,超过这个值就会觉得"机器人卡了"。优化延迟这件事,我们做了几件事。
第一是把高确定性回答从模型链路里摘出去。像"发货时间是什么时候""怎么查物流""退款多久到账"这些标准问题,直接走后端的最短响应通道,由模板引擎直接返回,根本不用过LLM。这部分请求占全部咨询量的三成左右,摘出去后,系统平均延迟降了一截。第二是采用流式输出,让用户先看到"正在输入"的状态,避免等待焦虑。第三是通过语义缓存复用已生成的回复,同一个问题在一段时间内重复出现时直接从缓存拿结果。这三板斧打下来,平均首响应延迟降到了一秒以内,网络稳定时的体感已经接近真人客服了。
成本控制方面,Tokens消耗主要集中在长对话的上下文翻写上。我们通过控制最大会话轮数和定期做记忆摘要,把每会话平均消耗减少了四成左右。还有一个小技巧是:导购推荐这类要调用多个工具的流程,优先做工具参数的强校验,让流程尽量在一次工具调用内完成,避免因为参数缺失导致反复调用浪费轮次。上线后的实际成本摊到每万次会话上,比纯靠人工客服的边际成本低很多,算经济账是完全走得通的。
4.5 用户情绪识别与服务底线保障
智能体很容易陷入一个恶性循环:用户情绪已经开始激烈,模型还在按正常流程一条条核对信息,用户越说越气。我们接入了情绪识别模块,用微调过的文本分类模型对用户消息做情绪分级,分为平静、不满、愤怒三等。愤怒级别的消息会触发特殊处理策略:回复话术中使用更短的句子、更少的反问句,并且加入道歉和共情表达,同时把转人工的优先级提到对话流程的最前面。三句话之内用户情绪没有缓解,就强制转人工。
另一个容易被忽略的底线是服务边界。模型对超纲问题(比如法律咨询、医疗建议、投资推荐)必须有识别和拒绝能力。这类问题如果当普通客服问题乱答,法律风险不可控。我们在意图标签里专门加了"超纲拒绝"这个类别,不给模型自由发挥的空间。效果验证方法不复杂:用一两百条边界测试用例定期跑回归,保证模型对这类问题稳定拒绝而不是试图回答。做AI客服的底线思维必须是:不该答的坚决不答,比该答的要答得好更重要。
结束语:项目完成后的一点心得
如果让我总结这个项目最值得记住的东西,我会说三句话。
第一,智能体的核心不是越智能越好,而是可控性优先。无论模型多强,都要有清晰的边界、可验证的机制和兜底的路径。第二,别想着把所有能力都交给模型自由发挥,确定性的东西用规则做,开放性的东西才交给模型,这个比例要随着上线后数据逐步调整。第三,用户对智能体的容忍度比你想象的低,但也比我想象的有弹性——只要系统能快速意识到自己不行并体面地转人工,用户是愿意给机会的。
最后分享一个小技巧:把常见问题的上下文切片存下来,每两周做一次会话聚类分析,能很直观地发现知识库的空洞区域和模型回答的弱项。我就是在一次聚类分析里发现,用户特别喜欢问"商品瑕疵怎么补差价",而知识库里完全没有覆盖。补上这条之后,相关会话的人工转接率马上降了将近二十个百分点。智能体这种东西,做出来只是开始,真正让它变好用,靠的是持续让数据反哺系统。