想象企鹅酒馆——天南地北的客人涌进来,点菜声此起彼伏。老板请了一位只能记一道菜的老伙计(传统IVR),结果客人得对着电话喊半天“转人工”,体验糟糕透顶。后来老板换成了 Fin——一位站在柜台后的金牌服务员。他手里捧着一本厚厚的菜单酒单(知识库),客人说“想喝点不酸的”“来点冰的配炸鸡”,他先翻菜单找候选(知识库检索),再确认对方到底要什么(意图识别),拿不准就追问两句(多轮对话),实在没把握就通过腰间对讲机喊一声老主厨(人工转接),还顺手在小本子上记下每单结果(效果评估)。这就是 Intercom Fin 的 Agent 架构缩影:一个用检索、理解、对话和调度能力武装起来的数字服务生,把“标准化问答”和“真人介入”无缝衔接起来。本文会用这家酒馆的故事,带你拆开它的每一层设计。

岗位关联

学会用 Agent 视角拆解智能客服,你就能从“调接口的人”升级为“设计服务体验的人”,这在 AI 应用落地中是最容易被业务方买单的能力。

目录
  1. 可视化演示
  2. 整体架构
  3. 知识库检索
  4. 意图识别
  5. 多轮对话管理
  6. 工单路由
  7. 人工转接
  8. 效果评估
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示Intercom Fin AI客服的RAG知识库检索流水线、多轮对话状态追踪与人工转接机制、以及解决率/CSAT/FCR/AHT四维评估指标体系。

本节配有交互动效(进入视口后自动加载,约 3KB)。

'+captions.rag+'

整体架构

假如你是企鹅酒馆的老板,要设计整套服务流程:客人进门,谁迎接?谁点单?谁上菜?谁处理投诉?Fin 的姿态是——前厅只有一个服务员,但背后有整条流水线。这条流水线就是 Agent 架构:外层是消息通道,接收来自网页、App、邮件各处的客人留言;中间是 Fin 的大脑,先后做“翻菜单、听意图、补追问、给答复”四件事;最后方是一排老主厨——真人客服,只在 Fin 搞不定时被对讲机喊出来。

从技术上看,Fin 的整体架构通常横跨三层:接入层负责把多种渠道的消息统一成标准格式(就像酒馆所有客人最后都坐到同一张餐桌上);Agent 核心层串联检索、意图识别和对话管理,类似服务员按“查单、确认、上菜”的节奏推进;执行与调度层连接工单系统、CRM 和人工客服台,对应后厨、库房和值班经理。三者形成闭环:输入进来,经过处理,输出动作或转接结果,再把结果回写数据库用于复盘。

架构里最关键的设计是“状态机”——Fin 手里始终攥着一张流水单,记录当前会话处于“检索中”“追问中”“待转人工”哪个阶段。这张单子让异步消息、中途离开的客人和并发会话都能被有序处理。这也是多数现成 AI 客服框架(如 LangGraph 的 StateGraph)的核心抽象:把对话当作在若干个节点间迁移的状态流。

回到酒馆:老板发现 Fin 之所以稳,不是因为嗓门大,而是因为手里那张流水单和身后那条流水线。单点的人工再强也扛不住高峰期,真正的竞争力来自“一人应对、全局支撑”的结构设计。理解了这条流水线,后面的每一个模块都是在给流水线加装更顺手的工具。

知识库检索

继续站在柜台旁看 Fin 工作。客人说“我想把后天的房间退了”,Fin 不会凭空编造规则——他先翻开那本厚菜单,快速扫过几十个知识卡片,找出跟“退改”“订单”“时间”沾边的几页,再逐一比对哪一页最贴合客人的说法,最后把答案举到客人面前。这套动作在 AI 客服里叫检索增强生成(RAG),它的第一步,就是让 Fin 用同一种语言“记住”所有知识卡片。

卡片要能被比大小,先得变成数字。Fin 把每个知识条目(比如“退改政策”“账单下载路径”)切成一到多段文本,然后用嵌入模型(Embedding Model)把每段文字编码成一串向量——可以想象成每道菜都有自己的“味道坐标”,坐标越接近说明口味越像。客人问题同样编码成向量,接下来就是数学上的选菜环节:计算顾客问题向量与每张卡片向量的余弦相似度。

