ELIZA Chatbot — Dein eigener Therapie-Roboter

lock
Bevorstehend

Bauen Sie einen einfachen Chatbot nach dem Vorbild des berĂĽhmten ELIZA-Programms. Sie erhalten einen Grundcode und erweitern ihn mit eigenen Regeln.

Ziele dieses Moduls
  • Sie können die Funktionsweise eines einfachen regelbasierten Chatbots erklären.
    Verstehen
  • Sie können ein Python-Programm mit Dictionary, Schleife und String-Manipulation umsetzen.
    Anwenden
  • Sie können den Chatbot mit eigenen Regeln und Funktionen erweitern.
    Kreieren
label
PythonKIChatbotStrings

In diesem Modul erstellen Sie einen einfachen Chatbot in Python, der nach dem Prinzip des historischen ELIZA-Programms funktioniert. Sie erhalten einen funktionierenden Grundcode und erweitern ihn Schritt für Schritt mit eigenen Schlüsselwörtern, Antworten und einer Reflexions-Funktion.

Was ist ELIZA?

ELIZA ist eines der berĂĽhmtesten Programme der Informatikgeschichte. Es wurde 1966 von Joseph Weizenbaum am MIT entwickelt und simuliert einen Psychotherapeuten.

Das Besondere: ELIZA versteht nichts — es sucht nur nach Schlüsselwörtern in der Eingabe und gibt vorgefertigte Antworten zurück. Trotzdem hatten Testpersonen das Gefühl, das Programm würde sie wirklich verstehen!

In diesem Modul bauen Sie Ihren eigenen kleinen ELIZA-Chatbot in Python.

Note

Wie funktioniert ELIZA?

Die Idee ist einfach:

  1. Das Programm liest eine Eingabe des Benutzers.
  2. Es sucht nach Schlüsselwörtern in der Eingabe.
  3. Wenn es ein Schlüsselwort findet, wählt es eine zufällige passende Antwort.
  4. Falls kein SchlĂĽsselwort passt, gibt es eine Standardantwort zurĂĽck.

Diese Schleife läuft endlos, bis der Benutzer "tschüss" schreibt.

import random

def begruessung():
    print("ELIZA: Hallo! Ich bin Eliza, dein Therapie-Roboter.")
    print("ELIZA: Erzähle mir, was dich beschäftigt.")
    print("ELIZA: (Schreibe 'tschĂĽss' zum Beenden.)")
    print()

regeln = {
    "hallo": [
        "Hallo! Wie geht es dir heute?",
        "Hi! Schön, dass du da bist."
    ],
    "traurig": [
        "Warum fĂĽhlst du dich traurig?",
        "Erzähle mir mehr darüber."
    ],
    "glĂĽcklich": [
        "Das ist schön zu hören!",
        "Was macht dich glĂĽcklich?"
    ],
    "mĂĽde": [
        "Warum bist du mĂĽde?",
        "Hast du gut geschlafen?"
    ],
    "angst": [
        "Wovor hast du Angst?",
        "Angst ist ein wichtiges Gefühl. Erzähl mehr."
    ],
    "schule": [
        "Wie ist es in der Schule?",
        "Was passiert in der Schule?"
    ],
    "mutter": [
        "Erzähl mir mehr über deine Mutter.",
        "Wie ist deine Beziehung zu deiner Mutter?"
    ],
    "vater": [
        "Erzähl mir mehr über deinen Vater.",
        "Wie ist deine Beziehung zu deinem Vater?"
    ],
}

standard_antworten = [
    "Erzähl mir mehr darüber.",
    "Das ist interessant.",
    "Kannst du das genauer erklären?",
    "Wie fĂĽhlt sich das an?",
    "Mmmh, weiter.",
]

def antwort_finden(eingabe):
    eingabe = eingabe.lower()
    for schluesselwort, antworten in regeln.items():
        if schluesselwort in eingabe:
            return random.choice(antworten)
    return random.choice(standard_antworten)

