【两年实战】一个生产级 AI 客服,到底是怎么做出来的?

0 评论 227 浏览 1 收藏 37 分钟

作者把两年做 AI 客服的实践重新整理了一遍:空气小猪最初的目标,是把创始人从每天两三个小时的人工客服里释放出来,他们先自己做了半年客服、攒下真实语料,再让 AI 上场,一路讲到知识整理、回答兜底与成本优化的七层能力。

之前我们连续写过几篇 AI 客服的文章,有的在讲 RAG 怎么做,有的在讲 AI 如何接管业务,还有一篇讲了个不太好解释的问题:AI 已经承接了接近一半的流量,综合成本居然还是比人工高。

这些文章放在一起,其实才能比较完整地说明,一个生产级 AI 客服到底是怎么做出来的、又要如何做优化。

更重要的是:我们可以直观感受到,在最适应于 AI 的客服场景,AI 到底是个什么样的身位、又是如何一步步发展的,这对于其他场景的借鉴意义很大

我们自己的创业产品空气小猪,目标很简单:把创始人从每天两三个小时的人工客服里释放出来;但另外一个电商陪跑项目,从最初就是带着替代人工的目标出发的,AI 要查订单、改状态、发起售后,要真正接走原来由客服完成的工作。

这两种客服,看起来都是用户问一句,AI 回一句,背后的工作量差距却非常大。

所以今天把这些实践重新整理一下,从简单知识问答开始,一直讲到业务接管、成本和持续迭代。

一、什么时候做 AI 客服

空气小猪是一款基于社交的语言学习 App。从上线之后,客服一直是我们自己在做,每天消耗两三个小时,这种状态持续了半年多。

大家要注意,所有的产品上线,一定都是自己去做客服,你需要最直观去感受:用户哪里用得不爽,卡点在哪里,为什么会产生这些疑问。这些都是产品迭代的重要材料。

期间我们由于太累了,也把客服工作交给过研发人员、也找过兼职客服,但效果并不好。一方面是投入程度不够,另一方面是对产品理念和定位理解不深,经常没办法把用户的问题解释清楚、更多是当成日常工作在打发。

而空气小猪的产品理念和传统语言学习软件有些不一样。很多用户带着背单词、刷题、上课的预期进来,但我们希望重用真实聊天内容,帮他建立一个贴近日常生活的外语环境。客服要反复解释的,除了功能怎么用,还有产品为什么这样设计。

紧接着规律开始出现,时间一长,问题开始大量重复:产品定位、账号登录、翻译、推送、加好友、播客模式,高频问题基本就这些。每天继续人工回答,确实很费时间,也不可持续,于是 AI 开始出场了。

到这里,很多同学会好奇:你们自己就是做 AI 的,为什么不一开始就上 AI 客服?

原因很简单,我们也需要积累原始数据啊。

半年多的真实对话,给我们留下了一批很好的语料。里面有用户的真实问法,也有我们过去的解释方式,等基础问题开始不断重复,构建 AI 客服的时机也就到了。

已有成熟知识和流程的公司,当然没必要等半年,但数据和答案,总要有人先确认。

至于 AI 客服的能力边界,我们给第一版划定的范围也比较简单:产品问题基于知识回答,故障和建议收集后记录,用户闲聊时自然回应,回答不了的问题留下来,后面补知识。

同时要明确哪些事不能做。不能承诺某个功能一定上线,不能承诺用了产品一定达到什么学习效果,也不能在没有依据的情况下强行回答。

AI 客服最致命的,就是一本正经地胡说八道。 用户不会关心这是模型幻觉还是知识库没召回,他只会认为是你们产品给了错误的信息。

所以我们一开始就把原则定好了:宁可少答,也不要乱答。信息没收集够就继续问,超出能力就交给人。

二、知识整理,没法偷懒

很多同学做知识库,最关心的是模型、平台、向量数据库。但真正做过以后就会知道,最耗精力的部分,一定是把知识整理好。

我们之前反复说:数据才是 AI 客服的灵魂。

如果产品知识不全,答案本身就有问题,你在工程上做再多优化,也没办法凭空变出正确答案。

空气小猪的知识来源有两部分:一部分是人工整理的产品知识,包括产品定位、核心理念、功能说明、使用方式、价格、数据安全,还有哪些功能明确不做;另一部分就是历史客服记录。

