首页 > 解决方案 > rasa 从自定义操作中填充插槽

问题描述

我正在尝试用 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 然后输入与问候语意图匹配的内容,我会收到以下错误:

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

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

当前槽值:示例:示例

我正在使用 rasa 2.1.0

标签: pythonrasa-nlurasa

解决方案


这有帮助吗?让我知道

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 []

推荐阅读