chatbot #4

Merged
s464951 merged 11 commits from nlu-model into master 2024-06-14 11:55:59 +02:00
3 changed files with 36 additions and 54 deletions
Showing only changes of commit 8f85af7f7f - Show all commits

View File

@ -1,27 +1,33 @@
{ {
"name_response": [ "inform": {
"Witaj, nazywam się Dia.", "item": "Nasz sklep oferuje szeroki wybór artykułów, takich jak\n artykuły spożywcze,\n ogrodowe\n oraz kosmetyki. Proszę podaj produkt.",
"Cześć! Jestem Dia.", "address": "Nasz sklep nie ma fizycznego adresu. To sklep internetowy.",
"Hej, jestem Dia.", "delivery_method": "Dostępne formy dostawy: INPOST, DPD, DHL.",
"Witaj! Nazywam się Dia.", "payment_method": "Dostępne formy płatności: Karta, przy odbiorze",
"Cześć, jestem Dia.", "email": "Obsługa klienta: cs2137@gmail.com",
"Hej! Jestem Dia.", "card_nr": [
"Jestem Dia. Miło mi Cię poznać.", "Dzięki karcie rabatowej zbierasz punkty, które poźniej przekładają się na rabat.",
"Witaj, jestem chatbot Dia." "Dzisiaj z kartą rabatową meble ogrodowe 200zł taniej!",
], "Dzisiaj z kartą rabatową szampony 2 w cenie 1!"
"unknown": [ ]
},
"canthelp": {
"unknown": [
"Przepraszam, nie rozumiem. Możesz to powtórzyć?", "Przepraszam, nie rozumiem. Możesz to powtórzyć?",
"Nie jestem pewien, co masz na myśli. Czy możesz to wyjaśnić?", "Nie jestem pewien, co masz na myśli. Czy możesz to wyjaśnić?",
"Nie rozumiem. Możesz to powtórzyć?", "Nie rozumiem. Możesz to powtórzyć?",
"Nie jestem pewien, co masz na myśli. Możesz to wyjaśnić?", "Nie jestem pewien, co masz na myśli. Możesz to wyjaśnić?",
"Nie jestem pewien, co masz na myśli. Czy możesz to wyjaśnić?" "Nie jestem pewien, co masz na myśli. Czy możesz to wyjaśnić?"
], ]
"repeat": [ },
"Wygląda na to, że krążymy wokół tego samego tematu. Czy możemy przejść do czegoś innego?", "request": {
"Znowu to samo pytanie, może zmienimy temat?", "card_nr": "Podaj proszę numer karty rabatowej",
"Ponownie pytasz o to samo, czy jest coś innego, o co chciałbyś zapytać?" "address": "Podaj proszę adres do wysyłki",
], "item": "Jaki produkt chcesz kupić?",
"give_price": [ "email": "Podaj proszę email.",
"Cena to 20zl" "delivery_method": "Jaką formą dostawy jesteś zainteresowany?",
] "payment_method": "Jaką formą płatności jesteś zainteresowany?"
},
"bye": "Miłego dnia!",
"confirmation": "Zamówienie zostało złożone!"
} }

View File

@ -19,7 +19,7 @@ def main():
nlu = NLU() nlu = NLU()
dst = DialogStateMonitor() dst = DialogStateMonitor()
dp = DialoguePolicy() dp = DialoguePolicy()
generator = ResponseGenerator() generator = ResponseGenerator(config)
print(Fore.CYAN + "Witaj w chatbocie! Rozpocznij rozmowę.") print(Fore.CYAN + "Witaj w chatbocie! Rozpocznij rozmowę.")
print(Fore.YELLOW + "Wpisz 'quit' aby zakończyć program.\n") print(Fore.YELLOW + "Wpisz 'quit' aby zakończyć program.\n")

View File

@ -7,42 +7,18 @@ import random
class ResponseGenerator: class ResponseGenerator:
def __init__(self, config: Config): def __init__(self, config: Config):
with config.responses_path.open('r', encoding='utf-8') as file: with config.responses_path.open('r', encoding='utf-8') as file:
self.responses: Dict[str, list] = json.load(file) self.responses: Dict[str, dict] = json.load(file)
def nlg(self, system_act): def nlg(self, system_act):
intent = system_act.intent intent = system_act.intent
slot = system_act.slots[0].name if system_act.slots else None slot = system_act.slots[0].name if system_act.slots else None
responses = { intent_responses = self.responses.get(intent, {})
"inform": { slot_responses = intent_responses.get(slot)
"item": "Nasz sklep oferuje szeroki wybór artykułów, takich jak\n artykuły spożywcze,\n ogrodowe\n oraz kosmetyki. Proszę podaj produkt.",
"address": "Nasz sklep nie ma fizycznego adresu. To sklep internetowy.",
"delivery_method": "Dostępne formy dostawy: INPOST, DPD, DHL.",
"payment_method": "Dostępne formy płatności: Karta, przy odbiorze",
"email": "Obsługa klienta: cs2137@gmail.com",
"card_nr": random.choice([
"Dzięki karcie rabatowej zbierasz punkty, które poźniej przekładają się na rabat.",
"Dzisiaj z kartą rabatową meble ogrodowe 200zł taniej!",
"Dzisiaj z kartą rabatową szampony 2 w cenie 1!"
])
},
"canthelp": {
"unknown": random.choice([
"Przepraszam, nie rozumiem polecenia...",
"Możesz powtórzyć?",
"Powiedz proszę jeszcze raz.."
])
},
"request": {
"card_nr": "Podaj proszę numer karty rabatowej",
"address": "Podaj proszę adres do wysyłki",
"item": "Jaki produkt chcesz kupić?",
"email": "Podaj proszę email.",
"delivery_method": "Jaką formą dostawy jesteś zainteresowany?",
"payment_method": "Jaką formą płatności jesteś zainteresowany?"
},
"bye": "Miłego dnia!",
"confirmation": "Zamówienie zostało złożone!"
}
return responses.get(intent, {}).get(slot, "Nieznane zapytanie.") if isinstance(slot_responses, list):
return random.choice(slot_responses)
elif isinstance(slot_responses, str):
return slot_responses
else:
return "Nieznane zapytanie."