检索的排序背后还常见两层结构:粗排(用快速向量相似度筛出 Top-50)和精排(再用更精细的模型在 Top-50 里挑 Top-3)。这跟酒馆里先看菜系再试菜是一个逻辑。值得一提是 Fin 的多语言能力也由此水到渠成:只要知识卡片和用户问题被映射到同一个语义空间,中文问“怎么退”和英文问"how to refund"就会落在味道坐标的相近位置,检索天然跨语言。

Fin 合上菜单时那副从容样子,是因为选菜逻辑足够靠谱。真实项目里,知识库质量直接决定 Fin 天花板——卡片写得含糊、切分切得破碎,再好的排序算法也救不回来。所以做知识库检索的第一课不是调模型,而是把“菜单”编好。

sim(u,d)=∑i=1nuidi∑i=1nui2⋅∑i=1ndi2\text{sim}(u,d)=\frac{\sum_{i=1}^{n}u_i d_i}{\sqrt{\sum_{i=1}^{n}u_i^2}\cdot\sqrt{\sum_{i=1}^{n}d_i^2}}
余弦相似度衡量两个向量的方向是否一致,值越接近 1 表示越相关,相当于两盘菜在味道坐标里指向同一个方向。
  1. 分子对齐程度把用户问题向量与知识向量逐维相乘再累加,两向量方向越一致、数值越同号,这个和越大。相当于两盘菜在每个味道维度上的倾向是否同步。
    sim(u,d)=∑i=1nuidi⋯\text{sim}(u,d)=\frac{\sum_{i=1}^{n}u_i d_i}{\cdots}
  2. 分母长度归一化分别算两个向量的模长(各维度平方和开根号),再相乘,相当于把“分量多少”剔除掉,只看方向。好比两盘菜口味趋同,不以菜量大小论亲疏。
    ∑i=1nui2⋅∑i=1ndi2\sqrt{\sum_{i=1}^{n}u_i^2}\cdot\sqrt{\sum_{i=1}^{n}d_i^2}
  3. 整体比值判相关分子除以分母,把结果压到 [-1, 1],越接近 1 越相关。Fin 据此把所有卡片排个序,取 Top-K 当作候选答案。
    sim(u,d)→1\text{sim}(u,d)\rightarrow 1

意图识别

酒馆里最考验服务员听力的时候,是客人说“这个有点那个”。Fin 会先判断这句话是要求、抱怨还是提问——这就是意图识别。所谓意图,就是客人这句话背后真正想达成的事,比如“改订单”“查账单”“投诉”。Fin 的耳朵由三件套组成:意图分类器(判断大方向)、槽位抽取(抠出关键信息:订单号、日期、金额)、置信度(判断自己有多大把握)。

意图分类在工程落地上通常是“多任务”:假设候选意图有改动订单、查询账单、申请退款、联系人工四类,Fin 会给每个分类输出一个概率分,最高的那类就是初步意图。槽位抽取则是把命名实体(时间、编号、金额)像摘菜一样择出来,填充到槽位模板里。例如“后天”对应日期槽位,“房间”对应对象槽位,这些槽位直接传给后续的知识库检索和工单路由使用,相当于 Fin 记下“客人想改的是哪一单、改到什么时间”。

Fin 特别重视“低置信度兜底”:当所有意图得分都低于阈值(比如 0.4),说明客人把话说到 Fin 的知识盲区了,这时最专业的反应不是硬猜,而是切换成澄清模式:“您是说想修改订单,还是查询订单状态?”——把一次模糊求助转化成二选一,客人一点头,槽位就齐了。

回头看,意图识别与其说是“读懂话”,不如说是“给出几种可能的答案让客人确认”。Fin 不追求每次猜对,而追求猜错时能被及时纠正。这种设计哲学贯穿整个产品:宁可多问一句,也绝不冒充明白人。对小白的启发是:把“意图分类 + 置信度 + 兜底”当成一个完整模块来设计,不要只做一个分类器就上线。

