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:

Mehr Übersicht durch Normierung und Vereinfachung

    Mehr Übersicht durch Normierung und Vereinfachung

    Benannte SRAI-Ziele

    Wie Sie bereits wissen, können Sie mit dem Srai-Element mehrere sinngleiche Eingaben des Benutzers auf ein gemeinsames Tempate weiterleiten. Das klappt zu Anfang auch meist sehr gut, wenn es nicht zu viele Weiterleitungen sind und Sie regelmäßig an den AIML Dateien arbeiten.

    Mit der Zeit entstehen aber meist sehr zahlreiche Srai Weiterleitungen. Auch kann es vorkommen, dass man Teile der eigenen AIML Dateien eine längere Zeit nicht bearbeitet und erst mit größerem zeitlichem Abstand wieder weiter daran arbeitet.

    In diesen Fällen kann es sehr aufwändig sein, sich (erneut) einen Überblick über die Reihenfolge der Srai Weiterleitungen zu verschaffen.

    Das folgende Beispiel soll dies verdeutlichen. Da ein Chatbot sich in der Praxis auch mit Beleidigungen befassen muss (Sie wären wahrscheinlich überrascht, wie häufig das vorkommt), bietet es sich an, diese zu Normieren und auf die gleiche Antwort weiter zu leiten:

    Mehrere Weiterleitungen für sinngleiche Eingaben

    <category>
        <pattern>DU BIST DOOF</pattern>
        <template>Das ist nicht aber nicht sehr freundlich von Ihnen.</template>
    </category>
    
    <category>
        <pattern>DUMMKOPF</pattern>
        <template><srai>DU BIST DOOF</srai></template>
    </category>
    
    <category>
        <pattern>DU ARMLEUCHTER</pattern>
        <template><srai>DU BIST DOOF</srai></template>
    </category>
    

    Wie das Beispiel zeigt, besteht die Notwendigkeit, eine der Beleidigungen als Stellvertreter für alle anderen zu wählen. In diesem Fall ist das "DU BIST DOOF". Sie ist hier die einzige Eingabe, welche eine "echte" Antwort gibt und nicht weiterleitet. Die anderen beiden Eingaben leiten per Srai auf diese Eingabe weiter.

    Dieses Vorgehen kann später zu Problemen führen. Wenn Sie später beispielsweise die Eingabe "DU BIST DOOF" verändern, ohne zu bemerken, dass andere Eingaben auf sie weiterleiten, laufen alle alternativen Eingaben ins Leere. Oder falls Sie erfassen für eine weitere Beleidigungs-Eingabe eine neue Antwort, da Ihnen nicht mehr bewusst ist, dass es dazu ein (zentrales) Weiterleitungs-Ziel gibt.

    Optimal wäre hier eine Template-Antwort, welche nicht auf eine Benutzer-Eingabe im Pattern-Element reagiert, sondern über eine ID oder eine Kennung adressiert werden kann. Leider ist dieses Konzept einer Weiterleitung auf eine abstrakt adressierte Antwort in AIML nicht vorgesehen. Ich möchte Ihnen hier aber gern ein Konzept vorstellen, mit welchem man diese Herangehensweise recht gut nachbilden kann.

    Die Idee dabei ist, dass man sich für das Kennzeichnen eines abstrakten Zieles im Pattern-Element eine Zeichenfolge ausdenkt, die als Präfix dienen kann. Oder anders gesagt: Wir grenzen echte Benutzer-Eingaben von den abstrakten "Nicht"-Benutzer-Eingaben durch die Voranstellung einer besonderen Zeichenfolge ab. Diese Zeichenfolge sollte natürlich optimaler Weise in keiner echten Benutzer-Eingabe vorkommen können.

    Für den GaitoBot-AIML-Interpreter ist dafür die Zeichenfolge "TARGET" gewählt worden. Die empfohlene Konvention lautet daher: Wenn mehrere Srai-Weiterleitungen auf die selbe Antwort verweisen sollen, dann sollte das der Inhalt des Pattern lauten "TARGET ID". ID ist dabei die eindeutige Sinn und Zweck dieser Antwort.

    Das klingt auf den ersten Blick nicht ganz leicht verständlich, wird aber sehr schnell klar, wenn wir es auf das oben genannte Beispiel anwenden:

    Mehrere Weiterleitungen für sinngleiche Eingaben

    <category>
        <pattern>DU BIST DOOF</pattern>
        <template><srai>TARGET BELEIDIGUNG</srai></template>
    </category>
    
    <category>
        <pattern>DUMMKOPF</pattern>
        <template><srai>TARGET BELEIDIGUNG</srai></template>
    </category>
    
    <category>
        <pattern>DU ARMLEUCHTER</pattern>
        <template><srai>TARGET BELEIDIGUNG</srai></template>
    </category>
    
    <category>
        <pattern>TARGET BELEIDIGUNG</pattern>
        <template>Das ist nicht aber nicht sehr freundlich von Ihnen.</template>
    </category>
    

    In diesem Beispiel sehen Sie im letzten Pattern eine Benutzereingabe, welche sehr wahrscheinlich nie von einem Benutzer eingegeben wird. Dafür soll der Begriff TARGET am Anfang sorgen. Er ist das Erkennungszeichen, an welchem wir Pattern erkennen, welche als abstraktes Ziel für Srai-Weiterleitungen dienen sollen.

    Ein weiterer Vorteil dieser Konvention ist, dass man durch eine Suche nach TARGET in den AIML-Dateien sehr schnell alle abstrakten Weiterleitungsziele findet. Dies ist besonders hilfreich, wenn man sich nicht mehr sicher ist, zu welchen Themen man bereits solche Ziele erfasst hat.

    Vordefinierte TARGETs im GaitoBot im GaitoBot Interpreter

    Das Wort TARGET kein Bestandteil der AIML Spezifikation, sondern eine selbst gewählte Konvention, um spezielle Antworten zuverlässig kennzeichnen und adressieren zu können. Der GaitoBot-AIML-Editor und -Interpreter unterstützt dieses Konzept darüber hinaus durch einige bereits vordefiniterte Antworten dieser Art. Diese werden vom Interpreter zu bestimmten Anlässen als Benutzereingabe eingespeist.

    Folgende TARGET Pattern werden von GaitoBot direkt unterstützt:

    TARGET BOTSTART

    Jedes Gespräch hat einen Anfang, das ist auch bei eine Chatbot nicht anders. Optimaler Weise begrüßt Ihr Chatbot den Besucher und bietet ihm seine Hilfe an.

    Doch wo soll diese Begrüßung hinterlegt werden? Mit AIML definieren Sie ja primär Antworten auf Benutzereingaben und eine Eingabe hat der Benutzer ja noch nicht getätigt.

    Oft wird dazu als Lösung eine feste Begrüßung außerhalb des AIML-Interpreters hinterlegt. Es wird sozusagen ein Text angezeigt, von dem "so getan wird", als sei er bereits eine Äußerung des Chatbots. Das klingt zunächst nach eine Lösung, bringt aber folgende Nachteile mit sich: