Gestionar el rechazo
¿Qué pasa si haces una sugerencia al usuario y no le gusta? Tu bot quedará fatal si repite la misma sugerencia inmediatamente.
Aquí vas a modificar tu función respond() para que acepte y devuelva 4 argumentos:
- El mensaje del usuario como argumento, y la respuesta del bot como primer valor de retorno.
- Un diccionario
paramscon las entidades que haya especificado el usuario. - Una lista
prev_suggestions. Al pasarla arespond(), debe contener las sugerencias del mensaje anterior del bot. Al devolverlarespond(), debe contener las sugerencias actuales. - Una lista
excluded, que incluye todos los resultados que tu usuario ya haya rechazado explícitamente.
Tu función debe añadir las sugerencias anteriores a la lista de excluidos cuando reciba un intent "deny". También debe filtrar de la respuesta las sugerencias excluidas.
Este ejercicio forma parte del curso
Creación de chatbots en Python
Instrucciones del ejercicio
- Define una función
respond()con 4 argumentos:message,params,prev_suggestionsyexcluded. - Interpreta el
messagey guarda el resultado enparse_data. - El valor de la clave
"intent"deparse_dataes a su vez un diccionario de pares clave-valor. Asignaparse_data["intent"]["name"]aintent, yparse_data["entities"]aentities. - Si el
intentes"deny", usa el método.extend()de la listaexcludedpara añadirprev_suggestions. - Inicializa el diccionario vacío
paramsy las listas vacíassuggestionsyexcluded. Luego, pulsa "Enviar respuesta" para enviar los mensajes al bot.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# Define respond()
def ____:
# Interpret the message
parse_data = ____
# Extract the intent
intent = ____
# Extract the entities
entities = ____
# Add the suggestion to the excluded list if intent is "deny"
if ____ == "____":
____
# Fill the dictionary with entities
for ent in entities:
params[ent["entity"]] = str(ent["value"])
# Find matching hotels
results = [
r
for r in find_hotels(params, excluded)
if r[0] not in excluded
]
# Extract the suggestions
names = [r[0] for r in results]
n = min(len(results), 3)
suggestions = names[:2]
return responses[n].format(*names), params, suggestions, excluded
# Initialize the empty dictionary and lists
params, suggestions, excluded = {}, [], []
# Send the messages
for message in ["I want a mid range hotel", "no that doesn't work for me"]:
print("USER: {}".format(message))
response, params, suggestions, excluded = respond(message, params, suggestions, excluded)
print("BOT: {}".format(response))