P(intent∣msg)=σ(w⊤ϕ(msg))P(\text{intent}|\text{msg})=\sigma\left(\mathbf{w}^{\top}\boldsymbol{\phi}(\text{msg})\right)
这条式子表示:根据消息的特征向量算出每个意图的得分,再经 sigmoid 函数压到 0 到 1 之间,当作“这单属于某类意图”的把握程度。
  1. 特征变换把消息转换成特征向量(词频、Embedding 等),相当于服务员把客人话语拆成“可判断的细节清单”。
    ϕ(msg)\boldsymbol{\phi}(\text{msg})
  2. 线性打分用权重向量对特征加权求和,数值越大越偏向某个意图。相当于按细节清单逐条加分,比如出现“退”字就大幅加重退款意图的分数。
    w⊤ϕ(msg)\mathbf{w}^{\top}\boldsymbol{\phi}(\text{msg})
  3. 概率压缩套 sigmoid 函数把任意实数映射到 (0,1),输出当作置信度。Fin 凭这个概率判断要不要继续追问或直接动手。
    σ(x)=11+e−x\sigma(x)=\frac{1}{1+e^{-x}}

多轮对话管理

真实对话不会像考试题那样一问一答。客人先说“我要改订单”,Fin 问“改哪个订单”,客人答“上周那笔”,然后可能是“对,就是那个”。每一个“那个”、“这笔”单独拎出来都无法理解,多亏 Fin 手里那张流水单:上面记着上一轮确认的订单号、客人的身份、以及当前谈到哪一步。这张流水单就是对话状态管理(Dialog State Management)。

状态管理最经典的做法是维护一个 JSON 结构的槽位集合:{"order_id": null, "action": "change", "target_date": null}。每轮对话,Fin 先把用户新说的话里的槽位填进去,再检查还缺哪些槽位,缺了就发起澄清追问。指代消解就是解决“那个”“这笔”指向谁的问题——通常依据最近提及的实体和当前状态推断。例如客人说“把那个订单取消”,如果前一轮刚讨论过订单 A123,则可判定指代的是它。

对话轮数本身也是信息:连续两轮都没有新增槽位,说明客人可能在重复诉求,此时 Fin 会主动转换策略——从“追问”切换到“提供选项”或“征求转人工”。这种基于轮数与状态的策略切换,让 Fin 不只是一个问答机器,而像一个懂得推进对话节奏的主持人。

企鹅酒馆里最考验 Fin 的场景,是客人喝多了说话颠三倒四。但流水单在手,Fin 始终能把散落的信息拼回正轨。多轮对话管理的价值就在于:它把“一次性问答”升级成了“有记忆的服务关系”。对从业者来说,记住一个要点——别把每一轮都当全新会话,状态容器才是客服 Agent 的记忆器官。

St=St−1⊕extract(msgt)S_{t}=S_{t-1}\oplus\text{extract}(\text{msg}_t)
对话状态每轮只会增量更新:上一轮状态合并本轮抽取到的新槽位,形成下一轮状态。相当于流水单每次只补写新增项,不推倒重来。
  1. 存量状态上一轮确定的槽位集合,是 Fin 的记忆基线。好比酒馆流水单上已经记好的前任客人的忌口。
    St−1S_{t-1}
  2. 增量抽取从本轮消息里抽取新槽位,只处理新增信息,避免把旧状态覆盖掉。相当于客人在上一步基础上补充了订单号,Fin 只填这一格。
    extract(msgt)\text{extract}(\text{msg}_t)
  3. 状态合并更新旧状态与新信息做合并(覆盖同名槽位),得到当前状态。这样即使客人隔了半小时才回话,Fin 也记得聊到哪了。
    St=St−1⊕⋯S_{t}=S_{t-1}\oplus\cdots

工单路由

Fin 再能干,也有接不住的活儿:客人要开发票、要投诉、要跟工程师对技术细节。这时 Fin 不会把客人晾在一边,而是麻利地从柜台下抽出一张工单表格,填上“客人编号、问题类别、紧急程度”,然后通过通道把工单送进对应队列。这一步就是工单路由——让每一句话流向最该处理它的地方。

