Python Chatbot-Fehler: Wo liegt hier das Problem?
Ich programmiere jetzt seit mehreren Stunden diesen Chatbot und finde den Fehler nicht, warum er es nicht schafft, auf die Frage: gut die richtige Antwort zu geben.
Hier ist mein Code und wenn ihr den Fehler findet, wäre ich euch sehr dankbar.
main.py:
class NeuroSama:
def __init__(self):
self.known_topics = self.load_topics("knowledge_base.txt")
self.conversation_history = []
self.load_conversation_log("conversation_log.txt")
def respond(self, message):
response = ""
# Hier wird die Eingabe in Kleinbuchstaben umgewandelt, bevor sie verarbeitet wird
message = message.lower()
if self.is_new_topic(message):
response = "Nein, was ist " + message + "?"
else:
response = self.get_response_from_file(message, "generate_response.py")
self.conversation_history.append({"input": message, "output": response})
return response
def is_new_topic(self, topic):
return topic.lower() not in self.known_topics
def get_response_from_file(self, topic, filename):
try:
response_module = __import__(filename.split('.')[0])
return response_module.generate_response(topic, self.conversation_history)
except FileNotFoundError:
return "Die Datei wurde nicht gefunden."
except AttributeError:
return "Die Funktion wurde nicht gefunden."
def save_conversation(self, filename):
with open(filename, 'w') as file:
for convo in self.conversation_history:
file.write(f"Eingabe: {convo['input']}\n")
file.write(f"Antwort: {convo['output']}\n")
file.write("\n")
def load_topics(self, filename):
known_topics = set()
try:
with open(filename, 'r') as file:
for line in file:
known_topics.add(line.strip().lower())
except FileNotFoundError:
print("Datei nicht gefunden. Neue Datei wird erstellt.")
open(filename, 'w').close()
return known_topics
def load_conversation_log(self, filename):
try:
with open(filename, 'r') as file:
for line in file:
if line.startswith("Eingabe:"):
input_text = line[len("Eingabe:"):].strip()
output_text = file.readline()[len("Antwort:"):].strip()
self.conversation_history.append({"input": input_text, "output": output_text})
except FileNotFoundError:
print("Konversationsprotokoll nicht gefunden.")
# Beispielnutzung
neuro_sama = NeuroSama()
while True:
user_input = input("Du: ")
if user_input.lower() == 'exit':
neuro_sama.save_conversation("conversation_log.txt")
break
response = neuro_sama.respond(user_input)
print("Neuro-Sama:", response)
generate_response.py:
def generate_response(topic, conversation_history):
if len(conversation_history) > 0:
last_input = conversation_history[-1]['input'].lower()
if 'hallo' in last_input:
return "Hallo zurück!"
elif any(variant in last_input for variant in ['gut', 'gutes', 'gutem', 'guter']):
return "Es ist großartig zu hören, dass es dir gut geht!"
else:
return "Das ist interessant!"
else:
return "Ich bin mir nicht sicher, wie ich darauf reagieren soll."
Hier sind die Antworten, die ich derzeit bekommen habe:
= RESTART: C:\Users\####\Desktop\####\main.py
Du: hallo
Neuro-Sama: Hallo zurück!
Du: Hallo
Neuro-Sama: Hallo zurück!
Du: gut
Neuro-Sama: Nein, was ist gut?
Du:
= RESTART: C:\Users\####\Desktop\####\main.py
Du: gut
Neuro-Sama: Nein, was ist gut?
Du: Gut
Neuro-Sama: Nein, was ist gut?
Du:
1 Antwort
Vom Beitragsersteller als hilfreich ausgezeichnet
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Programmiersprache, Informatik
So lange in knowledge_base.txt keine Zeile mit dem Wort gut existiert, wird das Programm diese Eingabe immer als neues, unbekanntes Thema auffassen.
Des Weiteren kannst du mit Anwendungsfällen rechnen, bei denen du eine nicht erwartete Antwort erhältst, denn beim Generieren einer Antwort übergibst du der generate_response-Funktion die Konversationshistorie, die die allerneueste/aktuelle Nachricht noch nicht enthält.