我正在使用来自Tom_Bocklisch的问题模块,该模块是在我的动作服务器中作为一个动作的一部分而建立的,该模块是基于hint_toolkit构建的。我的环境受到了docker化,即我正在为NLU,Core和core_sdk使用单独的容器。
当我将基本代码作为来自rasa_core的独立脚本运行时,以下代码可以完美地工作。但是,当我将它作为运行在运行core_sdk的动作服务器中的动作时,它会失败。
def运行(自身,调度程序,跟踪程序,域): 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应用进行交互有关,但是我不确定如何处理。任何帮助将不胜感激。
谢谢
答案 0 :(得分:0)
您尝试执行的操作无效。
由于动作服务器是单独的服务器,因此它无法访问用于与Rasa Core进行交互的命令行界面。动作服务器使用HTTP请求与Rasa Core进行通信。因此,如果您的动作服务器执行qs.prompt(questions)
,则它无法附加到命令行,因为它完全独立于Rasa Core命令行界面。
如果您想问用户一个问题,我宁愿使用dispatcher.utter_message
或utter_template
向用户发送消息。
如果您希望在Core命令行界面上有不错的交互式提示,以提示在操作服务器上执行的操作,则可能必须实现custom channel,它可以相应地处理和格式化漫游器答案。