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
paramss entitami, které uživatel zadal. - Seznam
prev_suggestions. Při předání funkcirespond()obsahuje návrhy z předchozí zprávy bota. Při vrácení funkcírespond()obsahuje aktuální návrhy. - Seznam
excludedse 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
Pokyny k cvičení
- Definuj funkci
respond()se 4 argumenty:message,params,prev_suggestionsaexcluded. - Interpretuj zprávu
messagea výsledek ulož doparse_data. - Hodnota klíče
"intent"vparse_dataje sama o sobě slovník dvojic klíč–hodnota. Přiřaďparse_data["intent"]["name"]do proměnnéintentaparse_data["entities"]do proměnnéentities. - Pokud je
intentroven"deny", použij metodu.extend()seznamuexcludeda přidej do nějprev_suggestions. - Inicializuj prázdný slovník
paramsa prázdné seznamysuggestionsaexcluded. 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))