人工知识比较系统,但不一定覆盖用户真实的问法;客服记录更贴近实际,但内容很散,还会有重复、过期和针对某个用户的特殊处理。两部分需要合起来整理。

当时我们按会话导出数据,每十个会话作为一批,借助 WorkBuddy/Coze 工作流提取有效问答,写入飞书多维表格,再进行去重、合并和人工校验。

但真正费时间的是后面的确认,同一个问题,历史上可能有不同答案;某个功能以前不支持,现在已经上线;客服当时为了解决一个特殊问题,给过一次例外处理,这些都不能不加判断地变成正式知识。

所以,最后一定需要懂产品的人来看,他要知道哪些说法还有效,哪些必须改,哪些只适用于特定情况。能保留来源、适用范围和更新时间,后面处理冲突也会容易很多。

整理知识时,还要提前考虑分块。

我们用 Markdown 按标题组织知识,再根据层级拆成知识块。这里最重要的是,每一块都要能够独立理解。如果答案只有“支持,操作和上面一样”,拆出来以后肯定没法用;如果只写“这个功能暂不支持”,却不知道是哪个功能、哪个版本,也一样有问题。

这里不同团队都会有很多相似的问题,比如一些大聪明为了提高召回率,让模型把一个问题泛化成多个问法,再把“问题一加答案”、“问题二加答案”、“问题三加答案”分别存进去。

看起来覆盖的问法更多了,应该更容易命中吧?

结果用户一问,召回的前几条全是同一个答案,只是问题写得不一样,而且得分还挺高。其他可能有用的知识,反而被这些重复内容挤掉了。

这种情况,如果只看有没有命中,会觉得效果不错;真正把召回结果打开看,才知道知识根本没有找全。

所以,多个问法可以保留,但最好关联到同一条知识。召回后按知识 ID 去重,别让同一份答案反复占位置。

技术实现上,我们当时采用 Python、FastAPI、MySQL 和 FAISS,向量模型用的是千问的 text-embedding-v4。MySQL 保存知识原文、分类、状态和审核信息,FAISS 负责向量检索,两边通过 ID 关联。

知识先入业务数据库,再异步向量化、写入索引,成功后更新状态。真正检索时,先找到向量对应的 ID,再回数据库取原文。原文和检索索引分开,后续替换检索引擎也方便一些。

知识更新后,索引也要跟着更新,否则后台看着改了,AI 用的还是旧答案。

三、有知识,AI 还是错

知识整理完,客服也不会自动变准确。用户说的这句话怎么理解,应该走哪个流程,拿哪些知识来回答,里面依然有很多问题。

我们最初只分产品咨询和闲聊,后来发现不够。用户还会反馈打不开、点不动、收不到通知,或者希望增加某个功能。这些问题不能回一句“谢谢反馈”就结束,需要收集信息、分类记录,交给产品和技术继续处理。

于是一级意图扩展成三类:产品咨询、用户反馈、闲聊。

咨询走知识检索,反馈走信息收集和登记,闲聊保持自然互动。语言学习产品可以适当保留陪伴感,其他严肃业务有没有必要开放闲聊,要看自己的场景。

不过,只给模型三个标签是不够的。我们从产品本身和用户视角分别梳理,再融合出二级分类:产品理念、价格、登录、消息推送、翻译、词卡、播客、故障、功能建议等,给一级意图补上明确的判断标准。

比如“怎样关闭通知”属于使用咨询,“为什么一直收不到通知”就可能是故障反馈。两句话都提到了通知,但后续流程不一样。

还有一个问题是指代。

用户先问“空气小猪是干什么的”,接着问“它怎么用”。直接拿第二句话去检索,很容易找不到,真正要检索的应该是“空气小猪怎么使用”。

所以我们在意图识别之前,增加了指代消解,结合历史对话,把“它”、“这个”、“那个”还原成具体对象。如果前面出现过多个对象,实在判断不出来,就继续问,别替用户猜。

这又涉及上下文应该带多少的问题。

太少,早一点的关键信息丢了;太多,速度慢、Token 消耗大,还会混进一堆无关内容。我们采用的办法是,保留最近几条原始消息,更早的对话异步压缩成摘要,只留下事实、诉求和未解决的问题。

