ComenzarEmpieza gratis

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 params con las entidades que haya especificado el usuario.
  • Una lista prev_suggestions. Al pasarla a respond(), debe contener las sugerencias del mensaje anterior del bot. Al devolverla respond(), 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

Ver curso

Instrucciones del ejercicio

  • Define una función respond() con 4 argumentos: message, params, prev_suggestions y excluded.
  • Interpreta el message y guarda el resultado en parse_data.
  • El valor de la clave "intent" de parse_data es a su vez un diccionario de pares clave-valor. Asigna parse_data["intent"]["name"] a intent, y parse_data["entities"] a entities.
  • Si el intent es "deny", usa el método .extend() de la lista excluded para añadir prev_suggestions.
  • Inicializa el diccionario vacío params y las listas vacías suggestions y excluded. 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))
Editar y ejecutar código