python - 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
解决方案
这有帮助吗?让我知道
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 []
推荐阅读
- c++ - 如何在 Dev-c++ 中安装外部库?(雷库)
- function - Google 表格的 IMPORTHTML() 未能保持数据的原始格式
- angular - 如何将新数据附加到存储在 firebase 的 firestore 上的数组中?节点,Ionic3,角度,Javascript
- python - 存储函数的参数以供以后评估
- r - 在 r 中创建特殊的子组列
- c# - 无法访问文件夹名称末尾有多个连续空格的文件
- azure-data-factory - REST 成功,Azure 数据工厂中的 HTTP 失败,但需要证书
- html - 如何保护托管在 Github 页面上的 html 文件中的机密?
- simulation - 具有二元变量和调节中介的 Lavaan 模型
- gcc - 使用静态库构建 HA 代理 - 库优先级