目录

  • 处理超出范围的消息
    • 1.创建超出范围的意图(nlu.yml)
    • 2.定义响应消息(domain.yml)
    • 3.创建超出范围规则(rules.yml)
    • 处理特定的超出范围消息
  • Fallbacks
    • NLU Fallback
      • 1.更新配置文件(config.yml)
      • 2.定义响应消息(domain.yml)
      • 3.创建NLU fallback规则(rules.yml)
    • 处理置信度较低的Action
      • 1.更新配置文件(config.yml)
      • 2.定义默认响应消息(domain.yml)
      • 3.自定义默认操作(actions.py)
    • Two-Stage Fallback
      • 1.更新配置(config.yml)
      • 2.定义回退响应(domain.yml)
      • 3.定义两阶段回退(Two-Stage Fallback)规则
    • 切换到人工服务
  • 总结
  • 参考

处理超出范围的消息

为了避免用户失望,您可以处理您知道用户可能会问的问题,但您尚未实现用户目标。

1.创建超出范围的意图(nlu.yml)

您需要在NLU训练数据中定义out_of_scope的意图,并添加任何已知的超出范围请求作为训练示例,例如:

nlu:
- intent: out_of_scopeexamples: |- I want to order food- What is 2 + 2?- Who's the US President?

正如所有的意图一样,你应该从真实的对话中获取你的大多数例子。

2.定义响应消息(domain.yml)

您需要在域文件中定义一个超出范围的响应。使用utter_out_of_scope作为默认响应,如下所示:

responses:utter_out_of_scope:- text: Sorry, I can't handle that request.

3.创建超出范围规则(rules.yml)

最后,您需要为范围内和范围外的请求编写规则:

rules:
- rule: out-of-scopesteps:- intent: out_of_scope- action: utter_out_of_scope

处理特定的超出范围消息

如果您注意到用户总是询问某些内容,你想要在将来将其转化为用户目标,您可以将这些作为单独的意图处理,让用户知道您已经理解了他们的消息,但还没有一个解决方案。例如,如果用户询问“我想在Rasa申请工作”,我们可以回答“我知道你在找工作,但恐怕我还不能应付这个技能。”
out_of_scope意图示例类似,您需要创建新的意图,并列出训练示例、定义响应消息并创建规则。

Fallbacks

尽管Rasa会对未看到的消息进行泛化,但有些消息可能仍会收到较低的分类置信度。使用Fallbacks将有助于确保这些较低分类置信度的消息得到妥善处理,从而使助手可以选择使用默认消息响应,或尝试消除用户输入的歧义。

NLU Fallback

要处理NLU可信度较低的传入消息,请使用FallbackClassifier。使用此配置,当所有其他意图预测低于配置的置信阈值时,将预测意图nlu_fallback。然后,您可以编写一个规则,说明在预测nlu_fallback时bot应该做什么。

1.更新配置文件(config.yml)

要使用FallbackClassifier,请将其添加到NLU管道:

pipeline:
# other components
- name: FallbackClassifierthreshold: 0.7

2.定义响应消息(domain.yml)

当消息被分类为较低的置信度时,通过添加响应来定义bo应发送的消息,如下:

responses:utter_please_rephrase:- text: I'm sorry, I didn't quite understand that. Could you rephrase?

3.创建NLU fallback规则(rules.yml)

当用户发送的消息置信度较低时,以下规则将要求用户重新措辞:

rules:
- rule: Ask the user to rephrase whenever they send a message with low NLU confidencesteps:- intent: nlu_fallback- action: utter_please_rephrase

处理置信度较低的Action

由于用户可能会发送意料之外的消息,他们的行为可能会引导他们进入未知的对话路径。Rasa的机器学习策略(如TED Policy)被优化以处理这些未知路径。
若要处理机器学习策略无法以高置信度预测下一个Action的情况,即,如果在没有Policy具有置信度高于可配置阈值的下一个操作预测时,可以将Rule Policy配置为预测默认操作。
Action可信度低时,您可以使用以下步骤配置应该运行的Action以及相应的可信度阈值:

1.更新配置文件(config.yml)

您需要将RulePolicy添加到config.yml中的policies中。默认情况下,规则策略附带以下设置:

policies:
- name: RulePolicy# Confidence threshold for the `core_fallback_action_name` to apply.# The action will apply if no other action was predicted with# a confidence >= core_fallback_thresholdcore_fallback_threshold: 0.4core_fallback_action_name: "action_default_fallback"enable_fallback_prediction: True

2.定义默认响应消息(domain.yml)

为了明确当动作可信度低于阈值时,bot将说什么,请定义一个响应utter_default

responses:utter_default:- text: Sorry I didn't get that. Can you rephrase?

action可信度低于阈值时,Rasa将运行action_default_fallback。这将发送响应utter_default,并恢复到导致回退的用户消息之前的会话状态,因此不会影响对未来操作的预测。

3.自定义默认操作(actions.py)