但订单状态、支付结果这些信息,不能只相信摘要,办理业务时还是要查系统。用户上次说没收到退款,不代表现在依然没有到账。

检索不能只靠向量

向量检索擅长找语义相近的内容,比如“对英语有没有帮助”和“能不能提升英语能力”,表达不同,意思相近。

但用户明确问 Memo 词卡、播客模式时,功能名就很重要。只靠语义相近,可能把另一个功能的说明找出来。所以我们加入 BM25,补充关键词匹配,再把两路结果合起来使用。

在此基础上,我们还做过问题泛化,把一句口语化提问改写成几条适合检索的问题,分别查找知识。

不过,路数一多,重复和弱相关内容也会增加。因此还要融合、去重和重排。RRF 主要根据不同列表里的排名融合结果,Reranker 再对候选内容做更细的相关性排序,最后挑出真正需要的知识。

这些组件都有各自的用处,但不是每个问题都需要走一遍。一个很明确的功能查询,直接检索就能回答,没必要先让模型扩写五条问题。步骤增加了,效果不一定更好,调用费用却会实实在在增加。

这里还要补充一下聊一下“置信度”。向量相似度、重排分数和模型自己输出的 confidence,含义并不一样,都不能直接当作答案正确的概率。我们早期使用过 0.5 的阈值,那只是当时的试验设置,换个模型和知识库就需要重新验证。

生成回答要有兜底

知识召回以后,我们会让模型再判断一次:这些资料到底够不够回答用户的问题?

当时在输出里加了一个 useful 字段。知识足够,就正常回答;知识不足,就返回 false,同时把问题送进待处理池,后续补知识。

模型的判断仍然可能出错,但至少回答不了的问题被记录下来了,后面可以复盘。

故障和建议则有另一套处理逻辑。用户建议的功能如果已经存在,就告诉他怎么用;如果不存在,再看是否符合产品方向,是否属于明确不做的范围。可以评估的就登记,但不承诺具体上线时间。

故障也一样,先收集清楚,再创建记录。只有后台确实写入成功,才能告诉用户“已经记录并反馈”,不能只在回复里把这个动作做完了。

四、回答问题 → 完整 SOP

接下来看另一个电商项目。

甲方原本在上海、成都和武汉都有客服团队。上海成本最高,一张工单的综合处理成本达到数十元,一名客服一天大约处理二三十单。团队已经优化过话术、排班和客服系统,人的操作速度基本到了上限。

成都和武汉原本合计有数十名客服,随着业务调整和自动化推进,常驻的一线人员缩减到了个位数。公司希望继续收缩高成本团队,保留一支兜底队伍,让 AI 承接标准化服务。

所以这个项目,从最初就是带着减少人工、甚至替代人工的目标出发的。压力也很直接,不能只做一个展示效果不错的智能问答。

我们期待用户问的是“退货期是多久”,真实用户却会说:“我上周买的商品已经拆封,用了两次感觉有问题,现在还能不能退?”

这时候,光找到退货政策远远不够。

系统要找到具体订单,确认签收时间、商品类别和拆封情况,判断是质量问题还是主观不满意,再根据规则决定继续询问、申请售后,还是转人工。最后还要把动作真正写进售后系统。

一个熟练客服看似只回复了几句话,背后已经完成了信息理解、数据查询、规则判断和系统操作,所以:

要蒸馏这个客服,光上传他过去的聊天记录是不够的。我们还得知道,他为什么查这些信息,为什么这样判断,以及什么时候会把问题交给别人

这也是各种 AI 小工具继续往下发展时,一定会遇到的问题。

AI 帮客服查到了资料,生成了回复,然后呢?客服还是要看一遍,还是要判断,还是要打开后台、填写信息、点击提交。每笔业务依旧要等人操作,整条流程的人效就很难发生根本变化。

所以后续要做的,是把完整 SOP 导入系统,让前后步骤可以接起来。

在这种场景下,我们更倾向于先采用 Workflow。哪些步骤必须做,缺什么信息继续问,满足什么规则才能执行,失败以后去哪里,都由系统显式控制。

模型负责理解用户的复杂表达,程序负责已经明确的条件校验,工具负责查询和执行。不是所有节点都需要让大模型重新思考一遍。