工单路由的输入来自前面两步:意图识别的结果(这张单属于“发票”还是“故障”)+ 槽位信息(账号、金额)+ 会话摘要。Fin 先给工单打标签,标签体系通常与业务线对齐,比如“账单/支付/产品故障/退款”;再计算优先级,规则可以很简单——涉及金额损失或反复抱怨的工单加急;最后按“技能分组”派单,退款纠纷单分给财务客服组、技术 bug 单分给技术客服组。映射关系由一组路由规则或轻量分类器实现,核心逻辑等价于多标签分类 + 规则加强。

自动派单后,Fin 会立刻告诉客人“已为您转接账单专员,预计等待 2 分钟”,把不透明等待变成有预期的服务。客人感知到的是“被认真对待”,而不是“被踢皮球”。这就是 Fin 产品设计的细腻处:路由不是把麻烦甩给别人,而是帮客人找到最合适的解决者。

路由决策看似是一个不起眼的功能,却直接决定客服团队的整体效率。太多项目头重脚轻——AI 对话做得漂亮,转人工时却让用户重新描述一遍问题。Fin 的经验是:提前定义好标签、技能组和优先级规则,让路由在对话结束时自动完成,用户体验的割裂感会大幅下降。

queue=arg⁡max⁡q∈Q score(q)=arg⁡max⁡q∈Q(α⋅intentq+β⋅slotq+γ⋅urgentq)\text{queue}=\arg\max_{q\in Q}\ \text{score}(q)=\arg\max_{q\in Q}\left(\alpha\cdot\text{intent}_q+\beta\cdot\text{slot}_q+\gamma\cdot\text{urgent}_q\right)
每个队列拿到一个加权得分,得分最高的队列获得这张工单。权重 α、β、γ 分别控制意图、槽位和紧急程度的影响力,相当于给路由规则调灵敏度。
  1. 候选队列所有可用的客服队列集合,比如退款组、技术组、投诉组。对应酒馆后厨的各个灶台。
    Q={q1,q2,…,qm}Q=\{q_1,q_2,\dots,q_m\}
  2. 意图权重意图模型算出的类别分,决定这张单最接近哪类业务。相当于一眼看出这是退菜问题还是催菜问题。
    α⋅intentq\alpha\cdot\text{intent}_q
  3. 槽位权重槽位完整性得分,例如有订单号、有金额的工单更好派。好比服务员在工单上填的信息越全,后厨越知道找谁。
    β⋅slotq\beta\cdot\text{slot}_q
  4. 紧急加成紧急程度加分,让“我现在就要用发票”的工单插队。相当于在单子上盖了“加急”红章。
    γ⋅urgentq\gamma\cdot\text{urgent}_q

人工转接

酒馆营业到深夜,一位客人执意要“当年老板亲手调的那杯酒”,Fin 查了菜单、问了同事,还是没把握,于是它摁下对讲机:“老主厨,这位客人需要您。已知信息:客人身份、想喝的酒、尝试过的方案。”说完,它退后半步,把对话窗口交给老主厨,客人不用重复第二遍。这就是人工无缝转接的核心——人机交接不是抛包袱,而是交棒。

触发转接的条件通常由两个信号联合决定:一是 Fin 的置信度持续偏低(比如意向得分和检索相似度都低于阈值),二是用户情绪信号(出现“投诉”“人工”“傻”等负面词,或连续两轮重复诉求)。产品上常见的设计是“阈值 + 可配置”,例如当 conf < 0.35 且用户明确要求人工时,立即触发。而转接前生成的交接摘要,则是整个流程里最有价值的数据资产。

交接摘要一般自动生成如下内容:会话时间、意图标签、已收集槽位、Fin 尝试过的方案、置信度分数、建议回复示例。这些信息通过 API 注入到人工客服工作台,老主厨接手时,一眼就能看到“这位客人是账单问题,已经确认过订单号,Fin 建议过两种解法无效”。更深一层,系统还会提前把可能需要的权限准备好——比如客户资料、工单预案,让人工客服一接手就具备完整作战地图。

在企鹅酒馆的经营哲学里,喊老师傅从来不是失职,而是对客人负责。很多 AI 客服项目把“转人工”当成失败指标藏着掖着,Fin 反其道而行:把转接设计成标准服务动线,让 AI 和人工各展所长。评估一个客服 Agent 强不强,不只看它单独解决了多少,更看它转接时有没有让客人体面地完成过渡。