action_default_fallback是Rasa中的一个默认操作,它向用户发送utter_default响应。您可以创建自己的自定义操作以用作fallback(有关自定义操作的详细信息,请参阅Custom Actions)。下面的代码段是一个自定义操作的实现,该操作与action_default_fallback的操作相同,但分配一个不同的模板(响应)utter_fallback_template

from typing import Any, Text, Dict, Listfrom rasa_sdk import Action, Tracker
from rasa_sdk.events import UserUtteranceReverted
from rasa_sdk.executor import CollectingDispatcherclass ActionDefaultFallback(Action):"""Executes the fallback action and goes back to the previous stateof the dialogue"""def name(self) -> Text:return ACTION_DEFAULT_FALLBACK_NAMEasync def run(self,dispatcher: CollectingDispatcher,tracker: Tracker,domain: Dict[Text, Any],) -> List[Dict[Text, Any]]:dispatcher.utter_message(template="my_custom_fallback_template")# Revert user message which led to fallback.return [UserUtteranceReverted()]

Two-Stage Fallback

为了让bot有机会弄清楚用户想要什么,您通常会希望它通过问一些明确的问题来尝试消除用户消息的歧义。Two-Stage Fallback使用以下顺序处理多个阶段中的低NLU置信度:

  1. 用户消息分类后置信度很低
    - 要求用户确认意图
  2. 用户确认或否认意图
    - 如果他们确认了,谈话就会继续进行,就好像从一开始对意图进行了分类的置信度很高一样。不会采取进一步的回退步骤。
    - 如果他们否认,用户将被要求重新表述他们的消息。
  3. 用户重新表述他们的意图
    - 如果消息被分类后有很高的置信度,则会话将继续,就好像用户从一开始就有此意图一样。
    - 如果用户消息重新措辞后的置信度仍然较低,则要求用户确认意图。
  4. 用户确认或否认重新表述的意图
    - 如果他们确认,对话将继续,就好像用户从一开始就有这个意图一样。
    - 如果他们否认,最终的fallback action就会触发(例如,a handoff to a human)。

可以使用以下步骤启用Two-Stage-Fallback

1.更新配置(config.yml)

FallbackClassifier添加到pipeline中,并将RulePolicy添加到policies中:

pipeline:
# other components
- name: FallbackClassifierthreshold: 0.7policies:
# other policies
- RulePolicy

2.定义回退响应(domain.yml)

要定义bot如何要求用户重新表述其消息,请定义响应utter_ask_rephrase

responses:utter_ask_rephrase:- text: I'm sorry, I didn't quite understand that. Could you rephrase?

Rasa提供了用于询问用户意图的默认实现,并要求用户重新措辞。要自定义这些操作的行为,请参阅有关默认操作的文档。

3.定义两阶段回退(Two-Stage Fallback)规则

将以下规则添加到训练数据中。此规则将确保每当接收到分类可信度较低的消息时,将激活Two-Stage-Fallback,在rules.yml定义以下规则:

rules:
- rule: Implementation of the Two-Stage-Fallbacksteps:- intent: nlu_fallback- action: action_two_stage_fallback- active_loop: action_two_stage_fallback

切换到人工服务

作为回退操作的一部分,您可能希望bot移交给人工代理,例如作为两阶段回退中的最终操作,或者当用户明确要求人工代理时。实现人工切换的一种简单方法是根据特定的bot或用户消息配置消息或语音通道,以切换它侦听的主机。
例如,作为两阶段回退的最后一个操作,bot可以询问用户,“您想被转移到人工助理吗?”如果他们说是,bot会向通道发送一条带有特定有效负载的消息,例如handoff_to_human。当通道看到此消息时,它将停止侦听Rasa服务器,并将一条消息发送到human通道,其中包含聊天对话的记录。
要实现从前端传递给人工,将取决于您使用的通道。您可以在Financial Demo和Helpdesk-Assistant StarterPack中看到一个使用聊天室频道自适应的示例实现。

总结

为了让您的助手较好地处理失败,您应该处理已知的“超出范围”的消息,并添加一个回退行为的表单。如果您想添加人工切换,您可以将其添加到备用设置中,或者作为备用设置的最后一步。以下是您需要对每个方法进行的更改的总结:

对于超出范围(out-of-scope)的意图:

  • 在NLU数据中为每个超出范围的意图添加训练示例
  • 定义超出范围的响应或操作
  • 为每个超出范围的意图定义规则
  • RulePolicy添加到config.yml

对于单步NLU回退:

  • config.yml中将FallbackClassifier添加到管道中
  • 定义回退响应或操作
  • nlu_fallback意图的定义规则
  • RulePolicy添加到config.yml

For handling low core confidence:

  • config.yml中为core fallback配置RulePolicy
  • Optionally customize the fallback action you configure
  • 定义utter_default响应

For Two-Stage Fallback:

  • config.yml中将FallbackClassifier添加到pipeline
  • nlu_fallback意图定义触发action_two_stage_fallback操作的规则
  • 在您的domain中定义out-of-scope的意图
  • RulePolicy添加到config.yml

切换到人工:

  • Configure your front end to switch hosts
  • Write a custom action (which could be your fallback action) to send the handoff payload
  • Add a rule for triggering handoff (if not part of fallback)
  • RulePolicy添加到config.yml

