Skip to content

Agent对话模块的容错能力设计

Agent对话模块的容错能力怎么设计?用户说话不清楚的时候或者有歧义的时候怎么办

对话系统的容错能力核心主要是在多层识别与主动澄清机制, 当用户输入不清晰的时候,如果通过 置信度阈值判断出来低于阈值就触发容错流程

具体来说,可以设计意图消歧策略,当识别到多个可能意图时,通过追问来确认

比如用户说,我要查一下, 就可以引导回复说 ,你是要查询订单、余额、还是物流信息

当具体的slot槽不完整的时候,用类似的方式引导,然后建立上下文修正机制,允许用户随时纠正前面的错误输入,比如用户说明天, 然后后面又说不对,是后天,系统要能够识别否定词并更新槽位值

另外一些模糊匹配或者同义词扩展也可以考虑,比如退钱可以理解成退款,当遇到理解不了无法判断的时候,应该直接输出出去坦诚相告,而不是卡死在某个节点

具体设计

通常来讲,可以分为三层防御框架

  • 预防层
    • 举个例子,语音场景下,如果识别错误会直接污染后续所有环节,所以预防层主要就是提升识别的准确性,客服场景要针对性收集带方言、口音的语料,声学模型需要场景化训练
    • 文本输入的预防重点就在于规范化处理,比如用户输入iphone15promax,要先做分词归一化处理,拆成iphone 15 pro max 再发送给后续的环节,可以提高一定的准确性
  • 识别层
    • 识别曾的判断逻辑核心是建立一套可靠的问题检测机制,不仅仅是设置置信度阈值,现实中更多可能要涉及到多维评分机制,比如当前输入和上下文的一致性,业务规则的匹配度,比如用户说订票帮我改到明天, 意图改签没有问题,但是信息槽位里少了订单号这个关键信息,完整度评分就很低,如果上文没有提到任何订单,上下文一致评分也很低,这个时候就应该触发澄清流程
    • 多意图识别的处理策略在实际场景也很常见,比如用户一句话表示多个意图
      • 帮我查一下订单,顺便地址改成公司
      • 类似这种多意图识别,要先判断这些意图之间是并列关系还是递进关系,如果是并列关系,可以确认是想先做A再做B还是怎么样,如果是递进关系,那就按业务流程串行处理
    • 上下文关联分析是识别层最能拉开水平的地方,对话系统要维护一个上下文记忆栈,不只记录里示意图和槽位,还要记录每次交互的焦点信息,比如用户先问我的订单怎么还没到,系统查询后告知,您的订单xxx正在配送中,这个时候用户如果说取消它, 系统要能识别出来它指的是订单xxx,而不是再问一次订单号
  • 补救层
    • 该层就是用户直接感知的容错环节,比如用户说帮我订一张从北京到上海的机票,后续问 您要哪天出发 就很正常, 如果用户只说了“订票”, 上来就问哪天出发就会有点怪,应该先问您要从哪里去到哪里
    • 候选答案是处理歧义的关键手段,不是简单的把topk结果列出来,要做合并和过滤
      • 比如用户说苹果,识别结果可能有 水果苹果、手机苹果、苹果电脑,如果在电商客服场景,就可以过滤掉水果,保留商品的候选项,如果前面用户提了手机,那苹果大概率指的就是iphone

对论对话的状态管理是容错恢复的基础,状态管理的核心是设计一个随时能回滚的对话结构,每一轮对话都包含一个快照,包括当前意图、已填的槽位、待确认信息,这样可以精准的返回到对应状态上

并且错误传播的阻拦机制也很重要,比如说前面某个槽位填错了后续基于这个槽位的推理都要推翻,要在状态栈中标记每个槽位的依赖信息

最后更新于: