Das AIML Praxisbuch

Chatbots selbst erstellen

Inhalt

  1. Was ist AIML

  2. Die wichtigsten Elemente - AIML in der Praxis

  3. Normierung und Vereinfachung

  4. Wildcards in AIML

  5. Fortgeschrittene Beispiele und Techniken (coming soon)

  6. Referenz (coming soon)

  7. Anhang


Aktuelles Kapitel:

Platzhalter (Wildcards)

    Platzhalter (Wildcards)

    In AIML können verschiedene Platzhalter (auch "Wildcards" oder "Joker" genannt) verwendet werden. Dadurch müssen Benutzereingaben nicht exakt passen, sondern können in Teilen unscharf formuliert werden. So können zahlreiche Eingabe-Variationen mittels einer einzigen category beantwortet werden.

    Hinweis:
    Wildcards können nur ganze Worte repräsentieren, nicht aber einzelne Zeichenfolgen innerhalb von Worten.

    Der * Platzhalter

    Das *-Zeichen kann im pattern als Platzhalter für ein oder mehrere Wörter der Benutzereingabe verwendet werden.

    Das Pattern "HALLO *" würde alle der folgenden Eingaben fangen:

    Hallo Leute!
    Hallo Peter.
    Hallo und guten Morgen!

    Die Eingabe "Hallo" gehört nicht dazu, da das *-Zeichen mindestens für ein weiteres Wort stehen muss.

    Der ^ Platzhalter

    Das ^-Zeichen kann im pattern als Platzhalter für kein oder mehrere Wörter der Benutzereingabe verwendet werden.

    Das Pattern "HALLO ^" würde also alle der folgenden Eingaben fangen:

    Hallo.
    Hallo Leute!
    Hallo Peter.
    Hallo und guten Morgen!

    Die Eingabe "Hallo" gehört dieses Mal mit dazu, weil das ^-Zeichen im Gegensatz zum * auch für kein Wort stehen kann.

    Priorität der Platzhalter

    In vorherigen Beispielen würden drei der Eingaben sowohl vom pattern "HALLO *" als auch von "HALLO ^" gefangen werden. Damit es eindeutig ist, welches der beiden pattern aktiviert wird, sind für die Platzhalter unterschiedliche Prioritäten definiert. Das ^-Zeichen gewinnt hierbei beispielweise gegenüber dem *-Zeichen.

    Die verschiedenen Platzhalter in AIML werden in folgender, aufsteigender Priorität verarbeitet (am Beispiel der Eingabe "Hallo Leute!"):

    graph TD; A["HALLO *
    1 oder mehr Worte
    niedrige Priorität"]-->B B["HALLO ^
    kein oder mehr Worte
    niedrige Priorität"]--> C C["HALLO LEUTE
    Exakte Übereinstimmung
    mittlere Priorität
    "]--> D D["HALLO _
    1 oder mehr Worte (wie *)
    hohe Priorität
    "]--> E E["HALLO #
    0 oder mehr Worte (wie ^)
    hohe Priorität"]--> F F["HALLO $LEUTE
    Exakte Übereinstimmung
    maximale Priorität"]

    Exakte Übereinstimmung

    Wenn das pattern exakt zur Eingabe des Benutzers passt und keine Platzhalter enthält, hat es Vorrang vor passenden pattern, welche die Platzhalter * oder ^ verwenden.

    Der _ Platzhalter

    Das _-Zeichen kann im pattern als Platzhalter für ein oder mehrere Wörter der Benutzereingabe verwendet werden.

    Der # Platzhalter

    Das #-Zeichen kann im pattern als Platzhalter für kein oder mehrere Wörter der Benutzereingabe verwendet werden.

    Die $ Priorität

    Das $-Zeichen stellt kein Wildcard dar, sondern kann solche punktuell außer Kraft setzen. Man kann damit vorgeben, dass ein pattern mit einem bestimmten Wort vorrangig gefunden wird. Das kann sinnvoll sein, wenn ein Pattern mit _ oder # Wildcard eine exakte Übereinstimmung im Eingabe-pattern verdeckt.

    Angenommen das pattern "# BOCHUM" fängt alle Eingaben, die mit "Bochum" enden, dann wäre das pattern "VFL BOCHUM" wirkungslos, da es eine niedrigere Priorität hat.

    In diesem Fall kann man dem Wort "VFL" mittels des $-Zeichens eine maximale Priorität geben (also "$VFL BOCHUM"), wodurch dieser einzelne Fall nicht mehr durch das #-pattern gefangen wird.

    Mehrere Platzhalter

    In einem pattern können auch mehrere Platzhalter verwendet werden. Diese können Innerhalb des template mit dem star-Element abgefragt werden. Auch wenn das Element etwas verwirrend star heißt, entspricht es allen Platzhaltern und nicht nur dem *-Platzhalter.

    Mehrere Platzhalter können über ihre Index-Nummer innerhalb des pattern unterschieden werden - der erste Platzhalter erhält dabei den Index 1. Ohne Angabe einer Index-Nummer wird immer der erste Platzhalter verwendet.

    <category>
        <pattern>* FINDE ICH *</pattern>
        <template>Toll, dass Sie <star/> <star index="2"/> finden!</template>
    </category>
    

    Die "Ultimate Default Category" (UDC)

    Die "Ultimate Default Category" (UDC) ist eine Antwort für den Fall, dass keine andere passende Kategorie gefunden werden kann. Sie enthält als pattern nur das Stern-Zeichen und fängt die komplette Eingabe des Benutzers.

    <category>
        <pattern>*</pattern>
        <template>Das habe ich jetzt leider nicht verstanden.</template>
    </category>