为什么没有直接用 Agent

很多同学可能在疑惑:为什么不用 Agent 模式,现在通用智能体已经这么强了?这里可能是第二个反认知的点:

ReAct 类 Agent 可以根据当前结果,自己判断下一步调用什么工具。这种自主性当然有价值,但路径已经明确的高频客服流程,每次再规划一遍,就会增加调用、延迟和不确定性

也就是,在生产场景下,其实 Agent 的实际使用场景是不太多的。我们会更关心稳定、成本和可控性。业务不需要的自主性,没必要为了追求架构先进硬加上去。真遇到处理路径无法提前确定的任务,再引入有边界的 Agent,也完全来得及。

同样,选择平台还是自己写代码,也要看实际需要。

空气小猪当时考虑过 Dify 等框架,最后选择工程化开发,主要是希望把检索、排序、上下文、日志和系统对接握在自己手里。在 AI Coding 的帮助下,这件事的实现难度也下降了不少。

但自己写代码,并不代表后续没有维护成本。平台能满足就用平台,需要深度定制再写代码,我们用 Coze 清洗会话、自己维护在线客服,就是这样的分工。

五、蜜月期 → AI 独大

电商项目刚启动时,我们也没有直接让 AI 处理售后,先做常见咨询和查询,把答案推荐给客服,由客服选择使用。之后才从 1% 的真实流量开始,小心地尝试直接回复。

这个阶段比较容易看到效果。过去客服要在很多条政策里找答案,现在 AI 几秒钟就能给出建议,客服反馈也不错。

但只要问题涉及具体订单、需要修改信息,或者出现规则之外的情况,系统就开始暴露不足。所以我们保留了人工审核,AI 的回复和处理建议先给客服看,确认后再发送或执行。

这就是典型的 Copilot 模式,也是人与 AI 的蜜月期。

人工每一次接受、修改和驳回,都给我们留下了很有价值的样本。哪些政策有冲突,哪些问题缺数据,哪些建议几乎每次都能用,哪些场景总要重新写,都能从这里看出来。

但问题也来了:过去客服自己判断、自己回复,现在还要先看 AI 的建议,判断靠不靠谱,有问题再修改。AI 表现不稳定时,审核甚至会增加工作量。

所以,AI 上线了,人力成本不但没降,反而又多了一笔 AI 的费用。这个是 AI 项目最危险也最被耻笑的阶段。

积累了一批数据后,我们开始按场景的风险和成熟度放权。已经验证充分、规则明确的场景,进入自动处理白名单;复杂例外和高风险问题,继续交给人工。

AI 也开始获得两类重要能力:查和写。查订单、物流、支付、会员和售后进度;在权限允许的情况下,修改部分信息,调用接口触发业务流程。

放权之前,我们做过人机结果对照:客服照常处理,AI 在背后同步跑一遍,留下日志。这套影子系统是用来验证能力的,真实写操作要隔离,不能人工提交一次售后,AI 又提交一次。

这个阶段的感受很直接:Token 用了不少,效率却没有同步提高。因为人和 AI 都在干活,只不过 AI 干的那一遍,主要还是为了验证。

与此同时,团队关系也变了。之前 AI 帮客服减轻工作,现在开始接走工作,大家对岗位、考核和责任都会有想法。项目负责人会花很多时间解释和协调,这些管理成本,Demo 里是看不见的。

不知道下一步该干什么了

原来我们以为,技术和管理问题处理完,效率就该起来了。结果团队又进入了一段迷茫期:AI 已经做了很多功能,但究竟会什么、不会什么,下一步最值得做什么,反而越来越说不清楚。

于是,我们重新整理场景地图。

售前、售中、售后的分类太粗了,退款进度查询、质量举证、补发申请、地址修改,必须继续拆。每个场景要明确用户意图、前置条件、所需数据、业务规则、工具、风险、成功标准和转人工条件。

这张表一出来,团队才又有了可以共同讨论的东西。本周做哪个场景,缺的是知识还是接口,做到什么程度可以放量,都能说清楚。

几个月下来,按当时的统计,系统覆盖了超过七成的客服场景,承接了接近一半的真实流量。