conffinal=0.5⋅sim+0.3⋅intent−0.1⋅(turns−1)\text{conf}_{\text{final}}=0.5\cdot\text{sim}+0.3\cdot\text{intent}-0.1\cdot(\text{turns}-1)
最终置信度由三部分构成:检索相似度占大头,意图置信度次之,对话轮数越多越扣分——因为绕了太久还没解决,就该换人了。
  1. 检索贡献知识库检索相似度,代表“答案是否站得住脚”,权重最高。相当于 Fin 对菜单条款的熟悉度。
    0.5⋅sim0.5\cdot\text{sim}
  2. 意图贡献意图识别的置信度,代表“问题是否被正确归类”,权重次之。相当于 Fin 对客人需求的把握程度。
    0.3⋅intent0.3\cdot\text{intent}
  3. 轮数惩罚对话每多一轮就扣 0.1,防止陷入无限追问的僵局。相当于 Fin 心里那根弦:聊太久还搞不定就要及时请老师傅。
    −0.1⋅(turns−1)-0.1\cdot(\text{turns}-1)

效果评估

夜深打烊,Fin 做的第一件事不是休息,而是翻小账本。它记着今天一共接待多少位客人、其中多少位由自己独立解决、多少位请了老主厨出马、每位客人等了多久、走的时候有没有给小费。这套记账体系换算成 AI 客服语言,就是一套效果评估指标体系——没有它,你永远不知道 Fin 今天是在进步还是原地打转。

最核心的指标是拦截率(Deflection Rate / Resolution Rate),即 AI 独立解决的会话数占总会话数的比例。它衡量自动化对人工量的替代程度。但拦截率不是越高越好——如果 Fin 为了拦截率硬着头皮乱答,客人满意度会崩盘;因此必须和客户满意度(CSAT)搭配看,像酒馆里既要看翻台率,也要看回头客比例。平均处理时长(AHT)则反映效率,AI 介入后平均时长应显著下降。

除了拦截率,Fin 的小账本还记录三个层面的数据:一是业务价值指标,比如退单挽留率、客单价影响;二是质量指标,比如回答准确率抽检、知识库命中率;三是体验指标,比如多轮对话轮数、用户主动结束率。这些数据会按周生成报告,驱动两件事:找出高频未解决问题,补齐知识库;找出低置信度模式,优化意图模型。

企鹅酒馆之所以越办越好,秘诀就是小账本上的数字从来不说谎。Fin 看起来只是站在柜台后的服务员,实际上它每天都按账本迭代自己的菜单和话术。对评估的理解直接决定产品迭代方向:只盯拦截率会让你变成胆大的骗子,只看满意度会让你变成不敢上前的缩头服务员,把两种尺子同时握在手里,才是合格的客服 Agent 经营者。

IR=NaiNai+Nhuman\text{IR}=\frac{N_{\text{ai}}}{N_{\text{ai}}+N_{\text{human}}}
拦截率等于 AI 独立解决会话数除以全部会话数(AI 解决 + 转人类)。它衡量自动化对人工量的替代程度,配合满意度一起解读才有意义。
  1. AI 独立解决数整个会话由 Fin 出答案并获用户认可、问题关闭,计为一次 AI 解决。相当于 Fin 没喊老师傅就把客人安顿好了。
    NaiN_{\text{ai}}
  2. 人工介入数发生了转人工且由真人完成解决的会话数。相当于老主厨实际接手的单子。
    NhumanN_{\text{human}}
  3. 分子分母取比AI 解决数除以总解决数,得到 0 到 1 之间的比例。它直接回答“有多少比例的客服工作不需要人”。
    NaiNai+Nhuman\frac{N_{\text{ai}}}{N_{\text{ai}}+N_{\text{human}}}

AI 应用场景

电商平台售后客服自动化

阶段:工单路由 + 多轮对话 + 人工转接

解决的问题:传统电商售后靠人工客服逐条回复,高峰期排队严重,且买家在“退款/换货”流程里往往要反复描述订单信息。Fin 式架构先通过检索知识库匹配售后政策,再通过意图识别判断用户诉求是退款还是换货,结合槽位抽取自动生成售后工单,按商品类目路由到对应售后组;低置信度时自动转接人工并附带上下文摘要,买家无需重复沟通。

