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

Přechody ve stavu čekání

Někdy je potřeba dočasně odbočit od hlavního tématu konverzace – například ověřit totožnost uživatele – a pak se k němu zase vrátit.

V takových případech bývá jednodušší (a snáze laditelné) uložit některé akce nebo stavy jako čekající (pending), místo aby ses pouštěl/a do stále složitějších pravidel.

Tady nadefinuješ slovník policy_rules, jehož klíče jsou n-tice aktuálního stavu a přijatého záměru a hodnoty jsou n-tice dalšího stavu, odpovědi bota a stavu, pro který se má nastavit čekající přechod.

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

Building Chatbots in Python

Zobrazit kurz

Pokyny k cvičení

  • Doplň slovník policy_rules tak, že vyplníš hodnoty:
    • Uživatel začíná ve stavu INIT.
    • Pokud je uživatel ve stavu INIT a pokusí se zadat objednávku, požádej ho o číslo a vytvoř čekající přechod do stavu AUTHED.
    • Toto je jediné pravidlo, které vytváří čekající přechod – ostatní pravidla mají hodnotu čekajícího stavu jednoduše None.
  • Stav pending byl přidán jako druhý argument funkce send_message(), která teď vrací nový stav i čekající stav. Zavolej tuto funkci send_message() uvnitř send_messages() a rozbal výstup do proměnných state a pending.
  • Klikni na Submit Answer 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 the states
INIT=0
AUTHED=1
CHOOSE_COFFEE=2
ORDERED=3

# Define the policy rules
policy_rules = {
    (INIT, "order"): (____, "you'll have to log in first, what's your phone number?", ____),
    (INIT, "number"): (____, "perfect, welcome back!", None),
    (AUTHED, "order"): (____, "would you like Colombian or Kenyan?", None),    
    (CHOOSE_COFFEE, "specify_coffee"): (____, "perfect, the beans are on their way!", None)
}

# Define send_messages()
def send_messages(messages):
    state = INIT
    pending = None
    for msg in messages:
        state, pending = ____(____, ____, ____)

# Send the messages
send_messages([
    "I'd like to order some coffee",
    "555-1234",
    "kenyan"
])
Upravit a spustit kód