在操作服务器中使用查询 CLI 应用程序

Using questionary CLI app within action server

我正在使用 Tom Bocklisch 基于 prompt_toolkit 构建的问题模块作为我的操作服务器中操作的一部分。我的环境是码头化的,即我正在为 NLU、Core 和 core_sdk.

使用单独的容器

当我 运行 将基本代码作为来自 rasa_core 的独立脚本时,以下代码可以完美运行。但是,当我将它作为动作服务器 运行ning core_sdk 中的一个动作时,它失败了。

def 运行(self, dispatcher, tracker, domain): acc = tracker.get_slot('account')

dev_key = requests.get('https://xxxx', timeout=5.0) 

questions = []

api_url = 'https://xxxx/token/' + dev_key 
api_key = requests.get(api_url, timeout=5.0)

field_data_url = 'https://xxxx/fields/' + api_key + '/' + 'Account'

fields = requests.get(field_data_url).json()
field_list = fields['Object']

for flds in field_list:
    if flds['IsRequired']:
        q_item = {'type': 'text', 'name': flds['FieldName'], 'message': flds['LabelText']}
        questions.append(q_item)

answers = qs.prompt(questions)


#SlotSet('account_fields', answers)


return answers

我想这与通过 http 与 CLI 应用程序交互有关,但我不确定如何处理它。任何帮助将不胜感激。

谢谢

您尝试执行的操作无效。 动作服务器无法访问您用来与 Rasa Core 交互的命令行界面,因为它是一个单独的服务器。动作服务器使用 HTTP 请求与 Rasa Core 通信。因此,如果您的操作服务器执行 qs.prompt(questions),则没有它可以附加的命令行,因为它完全独立于 Rasa Core 命令行界面。

如果你想问用户一个问题,我宁愿使用 dispatcher.utter_messageutter_template 向用户发送消息。 如果你想在你的核心命令行界面上为在动作服务器上执行的动作提供良好的交互式提示,你可能必须实现一个 custom channel,它可以相应地处理和格式化机器人答案。