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

文章目录

    问题现象

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

    • 预期的效果是:先返回一个 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
    

    就一切正常了。

    补充

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

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

    补充 2

    今天又发现一例异常的现象

    - story: some story
      steps:
        - intent: intent_a
        - action: action_a
        - slot_was_set:
            - slot_a: true
        - slot_was_set:
            - slot_b: true
            - slot_c: true
        - action: action_b
    

    如果漏掉了 slot_c 也会出现后续的 intent 返回空的情况。

    查看合集

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

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式