具体案例:某服装品牌在天猫大促期间接入类 Fin 客服,售后退款咨询 65% 由 AI 独立完成解答与申请入口引导,转人工会话的平均首次响应时间从 5 分钟降到 40 秒,买家在转接时不再重复订单号。事后团队根据拦截率与 CSAT 周报,把高频的“运费险怎么赔”问题沉淀成新知识卡片,第二个月拦截率再提升 8 个百分点。

企业 SaaS 产品的用户引导与工单分流

阶段:意图识别 + 知识库检索 + 工单智能路由

解决的问题:企业软件用户常问“怎么导出报表”“API 报 401 怎么办”,传统支持渠道用关键词匹配容易答非所问。Fin 式架构用向量检索把问题映射到产品文档知识库,用意图识别区分“操作帮助”与“故障报修”两类诉求,故障类自动生成带环境信息的工单,按产品模块路由给对应技术支持小组。

具体案例:一家数据分析 SaaS 公司将 Fin 架构嵌入帮助中心,让用户在文档页直接提问。系统识别出“401“属于鉴权失败类意图,自动推送教程并附上排查步骤;若用户追问两次仍显示”还是不行”,则触发转人工,交接摘要中自动带上用户角色、访问时间和已查阅文档。上线后工单日量下降 30%,支持团队从重复答疑中解放出来,转向高价值客户调研。

Python 演示

python72 行
import math class FinAgent:    def __init__(self):        self.kb = [            {"title": "退改政策", "keywords": ["退", "改", "取消", "全额"], "answer": "未入住的订单可免费取消. 特价房不可退改."},            {"title": "账单下载", "keywords": ["账单", "发票", "下载", "收据"], "answer": "请进入我的-账单中心, 点击下载PDF发票."},            {"title": "支付失败", "keywords": ["支付", "扣款", "失败", "银行"], "answer": "支付未成功不会重复扣款, 请稍后重试或换卡支付."},        ]        self.intent_tab = {"改单": ["退", "改", "取消"], "查账": ["账单", "发票"], "支付": ["支付", "扣款"]}        self.turns = 0        self.history = []     def vectorize(self, text):        vec = {}        for word in text.lower().split():            vec[word] = vec.get(word, 0) + 1        return vec     def cosine_sim(self, qvec, dvec):        dot = sum(qvec.get(k, 0) * dvec.get(k, 0) for k in set(qvec) | set(dvec))        qnorm = math.sqrt(sum(v * v for v in qvec.values()))        dnorm = math.sqrt(sum(v * v for v in dvec.values()))        if qnorm == 0 or dnorm == 0:            return 0.0        return dot / (qnorm * dnorm)     def retrieve(self, query):        qvec = self.vectorize(query)        scored = []        for doc in self.kb:            dvec = self.vectorize(" ".join(doc["keywords"]))            sim = self.cosine_sim(qvec, dvec)            scored.append((sim, doc))        scored.sort(reverse=True, key=lambda x: x[0])        return scored[0]     def detect_intent(self, query):        best = ("unknown", 0.0)        for intent, words in self.intent_tab.items():            hit = sum(1 for w in words if w in query)            score = hit / len(words)            if score > best[1]:                best = (intent, score)        return best     def respond(self, query):        self.turns += 1        self.history.append(query)        full = " ".join(self.history[-3:]) + " " + query        sim, doc = self.retrieve(full)        intent, intent_conf = self.detect_intent(full)        conf = 0.5 * sim + 0.3 * intent_conf - 0.1 * (self.turns - 1)        if conf < 0.35:            note = {                "summary": "用户描述: %s" % query,                "intent": intent,                "confidence": round(conf, 2),                "suggest": doc["answer"] if sim > 0.2 else "建议人工联系用户确认问题."            }            return "转人工", note        return doc["answer"], {"confidence": round(conf, 2), "intent": intent} if __name__ == "__main__":    fin = FinAgent()    test_queries = ["我想退订房间 能全额吗", "怎么下载账单", "支付失败了怎么办", "那个苹果汁能退吗"]    for q in test_queries:        result, meta = fin.respond(q)        print("问:", q)        print("答:", result)        print("详情:", meta)        print()
目的:用约 60 行模拟 Fin 的完整推理管线——向量化、余弦检索、意图打分、置信度融合、低置信度转人工,可直接运行观察每个环节的输出。
  1. self.kb模拟知识库,每条含标题、关键词和标准答案,对应酒馆里的知识卡片。
  2. def vectorize(self, text)简易词频向量化,把文本变成可计算的“味道坐标”。
  3. self.cosine_sim(qvec, dvec)余弦相似度公式落地,选中最贴近的知识卡片。
  4. def detect_intent(self, query)基于关键词命中率打分的意图识别器,返回意图名与置信度。
  5. full = " ".join(self.history[-3:]) + " " + query把最近两轮对话拼进当前问题,实现简易多轮上下文。
  6. conf = 0.5 * sim + 0.3 * intent_conf - 0.1 * (self.turns - 1)最终置信度与轮数惩罚,与正文公式一一对应。
  7. if conf < 0.35: return "转人工", note低置信度触发转人工,并附带交接摘要。
  8. fin = FinAgent()实例化 Agent,main 里用四条代表性 query 演示全流程。
  9. print("详情:", meta)输出置信度与意图,方便读者验证路由逻辑。

