突然习惯了在 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 不参与对话决策(如纯存储用途),且无需模型学习其变化时。
查看合集
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式