gpt4 book ai didi

python - 在生成引出槽响应时遇到问题

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:39 24 4
gpt4 key购买 nike

我想为某个插槽创建一个 dialogHook 而不是更好地说验证类型的东西。如果插槽返回 true 那么只有我会触发我的引出插槽否则它会照常运行。请帮助我的方法是什么.我对 lex 比较陌生。

我试图在 childExists 上创建一个对话框,但它不起作用。

def lambda_handler(event,context):
os.environ['TZ']='America/New_York'
time.tzset();
logger.debug('event.bot.name={}'.format(event['bot']['name']))
return dispatch(event);

def dispatch(intent_request):
intent_name=intent_request['currentIntent']['name']
if intent_name=='HotelReservation':
return book_hotel(intent_request)

def book_hotel(intent_request):
slots=intent_request['currentIntent']['slots']
welcome=intent_request['currentIntent']['slots']['welcome']
location=intent_request['currentIntent']['slots']['Location']
fromDate=intent_request['currentIntent']['slots']['FromDate']
adultCount=intent_request['currentIntent']['slots']['adultCount']
nights=intent_request['currentIntent']['slots']['nights']
childExists=intent_request['currentIntent']['slots']['childExists']
source=intent_request['invocationSource']
session_attributes={}
if source=='DialogCodeHook'and childExists.lower()=='yes':
session_attributes={}
return elicit_slot (
session_attributes,
'HotelReservation',
'childCount',
'AMAZON.NUMBER',
{
'contentType':'PlainText',
'content':'Please enter number of Children'
}
)
elif source=='DialogCodeHook':
output_session_attributes = intent_request['sessionAttributes'] if intent_request['sessionAttributes'] is not None else {}
return delegate(output_session_attributes, intent_request['currentIntent']['slots'])
else:

return close (
session_attributes,
'Fulfilled',{
'contentType':'PlainText',
'content':'Here is the temparature in'
}
)


#for fullfillment function
def close(session_attributes,fulfillment_state,message):
response={
'sessionAttributes':session_attributes,
'dialogAction':{
'type':'Close',
'fulfillmentState':fulfillment_state,
'message':message
}
}
return response
#for elicit slot return
def elicit_slot(session_attributes, intent_name,slots,slot_to_elicit,message):
response= {
'sessionAttributes': session_attributes,
'dialogAction': {
'type': 'ElicitSlot',
'intentName': intent_name,
'slots': slots,
'slotToElicit': slot_to_elicit,
'message': message
}
}
return response;
def delegate(session_attributes, slots):
return {
'sessionAttributes': session_attributes,
'dialogAction': {
'type': 'Delegate',
'slots': slots
}
}

实际上我的插槽应该像往常一样运行但是在 childExists 插槽之后我想发送一个 elicit 的响应 This is the image of the slots available

最佳答案

根据我的理解,您是在询问用户Do you have any children 并将响应存储在childExists 槽中,如果答案是yes 那么你要问 child 的数量。

所以根据我的说法,你需要有一个额外的插槽 childCount 来存储 child 的数量。由于并不总是需要此插槽,因此请在 amazon lex 控制台中不要将此标记为必需

现在,您将在您的 DialogCodeHook 中检查它,并仅在 childExists == 'yes' 并且 childCount 中没有值时才相应地询问用户。我们使用这些条件的组合是为了确保它不会无限期地运行。

def book_hotel(intent_request):
slots = intent_request['currentIntent']['slots']
welcome = slots['welcome']
location = slots['Location']
fromDate = slots['FromDate']
adultCount = slots['adultCount']
nights = slots['nights']
childExists = slots['childExists']
childCount = slots['childCount']
source = intent_request['invocationSource']
if source == 'DialogCodeHook':
output_session_attributes = intent_request['sessionAttributes'] if intent_request['sessionAttributes'] is not None else {}
if childExists.lower() == 'yes':
if not childCount:
return elicit_slot (
output_session_attributes,
'HotelReservation',
slots,
'childCount',
{
'contentType':'PlainText',
'content':'Please enter number of Children'
}
)
return delegate(output_session_attributes, intent_request['currentIntent']['slots'])

if source == 'FulfillmentCodeHook':
return close (
output_session_attributes,
'Fulfilled',{
'contentType':'PlainText',
'content':'Here is the temparature in'
}
)

希望对您有所帮助。

关于python - 在生成引出槽响应时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55598666/

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