这里两个数字不能混用。场景覆盖说的是会处理多少类问题,流量接管说的是实际承接了多少请求。至于这些请求最终有多少完全不需要人工、真正解决了,还要继续看自动解决情况。

场景数量也不代表业务量。几十个长尾场景,可能没有一个高频场景的咨询多。所以后面我们优先考虑高频、标准、风险可控,而且做完能真正释放人工的场景。

六、AI 还是比人贵

回到开头那个最反常识的问题:AI 已经干了这么多活,为什么综合成本还是高于人工?

盘一下账单就明白了。

首先是建设费用。产品、研发、知识整理、场景运营、系统接入,这些都要人做。传统客服系统已经运行多年,费用早就摊薄了,AI 客服还在补基础设施,研发投入却是当下实打实在花的。

其次是双重成本。很多场景还在审核和接管阶段,AI 先理解、查询、生成,人工再看一遍。同一张工单同时消耗模型和客服时间,不能因为 AI 参与了,就认为人工已经退出了。

再其次,复杂调用也没有想象中便宜。识别意图、补充信息、选择工具、读取结果、检查风险、生成回复,一笔业务可能调用多次模型。上下文越长,工具越多,重试越频繁,费用越高。

此外,节省的工时还没有完全变成节省的支出。AI 接了部分流量,但排班、外包和人员安排没有相应变化,账上的人工成本就未必下降。剩下交给人工的问题通常还更难,也不能直接按流量比例折算人力。

最后还有持续维护。政策会改,知识会过期,业务会增加新玩法,模型和提示词更新后要重新评测。做成以后,依旧需要一支团队来维护它。

所以我当时陪跑到那个阶段,后面再了解情况:AI 客服的综合成本也没有完全优于人工。

这件事很难圆。项目负责人可以讲长期、讲趋势、讲未来扩展性,但当前成本高,确实就是高。账单里除了客服人力,又加上了产研、运营和 Token。

当然,这不代表项目一定没有价值。客服人数不再严格跟随业务量增长,避免扩招、减少加班、释放关键人员时间,也都是收益。但这些需要分别算,不能全部包装成已经省下来的工资。

要比较,就在业务量和服务质量接近的情况下,把建设分摊、运行、人工兜底和返工一起算进去,最后看每个真正解决的问题花了多少钱。只看一次模型调用的价格,算不清这个账。

七、如何降低成本

那接下来怎么办?从这些问题出发,我会先看整张工单,而不是急着换便宜模型,甚至什么地方应该用贵的模型、什么地方应该用便宜的模型,都是需要设计的。

先把人工的重复动作找出来

用户发一句话,客服看一次;AI 给一个结果,客服确认一次;进入下一个步骤,客服再点一下。如果整条链路都是这样,模型便宜一点,确实省不了多少人工。

对于已经验证充分的场景,需要逐步取消不必要的逐条审核,让系统能够把业务往下推进。高风险问题保留关键确认,但信息收集、数据查询和材料准备,可以先由系统完成。

这里还需要记录任务状态。现在处理哪笔订单,已经收集了什么,缺什么,刚执行过哪个动作,下一步是什么,都要保存下来。否则每次从聊天记录重新理解,既费 Token,也容易重复追问和重复操作。

工具调用同样要检查结果。创建售后超时了,不一定是没创建成功,也可能只是结果没返回。先查清楚再决定是否重试,别让同一笔业务被提交好几次。

把不需要的调用拿掉

明确的问题直接检索,没必要全部多路改写;查订单状态就查接口,不需要围着同一个结果反复推理;固定规则用程序判断,也不必每次让大模型重新解释。

稳定的产品说明可以缓存,但要跟知识版本一起更新。涉及用户订单和权益的信息,不能因为问法相似,就把另一个人的答案拿来用。

上下文也一样。意图识别、检索和回答,不需要每次都带一模一样的完整材料。当前节点要解决什么,就给它相关信息,别把所有历史都塞进去。

再来看模型怎么选

我们项目开始时,通常会先用效果更好的模型验证,等分类标准、提示词和流程稳定,再考虑成本替换。空气小猪当时用 GPT 做过效果参考,测试了多个 Qwen 模型,最后结合效果和成本使用 Qwen-plus。

简单分类、表达组织和复杂判断,可以使用不同模型。但拆分也不是越细越好,拆成很多串行节点,延迟和调用反而可能上去。

