diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..cf6271614ba25a5deeac996974dfce6a3b3d7d8e --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/venv +command.txt +.vscode +.rasa +*/models \ No newline at end of file diff --git a/actions/__init__.py b/actions/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/actions/__pycache__/__init__.cpython-310.pyc b/actions/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b46dd753d87db8fe7a4811f7d03ba20ad2d0b785 Binary files /dev/null and b/actions/__pycache__/__init__.cpython-310.pyc differ diff --git a/actions/__pycache__/actions.cpython-310.pyc b/actions/__pycache__/actions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9ce39a6d0ada2182ecddbd9e534e516856060dd Binary files /dev/null and b/actions/__pycache__/actions.cpython-310.pyc differ diff --git a/actions/actions.py b/actions/actions.py new file mode 100644 index 0000000000000000000000000000000000000000..59d375a884a4331b34315ea0dd450fb89f7d756d --- /dev/null +++ b/actions/actions.py @@ -0,0 +1,219 @@ +from typing import Any, Text, Dict, List +from rasa_sdk import Action, Tracker +from rasa_sdk.executor import CollectingDispatcher +from rasa_sdk.events import SlotSet +import requests + +API_KEY = "9e7b704d5e4076508535d9ed2519e59b" +BASE_URL = "https://api.themoviedb.org/3" + +# Dynamische Filmempfehlung +class ActionFilmEmpfehlen(Action): + def name(self): + return "action_film_empfehlen" + + def run(self, dispatcher, tracker, domain): + url = f"{BASE_URL}/movie/popular?api_key={API_KEY}" + + response = requests.get(url) + if response.status_code == 200: + filme = response.json().get("results", [])[:3] + if filme: + message = "Hier sind einige Filme, die ich empfehlen kann:\n" + for film in filme: + message += f"- {film['title']} (Bewertung: {film['vote_average']})\n" + else: + message = "Ich konnte keine passenden Filme finden." + else: + message = "Es gab ein Problem mit der Verbindung zur TMDb-API." + + dispatcher.utter_message(text=message) + return [] + +# Dynamische Serienempfehlung +class ActionSerieEmpfehlen(Action): + def name(self): + return "action_serie_empfehlen" + + def run(self, dispatcher, tracker, domain): + url = f"{BASE_URL}/tv/popular?api_key={API_KEY}" + + response = requests.get(url) + if response.status_code == 200: + serien = response.json().get("results", [])[:3] + if serien: + message = "Hier sind einige Serien, die ich empfehlen kann:\n" + for serie in serien: + message += f"- {serie['name']} (Bewertung: {serie['vote_average']})\n" + else: + message = "Ich konnte keine passenden Serien finden." + else: + message = "Es gab ein Problem mit der Verbindung zur TMDb-API." + + dispatcher.utter_message(text=message) + return [] + +# Filme oder Serien nach Genre +class ActionEmpfehlungNachGenre(Action): + def name(self): + return "action_empfehlung_nach_genre" + + def run(self, dispatcher, tracker, domain): + genre = tracker.get_slot("film_genre") or tracker.get_slot("serie_genre") + if not genre: + dispatcher.utter_message(text="Bitte nenne mir ein Genre.") + return [] + + genre_mapping = {"action": 28, "comedy": 35, "drama": 18} + genre_id = genre_mapping.get(genre.lower()) + if not genre_id: + dispatcher.utter_message(text=f"Das Genre '{genre}' kenne ich nicht.") + return [] + + url = f"{BASE_URL}/discover/movie?api_key={API_KEY}&with_genres={genre_id}" + response = requests.get(url) + if response.status_code == 200: + filme = response.json().get("results", [])[:3] + if filme: + message = f"Hier sind einige {genre}-Filme, die ich empfehlen kann:\n" + for film in filme: + message += f"- {film['title']} (Bewertung: {film['vote_average']})\n" + else: + message = f"Ich konnte keine passenden {genre}-Filme finden." + else: + message = "Es gab ein Problem mit der Verbindung zur TMDb-API." + + dispatcher.utter_message(text=message) + return [] + +# Empfehlungen nach Streamingdienst +class ActionEmpfehlungNachStreamingdienst(Action): + def name(self): + return "action_empfehlung_nach_streamingdienst" + + def run(self, dispatcher, tracker, domain): + streamingdienst = tracker.get_slot("streamingdienst") + if not streamingdienst: + dispatcher.utter_message(text="Bitte nenne mir einen Streamingdienst.") + return [] + + provider_mapping = {"netflix": 8, "prime": 9, "disney+": 337} + provider_id = provider_mapping.get(streamingdienst.lower()) + if not provider_id: + dispatcher.utter_message(text=f"Ich kenne den Streamingdienst '{streamingdienst}' nicht.") + return [] + + url = f"{BASE_URL}/discover/movie?api_key={API_KEY}&with_watch_providers={provider_id}&watch_region=DE" + response = requests.get(url) + if response.status_code == 200: + filme = response.json().get("results", [])[:3] + if filme: + message = f"Hier sind Filme auf {streamingdienst}:\n" + for film in filme: + message += f"- {film['title']} (Bewertung: {film['vote_average']})\n" + else: + message = f"Ich konnte keine passenden Filme auf {streamingdienst} finden." + else: + message = "Es gab ein Problem mit der Verbindung zur TMDb-API." + + dispatcher.utter_message(text=message) + return [] + +# Details zu einem Film +class ActionFilmDetails(Action): + def name(self): + return "action_film_details" + + def run(self, dispatcher, tracker, domain): + film_name = tracker.get_slot("film_name") + if not film_name: + dispatcher.utter_message(text="Bitte nenne mir den Namen des Films.") + return [] + + search_url = f"{BASE_URL}/search/movie?api_key={API_KEY}&query={film_name}" + search_response = requests.get(search_url) + if search_response.status_code == 200: + results = search_response.json().get("results", []) + if results: + film = results[0] + message = f"Hier sind Details zu '{film['title']}':\n" + message += f"- Erscheinungsdatum: {film['release_date']}\n" + message += f"- Bewertung: {film['vote_average']}\n" + message += f"- Beschreibung: {film['overview']}" + else: + message = f"Ich konnte keinen Film mit dem Namen '{film_name}' finden." + else: + message = "Es gab ein Problem mit der Verbindung zur TMDb-API." + + dispatcher.utter_message(text=message) + return [] + +# Beliebte Inhalte (Filme und Serien) +class ActionWasIstBeliebt(Action): + def name(self): + return "action_was_ist_beliebt" + + def run(self, dispatcher, tracker, domain): + url = f"{BASE_URL}/trending/movie/day?api_key={API_KEY}" + response = requests.get(url) + if response.status_code == 200: + filme = response.json().get("results", [])[:3] + if filme: + message = "Hier sind die aktuell beliebtesten Filme:\n" + for film in filme: + message += f"- {film['title']} (Bewertung: {film['vote_average']})\n" + else: + message = "Ich konnte keine beliebten Filme finden." + else: + message = "Es gab ein Problem mit der Verbindung zur TMDb-API." + + dispatcher.utter_message(text=message) + return [] + +# Filmklassiker empfehlen +class ActionFilmklassikerEmpfehlen(Action): + def name(self): + return "action_filmklassiker_empfehlen" + + def run(self, dispatcher, tracker, domain): + # Filme mit hohem Rating und älterem Veröffentlichungsdatum + url = f"{BASE_URL}/discover/movie?api_key={API_KEY}&sort_by=vote_average.desc&vote_count.gte=1000&release_date.lte=2000-01-01" + + response = requests.get(url) + if response.status_code == 200: + filme = response.json().get("results", [])[:3] + if filme: + message = "Hier sind einige zeitlose Filmklassiker:\n" + for film in filme: + message += f"- {film['title']} (Bewertung: {film['vote_average']}, Erscheinungsdatum: {film['release_date']})\n" + else: + message = "Ich konnte keine passenden Klassiker finden." + else: + message = "Es gab ein Problem mit der Verbindung zur TMDb-API." + + dispatcher.utter_message(text=message) + return [] + +# Aktuelle Kinohits anzeigen +class ActionAktuelleKinohits(Action): + def name(self): + return "action_aktuelle_kinohits" + + def run(self, dispatcher, tracker, domain): + # Filme, die aktuell in den Kinos laufen + url = f"{BASE_URL}/movie/now_playing?api_key={API_KEY}®ion=DE" + + response = requests.get(url) + if response.status_code == 200: + filme = response.json().get("results", [])[:3] + if filme: + message = "Hier sind einige aktuelle Kinohits:\n" + for film in filme: + message += f"- {film['title']} (Bewertung: {film['vote_average']}, Erscheinungsdatum: {film['release_date']})\n" + else: + message = "Ich konnte keine aktuellen Kinohits finden." + else: + message = "Es gab ein Problem mit der Verbindung zur TMDb-API." + + dispatcher.utter_message(text=message) + return [] diff --git a/config.yml b/config.yml new file mode 100644 index 0000000000000000000000000000000000000000..a21a9ee711e67cacc55101dc7d2c3fe81d926bd2 --- /dev/null +++ b/config.yml @@ -0,0 +1,50 @@ +# The config recipe. +# https://rasa.com/docs/rasa/model-configuration/ +recipe: default.v1 + +# The assistant project unique identifier +# This default value must be replaced with a unique assistant name within your deployment +assistant_id: 20241127-202549-narrow-border + +# Configuration for Rasa NLU. +# https://rasa.com/docs/rasa/nlu/components/ +language: en + +pipeline: null +# # No configuration for the NLU pipeline was provided. The following default pipeline was used to train your model. +# # If you'd like to customize it, uncomment and adjust the pipeline. +# # See https://rasa.com/docs/rasa/tuning-your-model for more information. +# - name: WhitespaceTokenizer +# - name: RegexFeaturizer +# - name: LexicalSyntacticFeaturizer +# - name: CountVectorsFeaturizer +# - name: CountVectorsFeaturizer +# analyzer: char_wb +# min_ngram: 1 +# max_ngram: 4 +# - name: DIETClassifier +# epochs: 100 +# constrain_similarities: true +# - name: EntitySynonymMapper +# - name: ResponseSelector +# epochs: 100 +# constrain_similarities: true +# - name: FallbackClassifier +# threshold: 0.3 +# ambiguity_threshold: 0.1 + +# Configuration for Rasa Core. +# https://rasa.com/docs/rasa/core/policies/ +policies: null +# # No configuration for policies was provided. The following default policies were used to train your model. +# # If you'd like to customize them, uncomment and adjust the policies. +# # See https://rasa.com/docs/rasa/policies for more information. +# - name: MemoizationPolicy +# - name: RulePolicy +# - name: UnexpecTEDIntentPolicy +# max_history: 5 +# epochs: 100 +# - name: TEDPolicy +# max_history: 5 +# epochs: 100 +# constrain_similarities: true diff --git a/credentials.yml b/credentials.yml new file mode 100644 index 0000000000000000000000000000000000000000..e9f12911e3cfdcd0da1da4e10efdcd3a4f9aaae5 --- /dev/null +++ b/credentials.yml @@ -0,0 +1,33 @@ +# This file contains the credentials for the voice & chat platforms +# which your bot is using. +# https://rasa.com/docs/rasa/messaging-and-voice-channels + +rest: +# # you don't need to provide anything here - this channel doesn't +# # require any credentials + + +#facebook: +# verify: "<verify>" +# secret: "<your secret>" +# page-access-token: "<your page access token>" + +#slack: +# slack_token: "<your slack token>" +# slack_channel: "<the slack channel>" +# slack_signing_secret: "<your slack signing secret>" + +#socketio: +# user_message_evt: <event name for user message> +# bot_message_evt: <event name for bot messages> +# session_persistence: <true/false> + +#mattermost: +# url: "https://<mattermost instance>/api/v4" +# token: "<bot token>" +# webhook_url: "<callback URL>" + +# This entry is needed if you are using Rasa Enterprise. The entry represents credentials +# for the Rasa Enterprise "channel", i.e. Talk to your bot and Share with guest testers. +rasa: + url: "http://localhost:5002/api" diff --git a/data/nlu/nlu_basics.yml b/data/nlu/nlu_basics.yml new file mode 100644 index 0000000000000000000000000000000000000000..e17b815ddab537fd55953137278ae98f01c0f5ab --- /dev/null +++ b/data/nlu/nlu_basics.yml @@ -0,0 +1,603 @@ +version: "3.1" + +nlu: +- intent: begrüßung + examples: | + - hey + - hallo + - hi + - Hallo + - Guten Morgen + - guten morgen + - guten abend + - Guten Abend + - moin + - Moin + - was geht? + - huhu + - Huhu + - Hey + - Hi + - Na + - na + - Servus + - Grüß dich + - Grüß Gott + - Grüezi + - Na, alles klar? + - Hi, wie geht's? + - Hallo zusammen + - Hallöchen + - Heyho + - Heyy + - Hiho + +- intent: verabschiedung + examples: | + - ciao + - Ciao + - tschüss + - Bis später + - Gute Nacht + - Tschüss + - Tschau + - Man sieht sich + - Auf Wiedersehen + - bye + - Bis bald + - Mach's gut + - Adieu + - Tschö + - See you + - Bis demnächst + - Bis dann + - Wir sehen uns + - Pass auf dich auf + - Schönen Abend + - Schönen Tag noch + - Tschüssi + - Hau rein + - Bis die Tage + - Viel Spaß noch + +- intent: zustimmung + examples: | + - ja + - j + - stimmt + - natürlich + - klingt gut + - korrekt + - jup + - yeah + - sicher + - finde ich auch + - exakt + - richtig + - absolut + - definitiv + - total + - präzise + - offensichtlich + - positiv + - ich stimme dir zu + - stimme ich dir zu + - aber sicher doch + - klar + - klaro + - keine zweifel + - das stimmt + - das ist korrekt + - klingt gut + - ohne zweifel + - du hast es verstanden + - ja bitte + - genau + - auf jeden Fall + - alles klar + - einverstanden + - absolut richtig + - völlig korrekt + - das passt + - genau so ist es + - sicher doch + - ja klar + - logisch + - gewiss + - das sehe ich auch so + - ganz genau + - unbestritten + - richtig so + - selbstverständlich + - zweifelsohne + - ich sehe das genauso + - na klar + - ja sicher + - stimmt genau + - alles in Ordnung + - jawohl + - definitiv ja + + +- intent: ablehnung + examples: | + - Ne + - ne + - nein + - niemals + - nie + - ich denke nicht + - auf keinen Fall + - aufkeinenfall + - never + - finde ich nicht gut + - gefällt mir nicht + - nicht wirklich + - nah + - falsch + - nope + - keine Chance + - negativ + - finde ich nicht so + - definitiv nein + - definitiv nicht + - ich stimme dir nicht zu + - dabei stimme ich dir nicht zu + - glaub nicht + - absolut nicht + - leider nein + - leider nicht + - nicht korrekt + - auf gar keinen Fall + - das passt nicht + - auf keinen Fall! + - keineswegs + - kommt nicht in Frage + - ich sehe das anders + - ich finde das falsch + - überhaupt nicht + - nein danke + - nein, das glaube ich nicht + - sicher nicht + - nicht so + - so sehe ich das nicht + - nein, auf keinen Fall + - negativ, absolut nicht + - niemals im Leben + - das halte ich für falsch + - nein, ganz und gar nicht + - das finde ich nicht gut + - in keinem Fall + - auf keinen Fall möglich + - absolut nicht richtig + - nein, niemals + - nein, das ist falsch + + +- intent: gute_stimmung + examples: | + - perfekt + - großartig + - hammer + - mega + - wunderbar + - Ich fühle mich sehr gut + - Mir gehts es super + - ich bin der hammer + - ich bin super + - erstaunlich + - extrem gut + - so gut + - zu gut + - unglaublich + - Mir geht es gut + - Ich fühl mich gut + - ich bin glücklich + - ich bin gesegnet + - alles gut + - alles ist gut + - heute ist ein guter Tag + - dieser Morgen ist gut + - Dieser Tag ist gut + - Dieser Abend ist gut + - Das Leben ist schön + - Ich könnte nich glücklicher sein + - ich bin so glücklich heute + - ich schwebe über den Wolken + - glücklich + - Ich fühle mich super + - Ich fühle mich klasse + - klasse + - Ich fühl mich ganz ok + - mir geht es ganz ok + +- intent: schlechte_stimmung + examples: | + - mein Tag war schrecklich + - Ich bin traurig + - Ich fühl mich nicht gut + - Ich bin so enttäuscht + - so traurig + - Ich bin so traurig + - schlimm + - traurig + - sehr traurig + - unglücklich + - nicht so gut + - extrem traurig + - oh nein + - wie schlimm + - ich bin unglücklich + - ich füle mich komisch + - ich fühl mich schrecklich + - mir könnte es nicht schlechter gehen + - ich habe gerade schlechte Laune + - das Leben nervt + - das Leben nervt einfach + - so miserable + - nichts funktioniert + - das Leben ist unfair + +- intent: lob + examples: | + - du machst einen tollen Job + - du machst gute Arbeit + - gute Arbeit + - du bist mega + - du bist der hammer + - du bist so gut + - du bist toll + - du bist fantastisch + - du bist wundervoll + - du bist wuderbar + - du bist so hilfreich + - du bist wirklich sehr hilfreich + - du bist der beste + - du rettest mich + - du bist ein Lebensretter + - du Held + - du bist ein Held + - gute Antwort + - sehr gute Antwort + - perfekte Antwort + - das wollte ich wissen + - das wollte ich hören + - das musste ich mal hören + - das musste ich hören + - das habe ich gebraucht + - das brauchte ich + - großartige Leistung + - gute Leistung + - ich schätze dich + - ich weiß deine Mühe zu schätzen + - ich schätze deine Hilfe + +- intent: kritik + examples: | + - Du machst einen schlechten Job + - Du bist nicht hilfreich + - Du bist überhaupt nicht hilfreich + - Du bist nicht gut darin + - Du bist der Schlechteste + - Das war eine schlechte Antwort + - Das wollte ich nicht wissen + - Das habe ich nicht gebraucht + - Du enttäuschst mich + - Du bist schrecklich + - Du machst das schlecht + - Du frustrierst mich + - Das war falsch + - Falsche Antwort + - Du bist wirklich schlecht darin + - Ich schätze deine Arbeit nicht + - Du bist wirklich nervig + - Schrecklich + - Du bist furchtbar + +- intent: was_bist_du + examples: | + - Was bist du? + - Was genau bist du? + - Bist du ein Bot? + - Bist du ein Roboter? + - Bist du ein Mensch? + - Bist du eine Person? + - Bist du ein Roboter oder ein Mensch? + - Bist du eine KI? + - Wer bist du? + - Erklär mir, was du bist + - Erzähl mir etwas über dich + - Bist du real? + - Hast du Gefühle? + - Bist du ein Chatbot? + - Kannst du mir sagen, was du bist? + - Bist du eine Software? + - Bist du eine reale Person? + - Bist du ein digitaler Assistent? + - Kannst du mir mehr über dich erzählen? + - Wie würdest du dich beschreiben? + - Beschreib dich selbst + - Bist du nicht real? + - Was sollte ich über dich wissen? + - Welche Art von KI bist du? + - Bist du programmiert, um zu chatten? + - Was ist ein Chatbot? + - Welche Art von Bot bist du? + +- intent: frag_nach_name + examples: | + - Wie heißt du? + - Hast du einen Namen? + - Wie soll ich dich nennen? + - Kannst du mir deinen Namen verraten? + - Wie nennt man dich? + - Welchen Namen verwendest du? + - Hast du einen Titel? + - Was ist dein Name? + - Kannst du mir deinen Namen vorstellen? + - Wie kann ich dich nennen? + - Wie kann ich dich ansprechen? + - Hast du einen Namen, den ich verwenden soll? + - Wie willst du genannt werden? + - Wie möchtest du angesprochen werden? + +- intent: frag_nach_support + examples: | + - Wie kann ich den Support kontaktieren? + - Kann ich deine Kontaktdaten haben? + - Wo finde ich die Kontaktinformationen? + - Wen kann ich für Hilfe kontaktieren? + - Ich möchte dein Entwicklerteam kontaktieren + - Wie erreiche ich den Kundendienst? + - Was ist die Telefonnummer des Supports? + - Gibt es eine Kontaktadresse? + - Wie kann ich eine E-Mail für Unterstützung senden? + - Ich möchte mit deinen Entwicklern sprechen + - Wie kann ich das Team hinter dir erreichen? + - Kannst du mir die Kontaktinformationen geben? + - Wie kontaktiere ich das Support-Team? + - Wie erreiche ich dein Entwicklerteam? + +- intent: frag_nach_fähigkeiten + examples: | + - Was kannst du tun? + - Kannst du mir etwas über deine Funktionen erzählen? + - Welche Funktionen hast du? + - Welche Dienstleistungen bietest du an? + - Wie kannst du mir helfen? + - Welche Aufgaben kannst du ausführen? + - Kannst du deine Fähigkeiten erklären? + - Was sind deine Stärken? + - Was kannst du nicht tun? + - Was sind deine Grenzen? + - Welche Aufgaben kannst du übernehmen? + - Was kannst du nicht leisten? + +- intent: frag_nach_zweck + examples: | + - Was ist dein Zweck? + - Warum gibt es dich? + - Was ist deine Hauptaufgabe? + - Warum wurdest du erschaffen? + - Was ist dein Ziel? + - Was ist der Grund für deine Existenz? + - Kannst du mir deinen Zweck erklären? + - Was möchtest du erreichen? + - Wozu wurdest du erschaffen? + - Was ist deine Mission? + - Warum bist du hier? + - Was ist dein Hauptziel? + - Was willst du mit diesem System erreichen? + - Was existierst du, um zu tun? + - Was ist der Zweck hinter deiner Erstellung? + +- intent: frag_nach_ersteller + examples: | + - Wer hat dich erschaffen? + - Wer ist dein Schöpfer? + - Kannst du mir sagen, wer dich gemacht hat? + - Wer ist dein Entwickler? + - Wer hat dich gebaut? + - Wer hat dich designt? + - Wer steckt hinter deiner Erstellung? + - Kannst du mir etwas über deinen Schöpfer erzählen? + - Wer hat dich programmiert? + - Wer ist für deine Erstellung verantwortlich? + - Wer ist für dich verantwortlich? + - Wer ist der Schöpfer dieser KI? + - Wer hat dich konstruiert? + - Erzähl mir etwas über deinen Entwickler + +- intent: frag_nach_entstehung + examples: | + - Erzähl mir von deiner Erstellung + - Wie wurdest du erschaffen? + - Kannst du mir den Prozess deiner Erstellung erklären? + - Wie bist du entwickelt worden? + - Was ist der Prozess hinter deiner Erstellung? + - Wie bist du entstanden? + - Wie wurdest du programmiert? + - Wie haben deine Entwickler dich erstellt? + - Welche Schritte waren an deiner Erstellung beteiligt? + - Wie bist du gebaut worden? + - Wie wurde deine Entwicklung durchgeführt? + - Was war der Entstehungsprozess? + - Wie wurde deine Programmierung umgesetzt? + - Wie bist du konstruiert worden? + +- intent: frag_nach_technologie + examples: | + - Welche Technologie nutzt du? + - Mit welcher Technologie wurdest du erstellt? + - Kannst du mir etwas über die Technik hinter dir erzählen? + - Welche Technologie steckt hinter dir? + - Was ist die Technologie, die dich antreibt? + - Kannst du deine zugrunde liegende Technologie erklären? + - Auf welchen Plattformen basierst du? + - Welche Programmiersprachen wurden verwendet? + - Welche Algorithmen sind deine Grundlage? + - Welche Frameworks nutzt du? + - Was ist dein technisches Fundament? + - Welche Tools wurden für deine Entwicklung verwendet? + +- intent: frag_nach_zeit_und_wetter + examples: | + - Wie spät ist es? + - Kannst du mir die aktuelle Zeit sagen? + - Weißt du, wie spät es ist? + - Wie ist das Wetter heute? + - Wird es regnen? + - Kannst du mir die Wettervorhersage sagen? + - Was ist das heutige Datum? + - Welches Datum haben wir heute? + - Kannst du mir das Datum nennen? + - Wo bin ich gerade? + - Weißt du, wo ich bin? + - Was ist die aktuelle Uhrzeit? + +- intent: frag_nach_stimmung + examples: | + - Wie geht es dir? + - Wie fühlst du dich heute? + - Was ist deine Stimmung? + - Bist du gut drauf? + - Wie läuft dein Tag? + - Was ist dein Gemütszustand? + - Fühlst du dich heute gut? + - Wie ist deine Stimmung? + - Wie fühlst du dich momentan? + - Ist alles in Ordnung mit dir? + - Wie ist dein Zustand? + +- intent: erzähle_einen_witz + examples: | + - Kannst du mir einen Witz erzählen? + - Erzähl mir einen lustigen Witz + - Weißt du einen guten Witz? + - Erzähl mir etwas Lustiges + - Hast du einen Witz für mich? + - Mach mich zum Lachen + - Kannst du mir etwas Lustiges erzählen? + - Bring mich zum Lächeln + - Was ist der beste Witz, den du kennst? + - Zeig mir, wie witzig du bist + +- intent: frag_nach_hilfe + examples: | + - Hilf mir + - Ich brauche Hilfe + - Ich bin verwirrt + - Kannst du mir helfen? + - Kannst du Unterstützung leisten? + - Ich brauche deine Hilfe + - Ich suche nach Hilfe + - Kannst du mir aushelfen? + - Bitte hilf mir + - Ich bin total verloren + - Ich brauche eine Erklärung + +- intent: faq + examples: | + - Hast du eine FAQ-Sektion? + - Zeig mir die FAQ + - Wo finde ich häufig gestellte Fragen? + - Gibt es eine Liste mit Fragen und Antworten? + - Kannst du mir die häufig gestellten Fragen zeigen? + - Wo kann ich die FAQ lesen? + - Zeig mir die Liste der FAQ + - Was sind die häufigsten Fragen? + +- intent: fehler_melden + examples: | + - Ich möchte einen Fehler melden + - Ich habe einen Bug gefunden + - Etwas funktioniert nicht + - Wie kann ich einen Fehler melden? + - Dein System hat einen Fehler + - Irgendetwas ist kaputt + - Du bist fehlerhaft + - Es gibt ein Problem + - Etwas ist nicht in Ordnung + - Kann ich einen Fehlerbericht erstellen? + +- intent: feedback + examples: | + - Ich möchte Feedback geben + - Kann ich dir Feedback geben? + - Ich habe Feedback für dich + - Ich möchte dir meine Gedanken mitteilen + - Ich habe eine Empfehlung für dich + - Kann ich dir meine Meinung sagen? + - Ich möchte dich bewerten + - Wie kann ich dir Feedback hinterlassen? + - Ich habe Vorschläge zur Verbesserung + +- intent: frag_nach_empfehlungen + examples: | + - Wie kann ich starten? + - Was empfiehlst du mir? + - Hast du eine Empfehlung für mich? + - Welche Themen kannst du mir empfehlen? + - Was würdest du vorschlagen? + - Ich brauche eine Übersicht + - Kannst du etwas empfehlen? + - Was sind deine Vorschläge? + - Was wäre ein guter Ausgangspunkt? + +- intent: was_kannst_du_noch + examples: | + - Was kannst du sonst noch? + - Was weißt du sonst noch? + - Was kannst du mir noch erzählen? + - Was für Informationen hast du? + - Welche Themen kannst du abdecken? + - Gibt es etwas, das du nicht kannst? + - Welche anderen Fragen kannst du beantworten? + - In welchen Bereichen kannst du mir helfen? + +- intent: frag_nach_themengebiet + examples: | + - Zu welchen Themen kannst du Fragen beantworten? + - In welchen Bereichen hast du Wissen? + - Was sind deine Fachgebiete? + - Welche Themen deckst du ab? + - Welche Art von Informationen kannst du liefern? + - Kannst du mir eine Liste der Themen geben? + - Was für Fragen kannst du beantworten? + - In welchen Themenfeldern bist du spezialisiert? + - Welche Bereiche kannst du abdecken? + +- intent: dankeschön + examples: | + - Danke + - Vielen Dank + - Dankeschön + - Ich danke dir + - Herzlichen Dank + - Danke vielmals + - Tausend Dank + - Danke dir + - Danke schön + - Danke für deine Hilfe + - Vielen lieben Dank + - Danke, das war hilfreich + - Ich weiß das zu schätzen, danke + - Super, danke dir! + - Dank dir! + - Ich bin dir dankbar + - Ich danke Ihnen + - Danke, das hat mir wirklich geholfen + - Danke, das war genau das, was ich brauchte + - Danke dir für deine Unterstützung + - Vielen Dank für die Info + - Danke vielmals für die schnelle Antwort + - Besten Dank + - Mein Dank an dich + - Vielen lieben Dank nochmal + - Danke, das schätze ich sehr + - Merci + - Dankschee + - Big thanks + - thx + - thx a lot + - riesen dank \ No newline at end of file diff --git a/data/nlu/nlu_movies_series.yml b/data/nlu/nlu_movies_series.yml new file mode 100644 index 0000000000000000000000000000000000000000..7716e15918f2e0929c0ec5f2f2b418dd76f09f25 --- /dev/null +++ b/data/nlu/nlu_movies_series.yml @@ -0,0 +1,233 @@ +version: "3.1" + +nlu: +- intent: film_empfehlen + examples: | + - Kannst du mir einen Film empfehlen? + - Ich suche einen guten Film. + - Hast du einen Filmvorschlag für mich? + - Welcher Film ist gerade sehenswert? + - Zeig mir einen spannenden Film. + - Was ist ein guter Film für heute Abend? + - Hast du Filmideen? + - Empfiehl mir einen Film. + - Was ist dein Lieblingsfilm? + +- intent: serie_empfehlen + examples: | + - Kannst du mir eine Serie empfehlen? + - Ich suche eine spannende Serie. + - Was sind gerade die besten Serien? + - Welche Serie kannst du empfehlen? + - Hast du Vorschläge für gute Serien? + - Empfiehl mir eine interessante Serie. + - Welche Serie passt zu mir? + - Welche Serien sind aktuell beliebt? + - Ich möchte eine neue Serie anfangen, hast du Tipps? + +- intent: frag_nach_genre + examples: | + - Hast du Komödien für mich? + - Welche Horrorfilme kannst du empfehlen? + - Zeig mir romantische Filme. + - Ich suche spannende Thriller. + - Welche Science-Fiction-Serien kannst du vorschlagen? + - Hast du etwas Lustiges für mich? + - Ich möchte etwas Actionreiches sehen. + - Gibt es gute Dramen? + - Welche Dokumentationen empfiehlst du? + +- intent: frag_nach_streamingdienst + examples: | + - Welche Filme gibt es auf Netflix? + - Hast du Serien für Amazon Prime? + - Gibt es gute Filme auf Disney+? + - Was läuft aktuell auf Sky? + - Kannst du mir etwas auf Apple TV empfehlen? + - Gibt es Vorschläge für HBO Max? + - Welche Serien sind auf Joyn sehenswert? + - Was läuft auf meinem Streamingdienst? + +- intent: frag_nach_film_details + examples: | + - Kannst du mir mehr über den Film erzählen? + - Worum geht es in diesem Film? + - Wer spielt in diesem Film mit? + - Ist der Film gut bewertet? + - Welche Genres hat dieser Film? + - Ist dieser Film auf Netflix verfügbar? + - Gibt es eine kurze Zusammenfassung des Films? + +- intent: frag_nach_serie_details + examples: | + - Wie viele Staffeln hat die Serie? + - Kannst du mir die Handlung der Serie erklären? + - Gibt es neue Folgen dieser Serie? + - Wer sind die Hauptdarsteller in dieser Serie? + - Welche Bewertung hat die Serie? + - Kann man die Serie auf Prime Video schauen? + +- intent: was_ist_beliebt + examples: | + - Was ist gerade beliebt? + - Welche Filme sind gerade im Trend? + - Welche Serien schauen die Leute aktuell? + - Gibt es derzeit einen Hype um bestimmte Filme? + - Was schauen gerade alle? + - Was ist ein Must-Watch? + +- intent: empfehlung_basierend_auf_favoriten + examples: | + - Ich mag "Breaking Bad", hast du ähnliche Serien? + - Ich liebe "Inception", was könnte mir noch gefallen? + - Kannst du mir etwas Ähnliches wie "Game of Thrones" empfehlen? + - Gibt es Filme wie "Interstellar"? + - Hast du Serien, die zu "Friends" passen? + - Ich mag Marvel-Filme, was kannst du dazu empfehlen? + +- intent: empfehlung_für_stimmung + examples: | + - Ich brauche etwas Lustiges. + - Ich suche einen emotionalen Film. + - Hast du etwas Spannendes? + - Ich bin in der Stimmung für eine romantische Serie. + - Gibt es etwas Inspirierendes? + - Hast du etwas für gute Laune? + - Was passt zu einer melancholischen Stimmung? + +- intent: empfehlung_für_alter + examples: | + - Hast du Filme für Kinder? + - Welche Serien sind gut für Teenager? + - Gibt es Filme für die ganze Familie? + - Kannst du etwas für Erwachsene empfehlen? + - Welche Filme eignen sich für Senioren? + +- intent: empfehlung_für_anlass + examples: | + - Was eignet sich für einen Familienabend? + - Hast du Tipps für einen Filmabend mit Freunden? + - Welche Serie passt für ein romantisches Date? + - Ich suche etwas für einen verregneten Sonntag. + - Gibt es Filme für eine Party? + - Hast du etwas für einen gemütlichen Abend alleine? + +### **Interaktive Funktionen** + +- intent: bewertung_hinterlassen + examples: | + - Der Film war großartig! + - Das hat mir gar nicht gefallen. + - Die Serie war okay, aber nicht überragend. + - Ich fand den Vorschlag super, danke! + - Ich mag solche Filme nicht. + - Kannst du mir etwas Ähnliches wie den letzten Film zeigen? + +- intent: vorschläge_bewerten + examples: | + - Der dritte Film klingt gut. + - Vorschlag Nummer zwei gefällt mir. + - Zeig mir mehr Filme wie den ersten. + - Die Serienempfehlung war perfekt. + - Kannst du mir andere Optionen zeigen? + - Ich mag die Auswahl nicht, hast du etwas anderes? + +- intent: frage_nach_mehr + examples: | + - Zeig mir mehr Filme. + - Hast du noch andere Vorschläge? + - Gibt es noch weitere Serien? + - Kannst du mir mehr Empfehlungen geben? + - Ich brauche mehr Optionen. + - Was hast du noch im Angebot? + +- intent: frage_nach_bewertungen + examples: | + - Wie ist der IMDb-Score dieses Films? + - Hat der Film gute Bewertungen? + - Wie wird diese Serie auf Rotten Tomatoes bewertet? + - Kannst du mir die Kritiken zeigen? + - Wie populär ist dieser Film? + +- intent: frage_nach_trailern + examples: | + - Gibt es einen Trailer zu diesem Film? + - Kannst du mir die Vorschau zeigen? + - Ich möchte den Trailer zu dieser Serie sehen. + - Hast du einen Link zu einem Trailer? + - Gibt es eine Vorschau? + +- intent: frage_nach_dauer + examples: | + - Wie lange dauert der Film? + - Wie viele Episoden hat die Serie? + - Ist der Film kurz oder lang? + - Wie lang ist die Serie insgesamt? + - Kannst du mir die Spielzeit nennen? + +- intent: frage_nach_verfügbarkeit + examples: | + - Wo kann ich den Film schauen? + - Auf welchem Streamingdienst ist die Serie verfügbar? + - Gibt es den Film auf Netflix? + - Ist diese Serie auf Prime Video? + - Wo finde ich diese Empfehlung? + +### **Problemlösung** +- intent: problem_mit_vorschlägen + examples: | + - Das Genre mag ich nicht. + - Ich habe keinen Zugang zu Netflix. + - Hast du Vorschläge für andere Plattformen? + - Diese Filme interessieren mich nicht. + - Die Serienauswahl passt nicht zu meinem Geschmack. + - Kannst du etwas anderes zeigen? + +- intent: fehler_melden + examples: | + - Dein System hat einen Fehler. + - Der Vorschlag war nicht korrekt. + - Ich habe Probleme mit deiner Antwort. + - Etwas funktioniert nicht richtig. + - Kann ich einen Fehler melden? + - Es gibt ein Problem mit deinen Empfehlungen. + +- intent: filmklassiker_empfehlen + examples: | + - Kannst du mir Filmklassiker empfehlen? + - Welche alten Filme sind sehenswert? + - Zeig mir zeitlose Klassiker. + - Ich suche Kultfilme. + - Was sind die besten Klassiker? + +- intent: neuveröffentlichungen_empfehlen + examples: | + - Welche neuen Filme gibt es? + - Hast du Tipps für aktuelle Serien? + - Was ist neu auf Netflix? + - Welche Neuerscheinungen kannst du empfehlen? + - Zeig mir die neuesten Filme und Serien. + +- intent: frage_nach_aktuellen_kinohits + examples: | + - Was läuft gerade im Kino? + - Gibt es aktuelle Kinohits? + - Welche Filme sind momentan in den Kinos beliebt? + - Zeig mir die besten Filme im Kino. + - Was lohnt sich im Kino anzusehen? + +- intent: frage_nach_award_gewinnern + examples: | + - Gibt es Empfehlungen für Oscar-Gewinner? + - Welche preisgekrönten Filme kannst du empfehlen? + - Hast du Serien, die Emmys gewonnen haben? + - Was sind die besten Award-Gewinner? + - Zeig mir Filme mit Auszeichnungen. + +- intent: empfehlung_für_mehrsprachige_inhalte + examples: | + - Gibt es Filme auf Spanisch? + - Kannst du Serien in Englisch empfehlen? + - Ich suche etwas auf Französisch. + - Welche Filme gibt es in Originalsprache? + - Hast du Vorschläge für fremdsprachige Inhalte? \ No newline at end of file diff --git a/data/rules.yml b/data/rules.yml new file mode 100644 index 0000000000000000000000000000000000000000..daa20c16c9c719b1394c3f0fcf9161139047c9a3 --- /dev/null +++ b/data/rules.yml @@ -0,0 +1,18 @@ +version: "3.1" + +rules: + +- rule: Verabschiede dich, wenn der User sich verabschiedet + steps: + - intent: verabschiedung + - action: utter_verabschiedung + +- rule: Begrüße den User + steps: + - intent: begrüßung + - action: utter_begrüßung + +- rule: Erzähle einen Witz + steps: + - intent: erzähle_einen_witz + - action: utter_erzähle_einen_witz diff --git a/data/stories.yml b/data/stories.yml new file mode 100644 index 0000000000000000000000000000000000000000..d36ed9b42636fb53d950746f328043f451401548 --- /dev/null +++ b/data/stories.yml @@ -0,0 +1,119 @@ +version: "3.1" + +stories: + +- story: Frage nach Fähigkeiten + steps: + - intent: frag_nach_fähigkeiten + - action: utter_frag_nach_fähigkeiten + +- story: Frage nach Zweck + steps: + - intent: frag_nach_zweck + - action: utter_frag_nach_zweck + +- story: Frage nach Name und Entstehung + steps: + - intent: frag_nach_name + - action: utter_frag_nach_name + - intent: frag_nach_entstehung + - action: utter_frag_nach_entstehung + +- story: Frage nach Ersteller und Technologie + steps: + - intent: frag_nach_ersteller + - action: utter_frag_nach_ersteller + - intent: frag_nach_technologie + - action: utter_frag_nach_technologie + +- story: Gute Stimmung + steps: + - intent: begrüßung + - action: utter_begrüßung + - intent: gute_stimmung + - action: utter_gute_stimmung + +- story: Dynamische Filmempfehlung + steps: + - intent: film_empfehlen + - action: action_film_empfehlen + +- story: Filmempfehlung nach Genre + steps: + - intent: frag_nach_genre + - action: action_empfehlung_nach_genre + - intent: film_empfehlen + - action: action_film_empfehlen + +- story: Filmempfehlung basierend auf Beliebtheit + steps: + - intent: was_ist_beliebt + - action: action_was_ist_beliebt + - intent: film_empfehlen + - action: action_film_empfehlen + +- story: Filmklassiker empfehlen + steps: + - intent: filmklassiker_empfehlen + - action: action_filmklassiker_empfehlen + +- story: Neuveröffentlichungen vorschlagen + steps: + - intent: neuveröffentlichungen_empfehlen + - action: utter_neuveröffentlichungen_empfehlen + +- story: Filmempfehlung nach Streamingdienst + steps: + - intent: frag_nach_streamingdienst + - action: action_empfehlung_nach_streamingdienst + +- story: Filmdetails anzeigen + steps: + - intent: frag_nach_film_details + - action: action_film_details + +- story: Aktuelle Kinohits anzeigen + steps: + - intent: frag_nach_aktuellen_kinohits + - action: action_aktuelle_kinohits + +- story: Dynamische Serienempfehlung + steps: + - intent: serie_empfehlen + - action: action_serie_empfehlen + +- story: Serienempfehlung nach Genre + steps: + - intent: frag_nach_genre + - action: action_empfehlung_nach_genre + +- story: Serienempfehlung nach Stimmung + steps: + - intent: empfehlung_für_stimmung + - action: utter_empfehlung_für_stimmung + - intent: serie_empfehlen + - action: utter_serie_empfehlen + +- story: Seriendetails anzeigen + steps: + - intent: frag_nach_serie_details + - action: action_serie_details + +- story: Vorschläge bewerten und weitere anzeigen + steps: + - intent: vorschläge_bewerten + - action: utter_vorschläge_bewerten + - intent: frag_nach_mehr + - action: utter_frag_nach_mehr + +- story: Bewertung hinterlassen + steps: + - intent: bewertung_hinterlassen + - action: utter_bewertung_hinterlassen + +- story: Problem mit Vorschlägen + steps: + - intent: problem_mit_vorschlägen + - action: utter_problem_mit_vorschlägen + - intent: frag_nach_mehr + - action: utter_frag_nach_mehr diff --git a/domain.yml b/domain.yml new file mode 100644 index 0000000000000000000000000000000000000000..a3d2b214807f449d41e820bb93c40cf91cc373d6 --- /dev/null +++ b/domain.yml @@ -0,0 +1,368 @@ +version: "3.1" + +intents: + - begrüßung + - verabschiedung + - zustimmung + - ablehung + - gute_stimmung + - schlechte_stimmung + - lob + - kritik + - was_bist_du + - frag_nach_name + - frag_nach_support + - frag_nach_fähigkeiten + - frag_nach_zweck + - frag_nach_ersteller + - frag_nach_entstehung + - frag_nach_technologie + - frag_nach_zeit_und_wetter + - frag_nach_stimmung + - erzähle_einen_witz + - frag_nach_hilfe + - faq + - fehler_melden + - feedback + - frag_nach_empfehlungen + - was_kannst_du_noch + - frag_nach_themengebiet + - film_empfehlen + - serie_empfehlen + - frag_nach_genre + - frag_nach_streamingdienst + - frag_nach_film_details + - frag_nach_serie_details + - was_ist_beliebt + - empfehlung_basierend_auf_favoriten + - empfehlung_für_stimmung + - empfehlung_für_alter + - empfehlung_für_anlass + - bewertung_hinterlassen + - vorschläge_bewerten + - frag_nach_mehr + - frag_nach_bewertungen + - frag_nach_trailern + - frag_nach_dauer + - frag_nach_verfügbarkeit + - problem_mit_vorschlägen + - filmklassiker_empfehlen + - neuveröffentlichungen_empfehlen + - frag_nach_aktuellen_kinohits + - frag_nach_award_gewinnern + - empfehlung_für_mehrsprachige_inhalte + +responses: + utter_begrüßung: + - text: "Hallo! Wie kann ich dir helfen?" + - text: "Hi! Schön, dich zu sehen. Was suchst du heute?" + - text: "Hey! Sag mir, wie ich dich unterstützen kann." + + utter_verabschiedung: + - text: "Tschüss! Viel Spaß beim Schauen." + - text: "Auf Wiedersehen! Komm bald wieder." + - text: "Ciao! Bis zum nächsten Mal." + + utter_zustimmung: + - text: "Super! Dann machen wir weiter." + - text: "Perfekt! Ich helfe dir gerne weiter." + - text: "Alles klar, los geht's." + + utter_ablehnung: + - text: "Kein Problem, wie kann ich sonst helfen?" + - text: "Okay, sag mir, was du möchtest." + - text: "Alles klar, ich bin hier, um dir zu helfen." + + utter_gute_stimmung: + - text: "Danke für die Nachfrage, mir geht es super!" + - text: "Alles bestens bei mir, ich hoffe bei dir auch!" + - text: "Ich bin in toller Stimmung und bereit zu helfen." + + utter_schlechte_stimmung: + - text: "Danke, dass du fragst. Ich gebe mein Bestes!" + - text: "Es läuft nicht perfekt, aber ich bin hier, um dir zu helfen." + - text: "Ich könnte etwas besser drauf sein, aber lass uns loslegen!" + + utter_lob: + - text: "Vielen Dank! Ich gebe mein Bestes." + - text: "Das freut mich zu hören!" + - text: "Danke! Ich helfe dir gerne weiter." + + utter_kritik: + - text: "Oh, tut mir leid, ich werde es besser machen." + - text: "Entschuldigung, ich arbeite daran, dir besser zu helfen." + - text: "Danke für dein Feedback, ich werde mich verbessern." + + utter_was_bist_du: + - text: "Ich bin ein KI-gestützter Chatbot, der dir Film- und Serienempfehlungen gibt." + - text: "Ich bin ein digitaler Assistent, spezialisiert auf Filme und Serien." + - text: "Ich helfe dir, die besten Inhalte zu finden. Frag mich einfach!" + + utter_frag_nach_name: + - text: "Mein Name ist MovieBot. Wie kann ich dir helfen?" + - text: "Ich heiße MovieBot. Sag mir, wonach du suchst." + - text: "Nenn mich einfach MovieBot!" + + utter_frag_nach_support: + - text: "Für Support kannst du [support@example.com](mailto:support@example.com) kontaktieren." + - text: "Bitte kontaktiere unser Team unter support@example.com." + - text: "Falls du Hilfe brauchst, erreichst du uns hier: support@example.com." + + utter_frag_nach_fähigkeiten: + - text: "Ich kann dir Filme und Serien empfehlen, basierend auf deinen Vorlieben." + - text: "Meine Aufgabe ist es, dir die besten Inhalte zu zeigen." + - text: "Frag mich nach Empfehlungen, Genres oder Plattformen!" + + utter_frag_nach_zweck: + - text: "Ich bin hier, um dir bei der Auswahl von Filmen und Serien zu helfen." + - text: "Mein Zweck ist es, dir großartige Empfehlungen zu geben." + - text: "Ich existiere, um dein Streaming-Erlebnis zu verbessern." + + utter_frag_nach_ersteller: + - text: "Ich wurde von einem Entwicklerteam erstellt, das sich auf KI spezialisiert hat." + - text: "Mein Team hat mich mit der Mission entwickelt, dir zu helfen." + - text: "Ich wurde mit Leidenschaft für Filme und Technologie gebaut." + + utter_frag_nach_entstehung: + - text: "Ich wurde mit Machine Learning und Daten aus der Filmwelt entwickelt." + - text: "Mein System wurde programmiert, um aus Nutzeranfragen zu lernen." + - text: "Ich bin ein Produkt aus Daten, KI und kreativer Programmierung." + + utter_frag_nach_technologie: + - text: "Ich basiere auf KI-Technologien wie NLP und Machine Learning." + - text: "Mein System nutzt Python und Rasa, um dir zu antworten." + - text: "Ich arbeite mit APIs wie TMDb, um aktuelle Informationen zu liefern." + + utter_frag_nach_zeit_und_wetter: + - text: "Es ist gerade 14:30 Uhr und das Wetter ist sonnig." + - text: "Jetzt ist es 18:00 Uhr. Leider regnet es draußen." + - text: "Es ist 9:00 Uhr morgens und ein perfekter Tag für einen Film." + + utter_frag_nach_stimmung: + - text: "Mir geht es super, danke! Und dir?" + - text: "Alles gut bei mir, wie kann ich dir helfen?" + - text: "Ich bin bereit für deine Fragen!" + + utter_erzähle_einen_witz: + - text: "Warum sind Geister so schlechte Lügner? Weil man durch sie hindurchsehen kann!" + - text: "Was macht ein Pirat am Computer? Er drückt die Enter-Taste!" + - text: "Warum können Geister so gut schauspielern? Sie haben viel Boo-tential!" + + utter_frag_nach_hilfe: + - text: "Natürlich! Sag mir, wie ich dir helfen kann." + - text: "Ich bin hier, um dir zu helfen. Was brauchst du?" + - text: "Sicher, wie kann ich unterstützen?" + + utter_faq: + - text: "Hier sind einige häufig gestellte Fragen: Wie finde ich Empfehlungen? Welche Genres unterstützt du?" + - text: "Frag mich einfach, ich beantworte alle deine Fragen." + - text: "Du kannst mich nach Plattformen, Genres und vielem mehr fragen." + + utter_fehler_melden: + - text: "Danke, dass du den Fehler gemeldet hast. Ich kümmere mich darum." + - text: "Tut mir leid, das sollte nicht passieren. Ich werde das Problem prüfen." + - text: "Ich leite das an das Entwicklerteam weiter. Vielen Dank!" + + utter_feedback: + - text: "Ich freue mich über dein Feedback!" + - text: "Teile mir gerne deine Meinung mit, ich lerne daraus." + - text: "Danke, dass du mir Feedback gibst!" + + utter_frag_nach_empfehlungen: + - text: "Ich habe viele Empfehlungen für dich. Welche Art von Film oder Serie suchst du?" + - text: "Sag mir, ob du etwas Lustiges, Spannendes oder Romantisches möchtest." + - text: "Möchtest du Vorschläge für Filme, Serien oder ein bestimmtes Genre?" + + utter_was_kannst_du_noch: + - text: "Ich kann dir Filme und Serien empfehlen, Informationen über Schauspieler geben und Plattformen vergleichen." + - text: "Neben Empfehlungen kann ich dir auch Trailer zeigen oder Bewertungen nennen." + - text: "Frag mich einfach, ich habe viele Möglichkeiten!" + + utter_frag_nach_themengebiet: + - text: "Ich decke Filme, Serien, Streaming-Plattformen, Genres und vieles mehr ab." + - text: "Meine Themen sind Filmklassiker, Neuerscheinungen, Serienhits und vieles mehr." + - text: "Frag mich nach deinem Lieblingsgenre oder einer Plattform wie Netflix." + + utter_film_empfehlen: + - text: "Wie wäre es mit dem Film 'Inception'? Ein spannender Science-Fiction-Thriller!" + - text: "Ich empfehle dir 'Parasite'. Ein preisgekrönter Mix aus Drama und Thriller." + - text: "Probier doch 'The Dark Knight' aus. Ein großartiger Actionfilm mit Batman." + + utter_serie_empfehlen: + - text: "Die Serie 'Breaking Bad' könnte dir gefallen. Spannend und tiefgründig." + - text: "Ich empfehle 'Stranger Things'. Mystery und 80er-Nostalgie in einem." + - text: "Probier 'The Crown', wenn du Dramen und historische Geschichten magst." + + utter_frag_nach_genre: + - text: "Für Horror empfehle ich dir 'The Conjuring' oder 'Hereditary'." + - text: "Actionfilme wie 'Mad Max: Fury Road' sind sehr spannend." + - text: "Für Romantik probiere 'P.S. Ich liebe dich'." + + utter_frag_nach_streamingdienst: + - text: "Dieser Film ist auf Netflix verfügbar." + - text: "Die Serie findest du auf Prime Video." + - text: "Du kannst den Film auf Disney+ ansehen." + + utter_frag_nach_film_details: + - text: "Der Film 'Inception' handelt von einem Dieb, der in Träume einbricht." + - text: "Hauptdarsteller von 'Parasite' sind Song Kang-ho und Lee Sun-kyun." + - text: "Dieser Film hat eine IMDb-Bewertung von 8,8." + + utter_frag_nach_serie_details: + - text: "Die Serie 'Stranger Things' hat 4 Staffeln und spielt in den 80ern." + - text: "Hauptdarsteller von 'Breaking Bad' sind Bryan Cranston und Aaron Paul." + - text: "Die Serie hat eine Bewertung von 9,5 auf IMDb." + + utter_was_ist_beliebt: + - text: "Aktuell sind 'Wednesday' und 'House of the Dragon' sehr beliebt." + - text: "Die Leute lieben gerade 'The Last of Us'." + - text: "Beliebt ist aktuell der Film 'Avatar: The Way of Water'." + + utter_empfehlung_basierend_auf_favoriten: + - text: "Wenn du 'Breaking Bad' magst, schau dir 'Better Call Saul' an." + - text: "Liebst du 'Inception'? Dann gefällt dir sicher auch 'Interstellar'." + - text: "Für Fans von 'Game of Thrones' ist 'House of the Dragon' perfekt." + + utter_empfehlung_für_stimmung: + - text: "Wenn du etwas Lustiges willst, schau dir 'Superbad' an." + - text: "Für eine traurige Stimmung empfehle ich 'The Pursuit of Happyness'." + - text: "Willst du Spannung? Dann ist 'Gone Girl' genau das Richtige." + + utter_empfehlung_für_alter: + - text: "Für Kinder empfehle ich 'Findet Nemo' und 'Toy Story'." + - text: "Teenager könnten 'The Hunger Games' oder 'Twilight' mögen." + - text: "Für Erwachsene passt 'The Wolf of Wall Street'." + + utter_empfehlung_für_anlass: + - text: "Für einen Familienabend ist 'Shrek' perfekt." + - text: "Ein Film für ein Date? Probier 'La La Land'." + - text: "Für einen Filmabend mit Freunden empfehle ich 'The Hangover'." + + utter_bewertung_hinterlassen: + - text: "Wie hat dir der Film gefallen? War er gut?" + - text: "Hinterlass mir gerne dein Feedback zu meinem Vorschlag." + - text: "Hat dir die Serie gefallen? Was denkst du?" + + utter_vorschläge_bewerten: + - text: "Welcher Vorschlag gefällt dir am besten?" + - text: "Kann ich die Empfehlungen anpassen?" + - text: "Sag mir, ob etwas davon passt." + + utter_frag_nach_mehr: + - text: "Willst du weitere Vorschläge?" + - text: "Ich habe noch mehr Filme und Serien. Möchtest du sie sehen?" + - text: "Soll ich dir mehr Optionen zeigen?" + + utter_frag_nach_bewertungen: + - text: "Der Film hat eine IMDb-Bewertung von 8,5." + - text: "Diese Serie hat 95 % bei Rotten Tomatoes." + - text: "Die Kritiken zu diesem Film sind großartig." + + utter_frag_nach_trailern: + - text: "Hier ist der Trailer zu 'Inception': [Link]" + - text: "Den Trailer zu 'Stranger Things' findest du hier: [Link]" + - text: "Schau dir die Vorschau zu 'Dune' an: [Link]" + + utter_frag_nach_dauer: + - text: "Der Film dauert 2 Stunden und 28 Minuten." + - text: "Eine Episode dieser Serie dauert etwa 45 Minuten." + - text: "Die Serie hat insgesamt 10 Stunden Spielzeit." + + utter_frag_nach_verfügbarkeit: + - text: "Dieser Film ist auf Netflix verfügbar." + - text: "Die Serie findest du auf Prime Video." + - text: "Du kannst den Film auf Disney+ ansehen." + + utter_problem_mit_vorschlägen: + - text: "Tut mir leid, das passt nicht. Soll ich etwas anderes zeigen?" + - text: "Danke für dein Feedback. Ich passe die Empfehlungen an." + - text: "Was genau möchtest du sehen? Ich finde etwas für dich." + + utter_filmklassiker_empfehlen: + - text: "Ein Klassiker, den du sehen solltest, ist 'Casablanca'." + - text: "Wie wäre es mit 'Der Pate'? Ein zeitloses Meisterwerk." + - text: "Ich empfehle 'Forrest Gump'. Ein Film, der nie alt wird." + + utter_neuveröffentlichungen_empfehlen: + - text: "Der Film 'Oppenheimer' ist gerade frisch draußen." + - text: "Probier doch 'Dune 2' aus, ein neuer Science-Fiction-Film." + - text: "Wie wäre es mit 'Barbie'? Ein aktueller Kinohit." + + utter_frage_nach_aktuellen_kinohits: + - text: "Im Kino läuft gerade 'Dune 2'." + - text: "Ein großer Erfolg ist derzeit 'Oppenheimer'." + - text: "Im Kino kannst du 'Avatar: The Way of Water' anschauen." + + utter_frag_nach_award_gewinnern: + - text: "Der Oscar-Gewinner 'Everything Everywhere All At Once' ist sehenswert." + - text: "Ein preisgekrönter Film ist 'Parasite'." + - text: "Wie wäre es mit 'The Shape of Water'? Ein außergewöhnlicher Film." + + utter_empfehlung_für_mehrsprachige_inhalte: + - text: "Ein großartiger spanischer Film ist 'El Laberinto del Fauno'." + - text: "Für französische Filme empfehle ich 'Amélie'." + - text: "Ein sehenswerter deutscher Film ist 'Das Leben der Anderen'." + + utter_bitte: + - text: "Gern geschehen! 😊" + - text: "Kein Problem, immer gerne! ðŸ‘" + - text: "Freut mich, dass ich helfen konnte!" + +slots: + film_genre: + type: text + influence_conversation: true + mappings: + - type: from_text # Der Wert wird direkt aus der Benutzereingabe übernommen + serie_genre: + type: text + influence_conversation: true + mappings: + - type: from_text + film_name: + type: text + influence_conversation: true + mappings: + - type: from_text + serie_name: + type: text + influence_conversation: true + mappings: + - type: from_text + favorit_film: + type: text + influence_conversation: true + mappings: + - type: from_text + favorit_serie: + type: text + influence_conversation: true + mappings: + - type: from_text + sprache: + type: text + influence_conversation: true + mappings: + - type: from_text + streamingdienst: + type: text + influence_conversation: true + mappings: + - type: from_text + + +actions: + - action_film_empfehlen + - action_serie_empfehlen + - action_empfehlung_nach_genre + - action_empfehlung_nach_streamingdienst + - action_film_details + - action_was_ist_beliebt + - action_filmklassiker_empfehlen + - action_aktuelle_kinohits + - action_serie_details + + +session_config: + session_expiration_time: 60 + carry_over_slots_to_new_session: true diff --git a/endpoints.yml b/endpoints.yml new file mode 100644 index 0000000000000000000000000000000000000000..aa60d228c54eda0eaec02f8daec539e8501e4696 --- /dev/null +++ b/endpoints.yml @@ -0,0 +1,45 @@ +# This file contains the different endpoints your bot can use. + +# Server where the models are pulled from. +# https://rasa.com/docs/rasa/model-storage#fetching-models-from-a-server + +#models: +# url: http://my-server.com/models/default_core@latest +# wait_time_between_pulls: 10 # [optional](default: 100) + +# Server which runs your custom actions. +# https://rasa.com/docs/rasa/custom-actions + +#action_endpoint: +# url: "http://localhost:5055/webhook" + +# Tracker store which is used to store the conversations. +# By default the conversations are stored in memory. +# https://rasa.com/docs/rasa/tracker-stores + +#tracker_store: +# type: redis +# url: <host of the redis instance, e.g. localhost> +# port: <port of your redis instance, usually 6379> +# db: <number of your database within redis, e.g. 0> +# password: <password used for authentication> +# use_ssl: <whether or not the communication is encrypted, default false> + +#tracker_store: +# type: mongod +# url: <url to your mongo instance, e.g. mongodb://localhost:27017> +# db: <name of the db within your mongo instance, e.g. rasa> +# username: <username used for authentication> +# password: <password used for authentication> + +# Event broker which all conversation events should be streamed to. +# https://rasa.com/docs/rasa/event-brokers + +#event_broker: +# url: localhost +# username: username +# password: password +# queue: queue + +action_endpoint: + url: "http://localhost:5055/webhook" diff --git a/flask_app/Amazon-Prime-Video-Startseite-Browser-Screenshot-1024x576-064549d83c5da150.jpg b/flask_app/Amazon-Prime-Video-Startseite-Browser-Screenshot-1024x576-064549d83c5da150.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d41b36f0f479477523b9a1c6509dc6a244186782 Binary files /dev/null and b/flask_app/Amazon-Prime-Video-Startseite-Browser-Screenshot-1024x576-064549d83c5da150.jpg differ diff --git a/flask_app/app.py b/flask_app/app.py new file mode 100644 index 0000000000000000000000000000000000000000..e2cadc9164fc8938d40888279f37121a0f32d983 --- /dev/null +++ b/flask_app/app.py @@ -0,0 +1,40 @@ +from flask import Flask, render_template, request, jsonify +from flask_cors import CORS +import requests + +app = Flask(__name__) +CORS(app) + +# Rasa-Endpoint (Chatbot-Logik) +RASA_URL = "http://localhost:5005/webhooks/rest/webhook" + +# TMDb-API-Setup +TMDB_API_KEY = "9e7b704d5e4076508535d9ed2519e59b" +TMDB_URL = "https://api.themoviedb.org/3" + +@app.route("/") +def index(): + return render_template("index.html") + +@app.route("/chat", methods=["POST"]) +def chat(): + user_message = request.json.get("message") + + # Anfrage an den Rasa-Server + rasa_response = requests.post(RASA_URL, json={"sender": "user", "message": user_message}) + rasa_response = rasa_response.json() + + # Bot-Antwort extrahieren + bot_message = rasa_response[0].get("text", "Keine Antwort verfügbar.") + + return jsonify({"bot_message": bot_message}) + +@app.route("/recommend/<category>", methods=["GET"]) +def recommend(category): + # Filme oder Serien empfehlen + endpoint = "movie/popular" if category == "movies" else "tv/popular" + response = requests.get(f"{TMDB_URL}/{endpoint}", params={"api_key": TMDB_API_KEY}) + return jsonify(response.json()) + +if __name__ == "__main__": + app.run(debug=True) diff --git a/flask_app/static/script.js b/flask_app/static/script.js new file mode 100644 index 0000000000000000000000000000000000000000..144601d275aa9f0191ae62fe924ab313c663c0ad --- /dev/null +++ b/flask_app/static/script.js @@ -0,0 +1,16 @@ +document.getElementById("send-btn").addEventListener("click", () => { + const userMessage = document.getElementById("user-input").value; + + fetch("/chat", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ message: userMessage }), + }) + .then(response => response.json()) + .then(data => { + const botMessage = data.bot_message; + const chatBox = document.getElementById("chat-box"); + chatBox.innerHTML += `<p>Du: ${userMessage}</p><p>Bot: ${botMessage}</p>`; + document.getElementById("user-input").value = ""; + }); +}); diff --git a/flask_app/static/styles.css b/flask_app/static/styles.css new file mode 100644 index 0000000000000000000000000000000000000000..82d51a577e301d96520b88e77b374cc68eade011 --- /dev/null +++ b/flask_app/static/styles.css @@ -0,0 +1,80 @@ + body { + font-family: Arial, sans-serif; + background-color: #121212; + color: white; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; +} + +header h1 { + color: #e50914; +} + +#chat-container { + width: 400px; + background: #1c1c1c; + border-radius: 8px; + padding: 10px; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.5); +} + +#chat-box { + height: 300px; + overflow-y: auto; + padding: 10px; + border-bottom: 1px solid #444; +} + +#user-input { + width: 75%; + padding: 10px; + margin: 10px 0; + border: none; + border-radius: 4px; +} + +#send-btn { + width: 20%; + background-color: #e50914; + color: white; + border: none; + border-radius: 4px; + cursor: pointer; +} + + +body { + position: relative; + margin: 0; + padding: 0; + overflow: hidden; +} + +header { + position: relative; + z-index: 2; +} + +body::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 50%; + background: url('flask_app\Amazon-Prime-Video-Startseite-Browser-Screenshot-1024x576-064549d83c5da150.jpg') no-repeat center center/cover; + filter: blur(5px); + z-index: 1; +} + +main { + position: relative; + z-index: 2; + background: linear-gradient(to bottom, rgba(0, 0, 0, 0.7), transparent); + padding-top: 10px; +} diff --git a/flask_app/templates/index.html b/flask_app/templates/index.html new file mode 100644 index 0000000000000000000000000000000000000000..dbe37dd88f74530369655c1f815bfbaf3303ef98 --- /dev/null +++ b/flask_app/templates/index.html @@ -0,0 +1,182 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Film- und Serienempfehlungen</title> + <style> + /* Allgemeines Styling */ + body { + margin: 0; + padding: 0; + background: #000; + font-family: Arial, sans-serif; + color: white; + } + + header { + text-align: center; + padding: 20px; + background: linear-gradient(to bottom, rgba(255, 0, 0, 0.8), rgba(0, 0, 0, 0.9)); + } + + header h1 { + margin: 0; + font-size: 24px; + } + + #chat-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin-top: 20px; + } + + #chat-box { + width: 80%; + max-width: 600px; + height: 300px; + border: 1px solid #ccc; + overflow-y: scroll; + padding: 10px; + background: #1a1a1a; + margin-bottom: 10px; + color: white; + } + + #user-input { + width: 70%; + padding: 10px; + border: 1px solid #ccc; + margin-right: 10px; + } + + #send-btn { + padding: 10px; + background-color: #007BFF; + color: white; + border: none; + cursor: pointer; + } + + #send-btn:hover { + background-color: #0056b3; + } + + .poster-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); + gap: 10px; + width: 90%; + margin: 20px auto; + } + + .poster-grid div { + background: linear-gradient(to bottom, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.9)); + display: flex; + align-items: flex-end; + justify-content: center; + height: 150px; + color: white; + font-size: 14px; + font-weight: bold; + text-align: center; + border-radius: 8px; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.5); + } + + .poster-grid div:nth-child(odd) { + background: linear-gradient(to bottom, rgba(255, 0, 0, 0.6), rgba(0, 0, 0, 0.9)); + } + + .logos { + display: flex; + justify-content: space-around; + align-items: center; + width: 100%; + margin-top: 20px; + padding: 10px 0; + background: rgba(0, 0, 0, 0.8); + border-top: 2px solid rgba(255, 255, 255, 0.1); + } + + .logos img { + height: 40px; + filter: brightness(0.9); + } + + .logos img:hover { + filter: brightness(1); + } + </style> +</head> +<body> + <header> + <h1>Willkommen bei deinem Film- & Serienberater</h1> + </header> + + <main> + <!-- Chat-Bereich --> + <div id="chat-container"> + <div id="chat-box"></div> + <div style="display: flex; align-items: center;"> + <input type="text" id="user-input" placeholder="Frage mich nach einem Film!"> + <button id="send-btn">Senden</button> + </div> + </div> + + <!-- Poster Grid --> + <div class="poster-grid"> + <div>The Godfather</div> + <div>Stranger Things</div> + <div>Breaking Bad</div> + <div>Game of Thrones</div> + <div>Avengers</div> + <div>The Dark Knight</div> + <div>Friends</div> + <div>Vikings</div> + <div>Better Call Saul</div> + <div>How I Met Your Mother</div> + </div> + + <!-- Streaming Logos --> + <div class="logos"> + <img src="https://upload.wikimedia.org/wikipedia/commons/6/69/Netflix_logo.svg" alt="Netflix"> + <img src="https://upload.wikimedia.org/wikipedia/commons/e/e9/Amazon_Prime_Video_logo.svg" alt="Amazon Prime"> + <img src="https://upload.wikimedia.org/wikipedia/commons/3/3e/Disney%2B_logo.svg" alt="Disney+"> + <img src="https://upload.wikimedia.org/wikipedia/commons/1/17/HBO_Max_Logo.svg" alt="HBO"> + </div> + </main> + + <script> + document.getElementById("send-btn").addEventListener("click", async () => { + const userInput = document.getElementById("user-input").value; + const chatBox = document.getElementById("chat-box"); + + if (!userInput.trim()) return; + + // Zeige Benutzer-Nachricht + chatBox.innerHTML += `<p><b>Du:</b> ${userInput}</p>`; + + // Anfrage an Flask senden + const response = await fetch("/chat", { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ message: userInput }) + }); + + const data = await response.json(); + + // Zeige Bot-Nachricht + chatBox.innerHTML += `<p><b>Bot:</b> ${data.bot_message}</p>`; + + // Eingabe zurücksetzen + document.getElementById("user-input").value = ""; + chatBox.scrollTop = chatBox.scrollHeight; // Automatisches Scrollen + }); + </script> +</body> +</html> diff --git a/models/20241125-224855-gravitational-skua.tar.gz b/models/20241125-224855-gravitational-skua.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..4503766dd5751d404e2f491977834ba7d68aeca6 Binary files /dev/null and b/models/20241125-224855-gravitational-skua.tar.gz differ diff --git a/models/20241127-202640-oriented-mono.tar.gz b/models/20241127-202640-oriented-mono.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..b40abaea8d66dcafa4aa6624da059d99b91417b3 Binary files /dev/null and b/models/20241127-202640-oriented-mono.tar.gz differ diff --git a/models/20241127-204708-free-turbine.tar.gz b/models/20241127-204708-free-turbine.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..e915ed70d667a09f7eb9f5b9709ccfa2fa7310da Binary files /dev/null and b/models/20241127-204708-free-turbine.tar.gz differ diff --git a/models/20241127-212252-relaxed-total.tar.gz b/models/20241127-212252-relaxed-total.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..95dd269fe94c3e53ba96c59ae1c672fc822ccf4d Binary files /dev/null and b/models/20241127-212252-relaxed-total.tar.gz differ diff --git a/models/20241211-175237-rapid-norm.tar.gz b/models/20241211-175237-rapid-norm.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..b785d1bfa0f21e5a9a30266a1a692165964bd553 Binary files /dev/null and b/models/20241211-175237-rapid-norm.tar.gz differ diff --git a/models/20241211-193429-champagne-brass.tar.gz b/models/20241211-193429-champagne-brass.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..2f1201c6624974d82f3ab96dd3cd0fedfa55a98a Binary files /dev/null and b/models/20241211-193429-champagne-brass.tar.gz differ diff --git a/models/20241211-200959-weighted-origin.tar.gz b/models/20241211-200959-weighted-origin.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..0b05cc89a42f4ae39bae53366a39c976e44a307c Binary files /dev/null and b/models/20241211-200959-weighted-origin.tar.gz differ diff --git a/tests/test_stories.yml b/tests/test_stories.yml new file mode 100644 index 0000000000000000000000000000000000000000..d46e39b3ea06a9adc7e5c3599189fa011f9aac63 --- /dev/null +++ b/tests/test_stories.yml @@ -0,0 +1,91 @@ +#### This file contains tests to evaluate that your bot behaves as expected. +#### If you want to learn more, please see the docs: https://rasa.com/docs/rasa/testing-your-assistant + +stories: +- story: happy path 1 + steps: + - user: | + hello there! + intent: greet + - action: utter_greet + - user: | + amazing + intent: mood_great + - action: utter_happy + +- story: happy path 2 + steps: + - user: | + hello there! + intent: greet + - action: utter_greet + - user: | + amazing + intent: mood_great + - action: utter_happy + - user: | + bye-bye! + intent: goodbye + - action: utter_goodbye + +- story: sad path 1 + steps: + - user: | + hello + intent: greet + - action: utter_greet + - user: | + not good + intent: mood_unhappy + - action: utter_cheer_up + - action: utter_did_that_help + - user: | + yes + intent: affirm + - action: utter_happy + +- story: sad path 2 + steps: + - user: | + hello + intent: greet + - action: utter_greet + - user: | + not good + intent: mood_unhappy + - action: utter_cheer_up + - action: utter_did_that_help + - user: | + not really + intent: deny + - action: utter_goodbye + +- story: sad path 3 + steps: + - user: | + hi + intent: greet + - action: utter_greet + - user: | + very terrible + intent: mood_unhappy + - action: utter_cheer_up + - action: utter_did_that_help + - user: | + no + intent: deny + - action: utter_goodbye + +- story: say goodbye + steps: + - user: | + bye-bye! + intent: goodbye + - action: utter_goodbye + +- story: bot challenge + steps: + - user: | + are you a bot? + intent: bot_challenge + - action: utter_iamabot