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
Pokyny k cvičení
- Doplň slovník
policy_rulestak, že vyplníš hodnoty:- Uživatel začíná ve stavu
INIT. - Pokud je uživatel ve stavu
INITa pokusí se zadat objednávku, požádej ho o číslo a vytvoř čekající přechod do stavuAUTHED. - Toto je jediné pravidlo, které vytváří čekající přechod – ostatní pravidla mají hodnotu čekajícího stavu jednoduše
None.
- Uživatel začíná ve stavu
- Stav
pendingbyl přidán jako druhý argument funkcesend_message(), která teď vrací nový stav i čekající stav. Zavolej tuto funkcisend_message()uvnitřsend_messages()a rozbal výstup do proměnnýchstateapending. - 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"
])