对话机器人 Rasa(四十一):两例 slot 未赋值问题

更新日期: 2025-05-18 阅读次数: 307 字数: 535 分类: AI

突然习惯了在 rasa custom action 中直接赋值 slot, 而不在 yml 流程中注明。

我发现在 rasa 中,如果不在 stories.yml 中写明 slot_was_set,则对应的 slot 就不会在 custom action 中赋值成功,这是为什么? 而有的流程,不在 stories.yml 中标注 slot_was_set,slot 也能赋值成功。

实际上,这是一个错觉。

因为,实际测试发现。只有特地类型的 slot 需要在 stories 中写明 slot_was_set,其他类型的 slot 都可以在 custom action 中直接赋值。

案例一:影响流程的 slot

如果定义 slot 时,使用的是影响流程的类型。例如:

  some_slot:
    type: text
    influence_conversation: true
    mappings:
      - type: custom

some_slot 是影响流程的 slot,其赋值必须写到 stories.yml 或者 rules.yml 中, 否则在 custom action 中赋值不会生效。

案例二:from entity 的 slot

  some_slot:
    type: text
    influence_conversation: false
    mappings:
      - type: from_entity
        entity: some_entity

from entity,这种要么改成 from custom,要么 stories 中明确写明赋值。否则也是不会生效的。

set slot 是否必须写在 story / rule 中

AI 给出的建议:

  • 必须写 slot_was_set:当 Slot 影响对话流程(influence_conversation=true),且需要在训练中让模型感知状态变化时。
  • 可不写 slot_was_set:当 Slot 不参与对话决策(如纯存储用途),且无需模型学习其变化时。

查看合集

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

微信关注我哦 👍

大象工具微信公众号

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