想象你走进一家热闹的餐厅,刚落座就对服务员说:“我的订单还没来吗?”十分钟后你又问:“那份套餐里的汤能换成沙拉吗?”如果你是一位训练有素的值班经理,你会怎么做?你会记住顾客第一句提到“订单”,第二句想“换汤”——你心里有一本点单记录本,有一套标准话术,遇到后厨做不了的改动还会礼貌地说“我去和厨师长确认一下”。这套“记住说到哪了、决定下一步做什么、按标准话术回应、出意外时兜底”的能力,就是客服系统里的对话管理(Dialog Management,DM)。 在RAG客服系统中,对话管理是连接“听懂”与“生成”的枢纽:自然语言理解(NLU)负责听懂顾客说什么,响应生成(NLG)负责把话说好听,而对话管理就像那位值班经理——握着点单本跟踪对话状态,翻着话术手册组织回复,遇到退换货任务就分给任务型流程,遇到政策咨询就直接查FAQ,实在听不懂就转给真人主管。本文从一个能跑通的RAG客服系统出发,用餐厅经营的视角讲透对话管理的状态跟踪、策略学习、模板管理、兜底机制与混合路由,并给出可落地的工程经验。
对AI从业者而言,对话管理是把单轮问答升级为多轮任务的必经关卡,掌握DM的工程实现与生产优化,是RAG客服系统从技术原型走向大规模生产的核心能力。
可视化演示
对话管理模块协调NLU与响应生成,将用户意图路由到FAQ、任务响应或兜底回复。播放多轮对话,观察路由决策与兜底触发。
本节配有交互动效(进入视口后自动加载,约 3KB)。
对话路由 FAQ 命中 任务响应 兜底回复 意图未命中 触发兜底
对话管理概述
餐厅里最忙的不是大厨,而是站在出餐口的值班经理。顾客催菜、要求换菜、投诉上错菜,所有信息先汇聚到他这里;他一边翻手里的点单记录本,一边决定先安抚哪位客人、要不要叫厨师长、能不能走标准话术。对话管理模块在RAG客服系统里的位置,就是这位值班经理——它夹在自然语言理解(听懂顾客说什么)与响应生成(把话说得好听)中间,控制着整场对话的节奏与方向。
一条用户消息进来,先经过NLU把它解析成“意图+实体”:用户说“我想退掉这个耳机”,NLU产出意图“退货”、实体“耳机”。这两样东西交给对话管理后,DM要结合前面的对话历史判断:这是在咨询退货政策,还是要发起一个退货任务?接下来该查FAQ,还是该追问订单号?它决定出的“动作”交给NLG,最终生成一句自然的回复。在多轮对话中,DM还要维护对话历史的上下文,并在系统对接RAG时决定是否触发知识检索。
整条链路可以写成一条流水线公式:用户第 $t$ 轮的输入经过NLU变成意图与实体,对话管理据此输出一个动作,再经NLG变成回复文本。
在这条流水线上,DM不像服务员那样忙着端菜送水,而是始终保持对全局的掌控:上一轮答应了什么、这一轮该推进什么、这一单要不要转给主管。理解了它的枢纽位置,接下来就可以看看它最重要的随身工具——点单记录本,也就是对话状态跟踪。
- 用户输入 $u_t$第 $t$ 轮用户发送的原始文本,像顾客开口说的第一句话。
- NLU 解析 $(i_t, e_t)$自然语言理解把文本拆成意图 $i_t$(想干什么)和实体 $e_t$(涉及的物品、单号等关键信息)。
- DM 决策 $a_t$对话管理根据当前状态选择一个动作 $a_t$,如追问订单号、查询FAQ或发起退款任务。
- NLG 生成 $r_t$自然语言生成把动作变成自然回复 $r_t$,送回给用户,一轮对话闭环。
对话状态跟踪
值班经理的围裙口袋里永远插着一本点单记录本。顾客说“汤换成沙拉”,他记下“汤→沙拉”;过了一会儿顾客又报出桌号,他补上“3号桌”。这本记录本不抄录顾客的闲聊,只记和订单相关的结构化信息。对话状态跟踪(DST)就是客服系统里的点单本:它把每一轮对话中值得记住的信息,提炼成结构化的“槽位-值”对。
比如槽位“问题类型”的值是“售后”,槽位“订单号”的值是“A12345“。每进来一轮,DM就把新实体填进对应的槽位,同时更新每个槽位的置信度——这就是多轮对话中”越聊越明白”的机制。状态表示方法常见的是基于槽位填充的帧结构:每一帧记录用户目标、已填充槽位、待请求信息等。当任务缺少关键槽位时,DM会主动追问,这就是槽位填充机制。
状态更新的核心是一个贝叶斯置信更新公式:新的置信度等于观测概率乘以旧的置信度,再对所有可能状态归一化。它回答的问题是:“听到用户这句话之后,我对某个对话状态的信任程度该打多少分?”
有了这本点单本,经理的决策就不再是拍脑袋:新来的消息与旧记录一对照,缺什么就问什么,填错了还能靠置信度纠偏。点单本记好了,下一步就是决定——面对这位顾客,我该采取什么策略?
- 目标状态 $s$一个候选的对话状态,比如“订单号=A12345,问题类型=售后”这种槽位组合。
- 观测概率 $P(u_t \mid s)$当前用户话语 $u_t$ 在状态 $s$ 成立时出现的可能性,衡量“这句话有多像在说这件事”。
- 上一轮置信度 $b_{t-1}(s)$在听这句话之前,系统对状态 $s$ 的信任程度,相当于点单本上的旧笔记。
- 归一化分母对所有候选状态 $s'$ 的得分求和,把分子变成合法的概率分布,保证所有状态置信度加起来等于1。
对话策略学习
同样是顾客催菜,新来的实习生会手足无措,经验老到的值班经理则知道:先道歉、再确认菜品、必要时催后厨——这一套流程叫“策略”。对话策略学习的任务,就是教会系统在什么状态做什么动作:是追问槽位、查FAQ、执行任务,还是转人工。策略直接决定对话是高效推进还是原地打转。
策略分两类。规则驱动的策略像餐厅的《值班手册》,把“状态→动作”的映射写死,稳定、可解释、易上线,适合FAQ稳定场景。强化学习策略则像让经理在真实接待中不断试错,用“奖励”调教行为——客人满意加分、转人工失败扣分,逐步学会最优打法。强化学习训练时离不开用户模拟器扮演“顾客”,并用任务完成率、平均对话轮数等指标评估策略好坏。
经典算法Q-Learning用一张Q表记录“状态-动作”的价值,并按下式迭代更新:每次交互后,用“即时奖励+未来收益”去修正旧估值。
规则手册保证策略的下限,强化学习探索策略的上限。但无论哪种策略,说出口的话都得经过话术这本“标准化手册”——这就是下一节要讲的回复模板管理。
- 状态-动作价值 $Q(s,a)$在状态 $s$ 下执行动作 $a$ 的预期总收益,如同经理对“催后厨是否有效”的经验值。
- 学习率 $\alpha$每次修正的步长,取值0到1之间,$\alpha$ 越大新信息越快地覆盖旧经验。
- 即时奖励与未来收益 $r + \gamma \max_{a'} Q(s',a')$$r$ 是这一步的即时奖励,$\gamma$ 是折扣因子,$\max_{a'} Q(s',a')$ 是下一个状态里最优动作的估计价值。
- TD误差更新方括号内是“实际收益与旧估计之差”,Q值沿此差值方向更新,逐步逼近真实价值。
回复模板管理
餐厅前台有一本话术手册:菜品售罄怎么说、催菜怎么安抚、结账怎么推荐甜品——每句话都是反复打磨过的。客服系统的回复模板管理就是维护这本手册:把回答分类存放,留好变量位置,统一版本,保证不同用户听到的是同样得体的表达。大模型虽然能自由发挥,但客服生产环境更需要可控、可测、可审计的回复。
模板按用途分类:FAQ答案类、槽位追问类、信息确认类、兜底安抚类等。每个模板里预留变量插槽,如“已登记订单{{order_id}},问题类型:{{issue}}”。对话管理决策出动作后,从模板库选中对应模板,再从对话状态里取出槽位值填入。这样同一套话术可以服务成千上万个不同用户,而且每个变量都有清晰的来源。
模板渲染可以形式化地写成:选定模板 $T_k$,把每个变量 $v_i$ 替换为对应槽位值 $s_i$,得到最终回复文本。
工程上模板还要做版本管理与个性化适配:不同渠道(APP/小程序)可换措辞,新政策上线时整个模板集批量更新,线上出现badcase时能快速定位是哪条模板写得不对。话术手册再厚也总有客人问出“漏网之鱼”的问题,这时经理的应急预案就派上用场了——兜底机制。
- 模板 $T_k$模板库中的第 $k$ 个模板文本,如“已登记订单{{order_id}},问题类型:{{issue}}”。
- 变量赋值 $v_i= s_i$:把模板中的第 $i$ 个变量 $v_i$ 替换成槽位值 $s_i$,$s_i$ 来自对话状态里的“订单号”“问题类型”等槽位。
- 渲染结果 $r_t$全部替换完成后得到的最终回复,如“已登记订单A12345,问题类型:售后”。
兜底机制设计
再老练的经理也有接不住的场面:顾客用方言报菜名、后厨突然停电、菜单上新连厨师都没见过。成熟的餐厅不会让局面冷场——道歉、复述确认、请出厨师长,这是他们的“兜底机制”。客服系统同样如此:NLU置信度太低、知识库没命中、连续多轮说不清楚,都需要兜底来避免让用户对着空气说话。
兜底的第一道防线是“探测”:NLU输出的意图置信度低于某个阈值 $\theta$,或者知识库检索没有结果,就认为本轮“没听懂”。第二道防线是“响应”:先道歉再澄清,请用户换个说法;如果连续多轮仍失败,就进入第三道防线——转人工客服,并把上下文打包交给人工,避免用户重复描述问题。整个流程还要配合多轮重试策略,限制兜底次数,防止系统与用户“互相折磨”。
兜底的触发决策可以用一个分段函数描述:最高置信度低于阈值就走兜底链路,否则正常回复。
把兜底想成经理的“三板斧”:道歉稳住局面、澄清减少误解、转场把难题交给更专业的人。当FAQ和任务型对话在同一个系统里共存时,经理还得决定这一单该排到哪条队——这就是混合路由决策。
- 最高置信度 $p_{\max}$NLU对当前输入所有候选意图打分中的最高分,代表“系统有多大把握听懂了”。
- 阈值 $\theta$经验设定的置信门槛,如0.6。门槛太高容易误伤正常对话,太低则兜底形同虚设。
- 兜底分支$p_{\max} < \theta$ 时系统承认没听懂,进入道歉、澄清、转人工的兜底链路。
- 正常回复分支$p_{\max} \geq \theta$ 时系统自信回复,继续走FAQ或任务型流程。
混合路由决策
一家餐厅常常同时接散客点单和外卖订单,经理需要一眼判断:这位是堂食客人要加水(FAQ咨询),还是外卖小哥来取餐(任务执行)?客服系统的混合路由就是在FAQ与任务型对话之间分流,决定当前这一轮该走哪条处理链路。路由错了,轻则答非所问,重则整个任务流程被带偏。
路由的依据不止当前轮的意图,还要结合上下文。用户先问“退货政策是什么”——这是FAQ;接着一句“那我的这个订单怎么退”——前面聊的是政策,这一句却要发起退货任务。如果不结合历史上下文,光看“怎么退”很容易误判。这就是上下文依赖路由的价值,它还能消解“这个”“那个”等指代带来的意图冲突。
路由层通常对每个候选意图计算一个概率,再取最大者作为分流方向:
当FAQ意图和任务意图得分接近时,还要用置信度阈值做安全兜底:分数过低不硬选,宁肯转人工也不要答错。经理的分流判断越准,客人的等待时间越短。但分流准不准,光靠上线前测试是不够的——餐厅每天打烊后都要复盘,客服系统也一样,需要生产环境里的日志与评估来持续打磨。
- 原始得分 $z_i$分类器对第 $i$ 个候选意图(如FAQ、退货任务、账号查询)输出的logit得分。
- Softmax归一化对 $z_i$ 取指数后除以所有类别指数之和,把得分变成和为1的概率分布 $p_i$。
- $\arg\max$ 选最大在所有 $p_i$ 中挑出概率最大的类别作为最终路由目标。
生产实践优化
一家餐厅想越开越好,光靠开业前试菜远远不够。打烊后,经理会翻看今天的点单记录:哪道菜总被退?哪个服务员的话术客人不满意?哪些订单超时了?客服系统的生产优化同样依赖“打烊后的复盘”——日志监控与效果评估。没有数据的对话管理就像没有台账的餐厅,出了问题只能靠猜。
对话管理模块在生产中要全链路留痕:每一轮的意图、槽位、路由结果、置信度、命中模板、响应耗时都要写入日志。这些日志支撑三个核心指标:任务完成率(办成事的比例)、兜底率(听不懂被迫转人工的比例)、平均对话轮数(效率)。指标异常时能快速下钻到具体轮次,定位是NLU的错、模板的错,还是路由的错。
其中任务完成率是最直接的业务指标,计算公式为:
围绕指标建立迭代闭环:兜底率高的badcase定期回流,人工标注后调整模板或路由阈值;新政策上线前用历史对话做回归测试;冷启动阶段没有标注数据,先让规则策略顶上,积累数据后再切换强化学习。复盘不是为了批评某位服务员,而是让整个餐厅越转越顺——状态跟踪、策略学习、模板管理、兜底机制、混合路由五个齿轮在生产数据的润滑下持续磨合,RAG客服系统才能真正从技术原型走向大规模生产。
- 完成任务数 $N_{\text{完成任务}}$统计周期内成功达成用户目标(如查到订单、完成退款登记)的对话数。
- 总对话数 $N_{\text{总对话}}$同一统计周期内系统接待的全部对话数。
- 比率与百分号两者相除再乘以100%,得到任务完成率;完成率低时要结合兜底率、日志分析瓶颈环节。
AI 应用场景
电商平台售后客服机器人
阶段:混合路由决策 + 生产实践优化
解决的问题:大促期间用户时而问政策(“退货运费谁出”),时而报订单办业务(“我要退货,订单是A12345”)。传统做法写死if-else导致意图混乱,FAQ 与任务型互相抢占导致答非所问。
具体案例:某电商售后机器人接入对话管理后,根据意图置信度将咨询类分流到FAQ链路,将含订单实体的请求分流到任务链路;缺订单号时主动追问,槽位齐备后自动登记售后单。上线后售后处理时长下降40%,兜底率稳定在5%以下。
银行智能客服的安全兜底
阶段:兜底机制设计
解决的问题:金融场景答错的代价极高,低置信度问题不能硬答,必须安全转人工,且人工需要拿到完整的对话上下文,不能让用户重复描述。
具体案例:用户咨询“信用卡逾期怎么办”,知识库未命中且NLU置信度仅0.3,DM触发兜底链路:先道歉澄清,用户换说法后仍低置信,随即打包对话状态转人工。人工坐席看到的是“逾期+求解决方案”的槽位摘要而非聊天原文,处理效率提升35%。
企业内部IT工单助手
阶段:对话状态跟踪
解决的问题:用户报障时习惯挤牙膏式提供信息(“电脑蓝屏了”“我的工号是123”“用的是财务软件”),传统表单让用户一次填完,体验差且字段缺失率高。
具体案例:IT工单助手用槽位填充机制逐步收集“工号、设备、软件、故障描述”四个槽位,缺哪个问哪个,齐槽后自动生成工单并回执确认。上线后建单成功率从61%提升到92%,平均填单轮数从5轮降到3轮。
Python 演示
# -*- coding: utf-8 -*-"""RAG客服系统:对话管理模块最小实现演示""" class DialogManager: def __init__(self, slot_schema, templates): self.slot_schema = slot_schema # 任务型对话需要收集的槽位定义 self.templates = templates # 回复模板库 self.filled = {} # 已填充的槽位(点单本) self.history = [] # 多轮对话历史 self.turn_count = 0 self.fallback_count = 0 def track_state(self, intent, entities): """对话状态跟踪:把NLU输出的实体填进槽位""" for key, val in entities.items(): if key in self.slot_schema: self.filled[key] = val return dict(self.filled) def decide_route(self, intent, confidence): """混合路由:FAQ / 任务型 / 兜底三向分流""" if intent == 'faq': return 'faq' if confidence < 0.4: return 'fallback' if intent == 'task': return 'task' return 'fallback' def render_template(self, name, **kwargs): """回复模板管理:用槽位值替换模板变量""" text = self.templates.get(name, self.templates['default']) for k, v in kwargs.items(): text = text.replace('{{' + k + '}}', str(v)) return text def respond(self, user_msg, intent, confidence, entities): """多轮对话入口:状态跟踪 + 路由 + 模板回复""" self.turn_count += 1 self.history.append(user_msg) state = self.track_state(intent, entities) route = self.decide_route(intent, confidence) if route == 'fallback': self.fallback_count += 1 return self.render_template('fallback') if route == 'faq': return self.render_template('faq_answer', question=user_msg) # 任务型:缺槽则追问,齐槽则确认执行 missing = [k for k in self.slot_schema if k not in state] if missing: return self.render_template('ask_' + missing[0]) return self.render_template('confirm', **state) if __name__ == '__main__': schema = {'order_id': '订单号', 'issue': '问题类型'} templates = { 'default': '请问还有什么可以帮您?', 'fallback': '抱歉没理解您的意思,已为您转接人工客服。', 'ask_order_id': '请提供您的订单号。', 'ask_issue': '请描述您遇到的问题。', 'faq_answer': '好的,关于「{{question}}」已为您匹配到FAQ知识。', 'confirm': '已登记订单{{order_id}},问题类型:{{issue}},将尽快处理。', } dm = DialogManager(schema, templates) turns = [ ('我耳机坏了', 'task', 0.9, {'issue': '售后'}), ('订单号是A12345', 'task', 0.8, {'order_id': 'A12345'}), ('多久能到账', 'faq', 0.85, {}), ('随便说点什么吧', 'none', 0.2, {}), ] for msg, intent, conf, ent in turns: print('用户:', msg) print('客服:', dm.respond(msg, intent, conf, ent)) print('状态:', dm.filled, '| 路由:', dm.decide_route(intent, conf), '| 兜底次数:', dm.fallback_count) print('---')
self.filled = {}点单记录本:保存已确认的槽位值,跨轮共享。def track_state(self, intent, entities)把NLU吐出的实体按槽位schema过滤后写入状态。confidence < 0.4兜底触发阈值,低于0.4不硬答,直接转人工。self.templates.get(name, self.templates['default'])模板查不到时使用默认话术,避免KeyError。missing = [k for k in self.slot_schema if k not in state]计算还缺哪些槽位,实现“缺啥问啥”。text.replace('{{' + k + '}}', str(v))用槽位值替换模板里的变量插槽。
常见误区
误区很多初学者觉得DM就是写 `if intent == "return": ask_order_id()` 这种规则堆出来的,多写几个分支就能应付所有对话。
正解生产级DM是“状态跟踪+策略+模板+兜底”的组合体。规则策略只是策略层的一种实现方式,而且要正常工作必须依赖状态表示、置信度评估与路由决策共同配合。就像餐厅经理的判断不只是“看到顾客就打招呼”,而是基于点单本上的记录和现场情况综合决策。
为何常见:小Demo用if-else就能跑通,让人误以为生产系统也不过如此。
误区觉得兜底就是糊弄一句话,系统没理解就回一句“对不起,我还没学会”了事。
正解好的兜底是分级动作链:先道歉澄清让用户换种说法,再限制重试次数防止死循环,多次失败后转人工并附上上下文摘要,同时把badcase写入日志用于后续迭代。像餐厅遇到菜品售罄,不会干巴巴说“没有”,而是推荐替代方案并请厨师长确认。
为何常见:只见过最浅层的默认回复,没见过完整的兜底链路设计。
误区以为对话状态就是把聊天记录全部存下来,用到时候翻历史找信息。
正解状态跟踪保存的是结构化槽位与置信度,而不是原文。像点单本只记“汤换沙拉”,不记顾客抱怨天气。存原文既浪费存储,又让策略层难以做决策——机器无法直接在自然语言上算状态价值。
为何常见:把日志记录和状态表示混为一谈,误以为“记全”就是“记好”。
误区认为FAQ和任务型分流只靠当前轮的意图就能判断清楚,不需要历史信息。
正解混合场景必须结合上下文。用户先问“退货政策”(FAQ),后说“开始办理”(任务),若只看当前句“开始办理”会误判成闲聊。上下文依赖路由才能消解“这个”“那个”等指代,避免任务被带偏。
为何常见:长期用单轮评测集做验证,忽略了多轮依赖才是生产对话的常态。
误区觉得模板是老系统的产物,新项目直接让大模型自由发挥生成回复就好,模板不值得投入精力。
正解生产客服大量使用模板,因为它可控、可测、可审计:每句话都有版本、有归属、能回滚。模板需要按用途分类维护、变量校验、版本管理。像餐厅话术手册,既要统一标准,也要定期更新,否则自由发挥的回复就像随性发挥的服务员——偶尔惊艳,常常翻车。
为何常见:被大模型的生成效果惊艳,低估了可控性在客服场景中的价值。
面试题
Q1. 对话管理在客服系统中的位置是?
- A.位于NLU与NLG之间的枢纽判定← 正确答案
- B.位于数据库与缓存之间的层
- C.位于前端与后端之间的层
- D.位于网关与防火墙之间的层
答案:A。对话管理夹在自然语言理解(听懂)与响应生成(说出)之间,像餐厅里站在厨房与餐桌之间的值班经理。数据库、前端、网关都不属于对话链路的中间环节,因此B、C、D均错误。
Q2. 对话状态跟踪主要记录什么?
- A.用户全部的原始对话文本
- B.结构化的槽位与意图值← 正确答案
- C.服务端访问日志的详情
- D.向量检索排序的得分
答案:B。状态跟踪保存的是结构化的槽位-值对与意图信息,像点单本只记“汤换沙拉”,不记顾客闲聊。原始文本属于日志范畴,访问日志与检索得分都不是对话状态的组成部分。
Q3. 槽位填充的核心作用是?
- A.逐步收集完成任务所需信息← 正确答案
- B.将回复文本翻译成其他外语
- C.对用户语音进行实时降噪
- D.压缩知识库的存储空间
答案:A。槽位填充是任务型对话的关键:把订单号、问题类型等信息从多轮话语里逐步收集齐,缺什么问什么。翻译、降噪、压缩都与对话状态无关,属于其他模块的职责。
Q4. 强化学习策略中奖励信号来自哪里?
- A.模拟器或用户提供的反馈← 正确答案
- B.数据库查询延迟时间
- C.服务器磁盘剩余空间
- D.回复模板的字符串长度
答案:A。奖励信号衡量对话策略的好坏,如任务是否完成、用户是否满意,训练时通常由用户模拟器或真实反馈给出。查询延迟、磁盘空间、模板长度都是系统内部指标,不能代表对话质量的优劣。
Q5. 回复模板中的变量如何处理?
- A.用槽位值动态替换变量← 正确答案
- B.保留变量原样发给用户
- C.使用固定文本覆盖变量
- D.将变量转为大写字母
答案:A。模板渲染的核心是从对话状态里取出槽位值替换模板变量,如把{{order_id}}替换成A12345。保留变量或覆盖为固定文本都会让回复失去个性化信息,大小写转换更是无关操作。
Q6. 对话状态如何融合新旧槽位值?
- A.直接删除上一轮全部旧值
- B.按置信度加权合并新旧值← 正确答案
- C.随机保留任意一轮的旧值
- D.仅保留第一次出现的旧值
答案:B。状态更新采用置信度加权:新观测与旧信念按贝叶斯公式融合,既采纳新信息又不完全丢弃历史。全删、随机、只留首值都会让状态在信息变化时失真,导致多轮对话“失忆”。
Q7. 多次兜底重试仍未解决时应该怎么办?
- A.无限重试直到用户离开
- B.递进转人工并记录日志← 正确答案
- C.随机选择一个模板回复
- D.结束对话不做任何处理
答案:B。兜底要有终止条件:限制重试次数,几次澄清失败后递进式转人工,并把对话状态打包给人工,同时记录badcase。无限重试会耗尽用户耐心,随机回复和直接沉默都是体验灾难。
Q8. 哪些情况适合触发人工接管?
- A.多次重试仍无法理解用户← 正确答案
- B.用户情绪激动要求投诉← 正确答案
- C.FAQ命中率稳定的对话
- D.槽位全部填充完成的对话
答案:AB。转人工的触发条件包括:兜底重试耗尽仍无法理解,以及用户情绪强烈等高风险场景。FAQ正常命中与槽位齐备说明系统处理顺畅,恰恰不需要人工介入。
Q9. 混合路由决策需要哪些依据?
- A.当前轮意图与置信度← 正确答案
- B.多轮对话的历史上下文← 正确答案
- C.用户输入的字数统计
- D.服务器内存占用情况
答案:AB。路由既要看当前轮的意图与置信度,也要结合历史上下文消解“这个”“那个”等指代。字数统计与内存占用是系统运行时指标,与“该走FAQ还是任务流”没有因果关系。
Q10. 对话管理生产优化包含哪些做法?
- A.badcase日志回流迭代← 正确答案
- B.线上任务完成率监控← 正确答案
- C.取消模板全部自由生成
- D.冷启动阶段使用规则策略← 正确答案
答案:ABD。生产优化依赖badcase回流、任务完成率监控与冷启动规则兜底。取消模板看似拥抱大模型,实则丧失可控性与可审计性,是典型的错误方向。规则策略在冷启动阶段恰恰是不可或缺的保底方案。