常见误区

误区很多人以为只要把产品文档喂给 Fin,它就能像百度一样自动回答问题。结果上线后发现 Fin 答非所问,就觉得“RAG 没用”。

正解知识库不是保险箱,而是需要“切好片的菜”。文档要先清洗、切块、去重,还要给每块配好标题和关键词,检索才能命中。就像企鹅酒馆把菜单按“凉菜/热菜/酒水”分区并配上编号,客人说“来点冰的”才能快速找到对应那一栏。

为何常见:搜索引擎给了大家“数据丢进去就能搜”的惯性思维,忽略了客服场景答案必须精准这一点。

误区新手上路最喜欢用“包含某个词就归某类”来写意图识别,遇到“我不是要退,我是要看看能不能改时间”就翻车。

正解真实意图识别需要模型与槽位配合,还要输出置信度。关键词作为快速粗筛可以,但要覆盖否定、口语、指代等变化,必须靠向量语义和上下文。Fin 的做法是“多类候选 + 低置信度追问”,而不是赌单次判断。

为何常见:规则引擎写起来简单、见效快、可解释,容易让人误以为“够用了”,直到长尾表达把规则漏成筛子。

误区不少产品把转人工率当成 KPI 红线,谁转人工多就认为 Agent 能力差,Fin 的设计理念完全相反。

正解转人工是服务设计的必要环节,关键是转得聪明:不轻易转、转之前生成好交接摘要、让用户不用重复描述。就像酒馆里喊老师傅不是服务员的耻辱,反而是让客人满意的专业操作。

为何常见:管理层容易把“自动化率”和“智能程度”划等号,忽略了服务的第一目标是解决问题,而不是证明机器能干。

误区上线 AI 客服后,团队天天报“拦截率涨到 80%”,却没人看用户骂声一片,最终客诉反弹。

正解拦截率是效率指标,满意度是体验指标,两者需要联合解读。高拦截 + 低 CSAT 意味着 Fin 在硬答;低拦截 + 高 CSAT 说明转接做得好但自动化不足。Fin 的小账本永远同时记两笔账,缺一不可。

为何常见:拦截率数据好看、容易拉齐汇报口径,满意度则分散在多个渠道、统计麻烦,因此容易被选择性忽视。

面试题

Q1. Fin 式 AI 客服解决用户问题时的标准动作顺序是?

单选题 · easy

  • A.意图识别 → 知识库检索 → 多轮澄清 → 回复← 正确答案
  • B.知识库检索 → 意图识别 → 回复 → 转人工
  • C.多轮对话 → 工单路由 → 知识库检索 → 回复
  • D.直接生成答案 → 判断对错 → 决定转接

答案:A。标准流程先判断用户想干什么(意图识别),再找对应知识(检索),信息不足则追问(多轮澄清),最后给答案或转人工。B 把检索放最前,C 顺序颠倒,D 缺少检索支撑。

