gpt4 book ai didi

node.js - Lambda 响应发送回 Lex 槽?

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:25 25 4
gpt4 key购买 nike

我已经编写了 5-6 个槽,并具有调用第三方天气 api 的 lambda 函数,并且我正在从 api 获取响应。现在我如何处理该响应并将其与响应一起发送回 lex 插槽。

例如:在 Lex 中,插槽国家/地区 I 输入 India,然后城市 I 输入 Hyderabad。这里我调用 lambda 函数,并希望响应应包含温度详细信息位于 lex 插槽中。

我正在使用 Lex 控制台和 Lambda用作内联代码编辑器。

最佳答案

我将占用 2 个插槽,并在代码 (python) 中处理空插槽。

因此,首先您必须在意图中定义 2 个插槽 citycountry,机器人将检查 DialogCodeHook 中是否填充了插槽值,如果验证成功,它将调用 FulfillmentCodeHook 来调用天气 api,将结果返回给用户。

注意:您必须检查初始化和验证代码 Hook ,以便它将转到DialogCodeHook

def build_response(message):
return {
"dialogAction":{
"type":"Close",
"fulfillmentState":"Fulfilled",
"message":{
"contentType":"PlainText",
"content":message
}
}
}

def elicit_slot(intent_name, slots, slot_to_elicit, message):
return {
'dialogAction': {
'type': 'ElicitSlot',
'intentName': intent_name,
'slots': slots,
'slotToElicit': slot_to_elicit,
'message': message
}
}

def delegate(session_attributes, slots):
return {
'sessionAttributes': session_attributes,
'dialogAction': {
'type': 'Delegate',
'slots': slots
}
}

def perform_action(intent_request):
source = intent_request['invocationSource'] # DialogCodeHook or FulfillmentCodeHook
slots = intent_request['currentIntent']['slots'] # your slots city and country
if source == 'DialogCodeHook':
# Perform basic validation on the supplied input slots.
if slots['city'] is None: # or any other validation that you want to perform
return elicit_slot(
intent_request['currentIntent']['name'], # current intent name
slots, # current intent slots
'city', # slot name
'Please enter city name' # prompt the user to enter city name
)
if slots['country'] is None:
return elicit_slot(
intent_request['currentIntent']['name'], # current intent name
slots, # current intent slots
'country', # slot name
'Please enter country name' # prompt the user to enter country name
)
# delegate means all slot validation are done, we can move to Fulfillment
return delegate(output_session_attributes, slots)
if source == 'FulfillmentCodeHook':
result = your_api_call(slots['city'], slots['country'])
return build_response(result) # display the response back to user

def dispatch(intent_request):
intent_name = intent_request['currentIntent']['name']
# Dispatch to your bot's intent handlers
if intent_name == 'GetWeather':
return perform_action(intent_request)
raise Exception('Intent with name ' + intent_name + ' not supported')

def lambda_handler(event, context):
logger.debug(event)
return dispatch(event)

希望有帮助。

关于node.js - Lambda 响应发送回 Lex 槽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49676394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com