【问题标题】:rasa fill slots from custom actionrasa 从自定义操作中填充插槽
【发布时间】:2020-11-22 22:27:24
【问题描述】:

我正在尝试使用 rasa 构建一个机器人。在对话的最开始,它应该用数据库中的数据填充一些槽。

我有一个自定义操作:

class ActionFillSlots(Action):

def name(self) -> Text:
    return "action_fill_slots"

def run(self, dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

    example = "example"
    return [SlotSet("example", example)]

在我的 domain.yml 文件中,我设置了这样的插槽:

slots:
  example:
  type: text

还有这样的回应:

 utter_greet:
 - text: "Show { example }"

在我的 stories.yml 文件中,我有这样的故事:

- story: greet happy path
  steps:
  - intent: greet
  - action: action_fill_slots
  - action: utter_greet

如果我使用rasa shell --debug 运行机器人 然后输入与问候意图相匹配的内容,我收到以下错误:

未能填充话语模板“显示 { 示例 }”尝试替换“示例”但找不到值 e 为它。调用模板时没有使用此名称的插槽,也没有显式传递值。返回模板而不填写模板。

在我的调试窗口中,我可以看到,该插槽已由操作设置:

当前槽值: 示例:示例

我使用的是 rasa 2.1.0

【问题讨论】:

    标签: python rasa-nlu rasa


    【解决方案1】:

    这有帮助吗?告诉我

    from typing import Any, Text, Dict, List
    from rasa_sdk import Action, Tracker
    from rasa_sdk.executor import CollectingDispatcher
    
    class ActionFillSlots(Action):
    
    def name(self) -> Text:
        return "action_fill_slots"
    
    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
    
        example = tracker.get_slot(example)
        dispatcher.utter_message(text = str(example))
    
        return []
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多