Začněte nyníZačněte zdarma

Jak reagovat na odmítnutí

Co se stane, když uživateli něco nabídneš a on to odmítne? Bot by vypadal dost neohrabaně, kdyby hned vzápětí navrhl to samé znovu.

Tady upravíš svou funkci respond() tak, aby přijímala a vracela 4 argumenty:

  • Zprávu uživatele jako argument a odpověď bota jako první návratovou hodnotu.
  • Slovník params s entitami, které uživatel zadal.
  • Seznam prev_suggestions. Při předání funkci respond() obsahuje návrhy z předchozí zprávy bota. Při vrácení funkcí respond() obsahuje aktuální návrhy.
  • Seznam excluded se všemi výsledky, které uživatel explicitně odmítl.

Funkce by měla přidat předchozí návrhy do seznamu vyloučených vždy, když rozpozná záměr "deny". Zároveň by měla vyloučené návrhy filtrovat z odpovědi.

Toto cvičení je součástí kurzu

Building Chatbots in Python

Zobrazit kurz

Pokyny k cvičení

  • Definuj funkci respond() se 4 argumenty: message, params, prev_suggestions a excluded.
  • Interpretuj zprávu message a výsledek ulož do parse_data.
  • Hodnota klíče "intent" v parse_data je sama o sobě slovník dvojic klíč–hodnota. Přiřaď parse_data["intent"]["name"] do proměnné intent a parse_data["entities"] do proměnné entities.
  • Pokud je intent roven "deny", použij metodu .extend() seznamu excluded a přidej do něj prev_suggestions.
  • Inicializuj prázdný slovník params a prázdné seznamy suggestions a excluded. Pak klikni na Odeslat odpověď a pošli zprávy botovi.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

# 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))
Upravit a spustit kód