Q2. 知识库检索中“把文本变成向量”这一步的常用名称是?

单选题 · easy

  • A.向量化嵌入← 正确答案
  • B.关键词抽取
  • C.文本压缩
  • D.数据清洗

答案:A。嵌入模型把文本映射成高维向量,让语义相近的文本在向量空间里距离更近,这是 RAG 检索的基础。关键词抽取只是分词层面的操作,不构成语义表示。

Q3. 意图识别模块的典型输出不包括?

单选题 · easy

  • A.意图类别
  • B.置信度分数
  • C.抽取出的槽位
  • D.人工客服工号← 正确答案

答案:D。意图识别的三件套是意图类别、置信度、槽位。人工客服工号属于工单路由与转接模块的输出,不属于意图识别范畴,属于流程后置环节。

Q4. 多轮对话管理中“指代消解”解决的核心问题是?

单选题 · mid

  • A.用户话里的“这个”“那个”指代什么← 正确答案
  • B.如何让回答更简短
  • C.如何判断用户情绪
  • D.如何生成更长的回复

答案:A。指代消解把代词与上下文中的实体关联起来,比如“那个订单”指向上文提到的 A123。它依赖对话状态,而不是简单缩短或加长回答。

Q5. 关于最终置信度公式,以下说法正确的是?

单选题 · mid

  • A.检索相似度越高,置信度越低
  • B.对话轮数增加会使置信度下降← 正确答案
  • C.意图置信度与最终置信度无关
  • D.轮数越多置信度越高越该自己答

答案:B。公式中轮数项带负号,-0.1*(turns-1),聊得越久越容易触发转人工。检索相似度和意图置信度都是正向加分,而非反向或无关。

Q6. 工单路由中“技能分组”解决什么问题?

单选题 · mid

  • A.把工单分给最擅长对应问题的客服组← 正确答案
  • B.把工单随机分配给所有客服
  • C.让 AI 自己处理所有工单
  • D.减少工单数量

答案:A。技能分组按意图/标签把工单映射到对应专业客服组,退款给财务组、技术 bug 给技术组,提升解决效率与满意度。随机分配违背路由设计初衷。

Q7. 拦截率 IR 的正确表述是?

单选题 · hard

  • A.AI 解决会话数除以全部会话数的比例← 正确答案
  • B.转人工会话数除以 AI 会谈数
  • C.知识库命中次数除以总点击量
  • D.不满意会话占总会话比例

答案:A。IR = N_ai / (N_ai + N_human),衡量 AI 独立解决会话的占比。B 分子分母颠倒,C 是知识库指标,D 更像负面 CSAT,均不符合定义。

Q8. 哪些做法可以降低不必要的转人工率?

多选题 · mid

  • A.扩充知识库覆盖高频问题← 正确答案
  • B.加强意图识别与槽位抽取← 正确答案
  • C.增加澄清追问策略← 正确答案
  • D.把所有低置信度都强制回答

答案:ABC。扩充知识、改进意图、多追问都能提升 AI 自主解决能力。低置信度强制回答会牺牲满意度,是错误做法,Fin 的理念是拿不准就转。

Q9. 人工转接时,交接摘要应包含哪些信息?

多选题 · hard

  • A.用户已确认的槽位与意图← 正确答案
  • B.Fin 尝试过的方案与结果← 正确答案
  • C.置信度分数与轮数← 正确答案
  • D.用户的历史消费总额

答案:ABC。交接摘要聚焦本次会话上下文:意图槽位、尝试方案、置信度,让真人无缝接手。历史消费总额属于隐私与业务数据,不应自动塞进转接摘要。

Q10. 关于客服 Agent 评估指标配合使用,正确的组合是?

多选题 · extreme

  • A.拦截率 + CSAT 防止盲目自动化← 正确答案
  • B.AHT 看效率变化是否真实← 正确答案
  • C.只看拦截率就足够决策
  • D.用意图识别准确率补充诊断← 正确答案

答案:ABD。拦截率与满意度互补,AHT 验证效率提升是否真实,意图准确率帮助定位问题根源。只盯拦截率会忽视体验崩坏,是常见误区。