换便宜模型后,要继续看人工接管和返工有没有增加。如果每次调用省了一点钱,却把更多问题推给了客服,那总成本可能更高。

人的分工也得跟着变化

AI 接过标准业务以后,人的工作会逐渐转向异常处理、高风险审核、知识维护和新场景建设。这些工作仍然重要,也仍然要花钱。

团队需要看实际减少了哪些工作,排班怎么调整,有没有少加班、少外包或者避免新增招聘。不能一边保持原来的全部安排,一边期待 AI 上线后账单自动变小。

不过,也没必要追求百分之百自动化。有些低频、复杂、维护成本很高的场景,交给人工可能更合适。自动化范围再扩大一点,需要花多少建设成本,能释放多少人工,这个账也要单独算。

八、可观测性

AI 客服很麻烦的一点是,它可能没有报错,也正常给了回复,但用户的问题就是没解决。只看最终回答,很难分清是意图识别错了,知识没召回,知识本身有问题,还是模型拿到了正确知识却没用对。

所以空气小猪从早期就记录了关键节点:用户原话、指代消解、意图、问题改写、召回列表、重排结果、最终知识、模型回复,以及每次调用的耗时和费用。

到了电商业务,还要继续记录查了哪个订单、命中什么规则、调用哪个工具、执行是否成功、为什么转人工,以及人工最后怎么处理。

这些日志有了,团队才能具体讨论:这条问题要补知识,那条要改检索,还有一条其实是接口没有能力。否则最后什么问题都会变成“模型不够聪明”,只能来回调提示词。

回答不了的问题怎么留下来

空气小猪初始知识一定不完整,我们就把检索匹配不足,或者 useful=false 的问题送进待处理池。

先做问题标准化。比如用户说“我在日本,用 +81 的手机号能不能注册,不行我就换国内的”,可以整理为“日本手机号是否支持注册空气小猪账号”。去掉口语和无关内容,但保留会影响答案的条件。

相似问题合并,记录出现次数,再由人工审核。看是不是正常业务问题,现有知识是不是已经覆盖,是否值得补充,以及正式答案究竟是什么。

AI 可以协助整理、给出草稿,但不能自己编一个产品答案就直接入库。审核通过以后,再补正式知识、更新索引,并拿原来的问题验证一遍。

也不是所有问题都值得沉淀。垃圾输入没必要,强时效内容要考虑更新;低频问题则要看风险,不能因为问的人少就一律丢掉。

这就是最初的知识飞轮,挺朴素,但一定要有人持续做。

后来要补的就不只是知识了

电商系统遇到的失败,有些缺业务数据,有些缺规则,还有一些是知道怎么处理,但没有对应工具。它们应该进入一个待建设场景池,不能全部塞回知识库。

团队要判断这个场景的频率、价值和风险,补上缺的能力,准备正常、异常和边界样本,通过评测,再小范围放量。上线后继续看错误、转人工和最终解决情况,有问题就收回权限,重新改。

到了这个阶段,大家才不会笼统地说“本周优化准确率”,而是能说清楚:本周要提升哪些场景,每个场景缺什么,达到什么标准才能自动处理。

场景越来越多,提示词维护、数据清洗、调试回放、评测和监控工具也会逐渐长出来。最初靠几张表可以管理,后面每个场景都有不同规则、工具和放量状态,就需要专门的系统支撑了。

结语

沿着这些实践回头看,一套完整 AI 客服大致需要七层能力:

尤其是转人工,不能只把对话转过去。已经收集的信息、做过的操作和失败原因,都应该一起交给客服,避免用户重新讲一遍,也避免人工把 AI 做过的事情再做一遍。

这里也就能看出来,客服团队一定不能全部裁完。需要留下一批熟悉业务、愿意参与 AI 建设的人,持续处理例外、补充知识、验证新场景。

总之这些就是我两年关于 AI 客服比较全面的知识了,能说的都说了,我觉得还是值得一赞的!

本文由人人都是产品经理作者【叶小钗】,微信公众号:【叶小钗】,原创/授权 发布于人人都是产品经理,未经许可,禁止转载。

题图来自Unsplash,基于 CC0 协议。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
海报
评论
评论请登录
  1. 目前还没评论,等你发挥!