def main():
    begruessung()
    while True:
        eingabe = input("Du: ")
        if eingabe.lower() in ["tschĂĽss", "bye", "auf wiedersehen"]:
            print("ELIZA: Auf Wiedersehen! Bis zum nächsten Mal.")
            break
        antwort = antwort_finden(eingabe)
        print("ELIZA:", antwort)

main()

Challenge

Dein Auftrag: Erweitere ELIZA!

Der obige Code ist ein funktionierender Chatbot — aber er ist noch recht einfach. Ihre Aufgabe ist es, ihn zu erweitern.

Teil 1 — Basis (alle)

  • Kopiere den Code in eine Datei eliza.py und teste ihn.
  • FĂĽge mindestens 5 neue SchlĂĽsselwörter mit jeweils 2–3 Antworten zum regeln-Dictionary hinzu.
  • Ăśberlege: Welche Themen passen zu einem Therapie-Roboter? (z.B. Freunde, Liebe, Familie, Stress, Zukunft...)

Teil 2 — Mittel

  • FĂĽge eine Reflexions-Funktion hinzu: Wenn der Benutzer "Ich bin traurig" schreibt, soll ELIZA antworten: "Warum bist du traurig?" — also den Satz umdrehen.
    Tipp: Nutze eingabe.replace() um "Ich bin" durch "Warum bist du" zu ersetzen.
  • FĂĽge mindestens 3 neue Standardantworten hinzu, die noch natĂĽrlicher klingen.

Teil 3 — Fortgeschritten (optional)

  • Lass ELIZA den Namen des Benutzers merken und in Antworten verwenden: "Sag mir, [Name], was beschäftigt dich?"
  • Baue einen Zähler ein: Wenn ein SchlĂĽsselwort zum 3. Mal erwähnt wird, reagiert ELIZA anders ("Das hast du schon oft erwähnt...").

Warning

Häufige Fehler

  • Endlosschleife ohne Ausstieg: Vergiss nicht, die while True-Schleife mit break zu beenden, wenn der Benutzer "tschĂĽss" schreibt.
  • Gross-/Kleinschreibung: Der Code wandelt die Eingabe mit .lower() in Kleinbuchstaben um. Die SchlĂĽsselwörter im Dictionary mĂĽssen ebenfalls kleingeschrieben sein.
  • Dictionary-Syntax: Jedes SchlĂĽsselwort hat eine Liste von Antworten — achte auf die eckigen Klammern [...] und die Kommas.
  • input() im Terminal: Das Programm muss im Terminal gestartet werden (python eliza.py), nicht in einer IDE ohne Console.

# Tipp fĂĽr die Reflexions-Funktion (Teil 2):

def reflexion(eingabe):
    eingabe = eingabe.lower()
    if "ich bin" in eingabe:
        teil = eingabe.replace("ich bin", "")
        return "Warum bist du" + teil + "?"
    if "ich habe" in eingabe:
        teil = eingabe.replace("ich habe", "")
        return "Warum hast du" + teil + "?"
    return None

# In antwort_finden() einbauen:
def antwort_finden(eingabe):
    # Zuerst Reflexion prĂĽfen
    reflex = reflexion(eingabe)
    if reflex:
        return reflex
    # Dann normal weiter
    eingabe_lower = eingabe.lower()
    for schluesselwort, antworten in regeln.items():
        if schluesselwort in eingabe_lower:
            return random.choice(antworten)
    return random.choice(standard_antworten)

Warum hatten die Testpersonen von ELIZA das Gefühl, das Programm würde sie verstehen — obwohl es nur nach Schlüsselwörtern sucht? Was sagt das über uns Menschen aus?

Antwort wird geladen...

Mindestens 50 Zeichen, Maximal 1000 Zeichen (Aktuell: 0)

Lokal gespeichert — Login, um Antworten dauerhaft zu sichern.