参考

  1. 官方文档

RaSa2.5.x利用Fallback处理超出范围的消息相关推荐

  1. opencv + python3 利用ros 的 cv_bridge 传送图像消息的一种替代方法

    opencv + python3 利用ros 的 cv_bridge 传送图像消息的一种替代方法 利用自定义的图像类型代替sensor_msgs/Image, python2可以使用cv_bridge ...

  2. 利用钩子机制取得Windows的消息监控权

    利用钩子机制取得Windows的消息监控权 我们知道,Windows系统是建立在消息传递机制基础上的,几乎所有的程序活动都由消息来驱动.Windows的钩子机制可以看作是一个消息中转站,控制系统发出消 ...

  3. 利用MUI+个推实现APP消息推送

    利用MUI+个推实现APP消息推送 从2015年7月开始使用MUI进行APP的开发,到现在已经有一个年头了.而以前做过的东西都没有整理过,以后会将自己遇到的坑整理下来. 这篇主要是讲利用MUI和集成的 ...

  4. 利用AI生成高情商回复消息

    在当今社交媒体和即时通信的日益普及下,与人交流已成为我们日常生活中不可避免的一部分.然而,在我们与他人交流时,如果能够有更高情商的回复,就可以让我们更好地解决矛盾,建立更好的关系.这时候,人工智能(A ...

  5. iOS 上利用 fallback 机制为不同语言的文字 (script) 设定字体,从而使得文本混排更为优雅...

    如果您是一位 WEB 开发者,相信您对 CSS 的 font-family 属性一定不会陌生.通常我们会为 font-family 属性设置一长串的字体(家族)列表,就像这样的: .text { fo ...

  6. 【采购订单】利用BAPI创建PO后丢失消息输出

    背景:有一些公司采购订单的创建不是单纯通过手动ME21N进行的,而是批量通过BAPI(BAPI_PO_CREATE1)来创建,这个时候会有一个问题,PO成功创建之后利用显示功能(ME23N)无法打印预 ...

  7. 程序员利用Python破解老婆撤回的消息,这样竟然还有老婆?

    文章背景: 闲来无事,在街上吃了些零食并用微信付款.不得不说程序员的思维和别人的是真不同,我想的却是微信真强大,稍微查看了一下,还有许多的小程序,很多大企业都在与它合作.这些还不是最重要的,关键是看到 ...

  8. python 钉钉机器人发送图片_利用Python自动发送钉钉数据消息

    现在大部分公司都使用钉钉作为内部的主要沟通工具,钉钉消息基本都上都能快速有效的被阅读,打开率会比邮件高上不少.所以准备使用钉钉来播报平台每日的成交额,并附上一些鼓励的话和图片.起到一个激励团队的作用 ...

  9. 钉钉python 自动发消息软件_利用Python自动发送钉钉数据消息,一个简单的上手小项目...

    现在大部分公司都使用钉钉作为内部的主要沟通工具,钉钉消息基本都上都能快速有效的被阅读,打开率会比邮件高上不少.所以准备使用钉钉来播报平台每日的成交额,并附上一些鼓励的话和图片.起到一个激励团队的作用 ...

最新文章

  1. RoboGuice 解析
  2. GDB 内写脚本调试程序
  3. Linux质数合数的脚本,python输出100以内的质数与合数实例代码
  4. JPA Hibernate应用实例
  5. 戴口罩也能刷门禁?疫情下AnalyticDB亮出社区管理的宝藏神器!
  6. 【牛客 - 210A】游戏(思维,脑洞)
  7. uboot中关于LCD的代码分析
  8. 逃离深圳的华为,原来可以这么美:研发小姐姐第一天上班游记
  9. js判断对象是否为空对象_js对象
  10. 从零开始学PowerShell(9)创建PowerShell对象
  11. LeetCode题 - 1 两数之和
  12. devc编译器配置如何配置_如何使用notepad++搭配MinGW配置编译C/C++
  13. spark学习-Spark算子Transformations和Action使用大全(Transformations章(二))
  14. mysql字符串区分大小写的问题
  15. python学习笔记之读取pdf文件库pdfplumber(一)
  16. Java爬虫,数据采集经验分享
  17. 微机原理及应用简答题复习
  18. Java重命名文件的方法_java重命名文件(附道客巴巴文档下载方法)
  19. Python之基础详解(九):关于VisualMapOpts视觉映射配置项详解
  20. bootstrap collapse 卡顿

热门文章

  1. 添加Kinect模型及kinect.dae文件的下载
  2. C语言中在常数后面加U、L、F的功能(转)
  3. 【深度干货】数据中心机柜综合布线
  4. Kafka 设计原理——副本与ISR设计
  5. python 匹配两个字符串的相似度
  6. OpenResty中cjson的两种方法
  7. 自动化立体库管理系统软硬件实训
  8. 弘辽科技:淘宝如何提升店铺流量?需要准备什么?
  9. 今天开始学Convex Optimization:引言、第1章基本概念介绍
  10. Hive DDL操作命令实验