对话机器人 Rasa(三十):slot influence_conversation 引发的 intent 无法识别

更新日期: 2024-01-03 阅读次数: 441 字数: 523 分类: AI

问题现象

在某个对话流程之后,返回了两个按钮,点击一个按钮

  • 预期的效果是:先返回一个 utter,然后进入 form 输入 loop。
  • bug 表现:要么返回空,要么返回完全不着边际的一个 utter,或者触发一个没有任何关联的一个 custom action。

我本以为是这个 intent,触发 form loop 这个 story 写的有问题。

但实际上,发现这两个按钮都不正常了,甚至所有 intent 都无法在这个操作之后正常被识别。

排除 intent 识别问题

按钮 payload 中的指定意图,类似这样的格式。

/intent

这个是不会有识别问题的。因为其 confidence 就是 1.0。不会出现因为 confidence 不足,而 fallback 的情况。

实际测试也能证实这一点,在不进行任何操作之前,就在对话中输入

/intent

或者在 rasa shell 中输入此 intent,会发现,都能被正确的识别,并且返回预期的 utter 或者触发 action。

只有在某个特定的 story / rule 之后才会出现所有 intent 无法识别的诡异现象。

所以,一定是前一步的 story / rule 出现了问题。

定位 story / rule 的问题

此处是一个简单 rule,如:

- rule: intent_a
  steps:
  - intent: intent_a
  - action: action_a
  - slot_was_set:
    - slot1: true
    - slot2: true
    - slot3: true
    - slot4: true
    - slot5: true

action_a 是一个 custom action,逻辑的最后会设置五个 slot 的值。

通过逐一注释排查每个 slot,发现是 slot 的 influence_conversation 配置问题。

例如,原 slot1 的配置为:

slot1:
  type: text
  influence_conversation: true
  mappings:
  - type: from_text
    conditions:
       - active_loop: slot1_form
         requested_slot: slot1

但实际上这个 slot1 并不会影响流程,具体示例如:对话机器人 Rasa(十五):slot type 与 influence conversation

所以需要修改为:

slot1:
  type: text
  influence_conversation: false
  mappings:
  - type: custom

就一切正常了。

补充

这个问题非常诡异,有时候训练出的模型是正常的。但是今天怎么训练都生成不了一个可用的。

之前是侥幸,终于今天发现问题的根源了。

查看合集

📖 对话机器人 Rasa 中文系列教程

tags: rasa

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式