You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RASA表单中为插槽添加条件以控制提问流程?

解决Rasa表单条件跳过问题

你的问题核心在于story仅用于匹配对话流程的历史路径,无法直接控制表单是否跳过某个插槽的询问。要实现「满足条件才询问对应问题,否则跳过」的逻辑,需要在表单的配置文件或自定义动作中设置条件规则,而非依赖story里的slot_was_set。

方法1:在forms.yml中配置插槽条件

在表单的required_slots字段里,为每个需要条件控制的插槽添加condition,指定只有当条件满足时,该插槽才会被触发询问。

假设你需要根据contact_prefer的值,决定是否收集phone_number或sms_number,配置示例如下:

forms:
  basic_info_form:
    required_slots:
      contact_prefer:
        - type: from_entity
          entity: contact_prefer
      phone_number:
        - type: from_text
        condition:
          - slot_was_set:
              - contact_prefer: "phone call"
      sms_number:
        - type: from_text
        condition:
          - slot_was_set:
              - contact_prefer: "text(SMS)"

配置完成后,表单会先收集contact_prefer,再根据其值判断是否询问对应号码插槽,不满足条件则直接跳过。

方法2:自定义表单验证类(复杂逻辑场景)

如果需要更灵活的条件判断,可以在actions.py中自定义表单验证类,重写required_slots方法动态返回需要收集的插槽:

from rasa_sdk import FormValidationAction, Tracker
from rasa_sdk.executor import CollectingDispatcher
from typing import Dict, List, Text, Any

class ValidateBasicInfoForm(FormValidationAction):
    def name(self) -> Text:
        return "validate_basic_info_form"

    def required_slots(
        self,
        slots_mapped_in_domain: List[Text],
        dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any],
    ) -> List[Text]:
        required_slots = ["contact_prefer"]
        contact_prefer = tracker.get_slot("contact_prefer")
        if contact_prefer == "phone call":
            required_slots.append("phone_number")
        elif contact_prefer == "text(SMS)":
            required_slots.append("sms_number")
        return required_slots

随后在domain.yml中关联这个验证动作:

forms:
  basic_info_form:
    validate: validate_basic_info_form

关键提醒

  • 你现有的story代码无需修改(仅用于匹配对话流程),表单的逻辑控制完全由配置或自定义动作负责。
  • 确保domain.yml中已正确定义所有用到的插槽、意图和响应(比如询问手机号/短信号的utter动作)。

内容的提问来源于stack exchange,提问作者Rishi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:52:10