AIML: Intelligenz im XML

BrainWenn man schon keine eigene Intelligenz besitzt, ist man froh, dass es sie auch in künstlicher Form gibt. Bis vor einiger Zeit wurde ziemlich proprietär rumgewurstelt, aber nun gibt es AIML, die Artificial Intelligence Markup Language die mit XML und Standardisierung das Verwenden unter verschiedenen Plattformen möglich macht. XML und Intelligenz ist also doch nicht per se ein Widerspruch.

Interessant ist das Ziel dieser Bemühungen (wie auf Pandorabots beschrieben):

Inhalte zu erstellen, die den Besucher dazu veranlassen so lange wie möglich mit dem Bot zu reden.

Auf der Basis von AIML wurden verschiedene Interpreter für verschiedene Programmiersprache geschaffen, Inhaltsdateien erstellt, die alle von der offiziellen Homepage oder der Tools Page heruntergeladen werden können.

AIML als XML (Gimme Code!)

AIML ist ziemlich komplex. Es gibt die Möglichkeit einer Unterteilung in Themen, der Extraktion von Mustern, der spezifischen Auswahl der Antworten etc, etc… Die englischen Übersichten und Tutorials gehen tiefer in die Materie.

AIML Tags

Die wichtigsten Tags von AIML:

aiml
Der Root-Tag, der die AIML Definitionen umschliesst.
category
Umschliesst eine Benutzereingabe und Bot-Reaktionen darauf.
pattern
Muster einer Benutzereingabe. Als Wildcards gibt es _ und *, die sich in der Priorität unterscheiden. Pattern werden normalerweise ohne Satzzeichen eingegeben.
template
Antworten des Bots.
set und get
Definiere Variablen: So können Dinge, die der Benutzer gesagt hat gespeichert werden.
srai
Schaue bei einem anderen Pattern nach, was Du tun sollst.
bot
Lese eine Eigenschaft des Bots aus.
star
Alles was an Stelle des Sterns geschrieben wurde.
that
Der letzte Text des Bots.
topic
Diese Kategorien werdun nur bei diesem Thema ausgewertet.

Das Beispiel

Ein kleines Beispiel mit Leckereien.

<?xml version="1.0" encoding="UTF-8"?>
<aiml>
    <category>
        <pattern>*</pattern>
        <template>
            <random>
                <li>Warum sprichst Du mit mir?</li>
                <li>Was würdest Du lieber tun als hier am Computer zu sitzen?</li>
                <li>Wie geht es Deinen Freunden?</li>
            </random>
        </template>
    </category>
   
    <category>
        <pattern>HALLO</pattern>
        <template>Tachauch</template>
    </category>
   
    <category>
        <pattern>HAI</pattern>
        <template><srai>HALLO</srai></template>
    </category>

    <category>
        <pattern>WAS HEISST DAS</pattern>
        <template>Ich habe "<that/>" gesagt...</template>
    </category>

    <category>
        <pattern>WIE HEISST DU</pattern>
        <template>Ich heisse <bot name="name" />. Wie ist Dein Name?</template>
    </category>
   
    <category>
        <pattern>ICH HEISSE *</pattern>
        <template>Hallo auch <set name="name"><star/></set>.</template>
    </category>

    <category>
        <pattern>WIE HEISSE ICH</pattern>
        <template><srai>WIEHEISSEICH <get name="name" /></srai></template>
    </category>
    <category>
        <pattern>WIEHEISSEICH *</pattern>
        <template>Denkst Du ichbinblödoderwas? Du heisst <get name="name" />.</template>
    </category>
    <category>
        <pattern>WIEHEISSEICH undefined</pattern>
        <template>Das weiss ich nicht, sagst Du es mir?</template>
    </category>
</aiml>

Die erste Kategorie steht für die Ausgaben, wenn der Roboter was nicht begreift. Aus den zur Verfügung stehenden Pattern wird per Zufall eines ausgelesen. Die zweite Kategorie reagiert auf ein „Hallo“ des Benutzers. In der dritten Kategorie wird gesagt, dass „Hai“ dem „Hallo“ entspricht. In der nächsten Kategorie wird auf Nachfragen eingegangen (mittels that) und in der Kategorie darunter wird auf die Botdefinitionsvariable name zugegriffen. Jeder Bot kann mit vielen verschiedenen Eigenschaften ausgestattet werden, die über diesen Tag ausgelesen werden können. Das Pattern mit „ICH HEISSE“ speichert den Namen des Gesprächspartners in der Variable name.

Nun kommt was Spannendes: Wenn der Gesprächspartner fragt wie er selbst denn heisst, wird jenachdem, ob der Name bekannt ist oder nicht, in verschiedene Kategorien verwiesen.

Ein mögliches Gespräch mit diesem Bot:

M: Hallo
C: Tachauch
M: Hai
C: Tachauch
M: Was heisst das?
C: Ich habe „Tachauch“ gesagt…
M: Sprich was.
C: Was würdest Du lieber tun als hier am Computer zu sitzen?
M: Wie heisst Du?
C: Ich heisse Program E. Wie ist Dein Name?
M: Wie heisse ich?
C: Das weiss ich nicht, sagst Du es mir?
M: Ich heisse Skaldrom.
C: Hallo auch Skaldrom.
M: Wie heisse ich?
C: Denkst Du ichbinblödoderwas? Du heisst Skaldrom.

AIML in PHP (Gimme Even Moarrr Code!)

Program E

Program E ist die Implementierung eines kompletten Bots in PHP. Es bietet eine datenbankgestützte Chatbotumgebung. Leider Ist die Entwicklung etwas eingeschlafen.

Die Installation ist machbar, folgende Hinweise können helfen:

  1. Glaube mir und lese instructions.html
  2. in src/admin/dbprefs.php müssen nicht nur die Datenbankverbindung, sondern auch der Pfad der startup.xml konfiguriert werden:
    $rootdir="../../aiml/";

Leider sind die Fehlermeldungen etwas knapp geraten. Sollte er den Bot nicht einfügen können (Loading bot: 0)stimmt wahrscheinlich etwas mit der Datenbankverbindung nicht.

Um deutsch zu quasseln, einfach die german-standalone von oben in das aiml-Verzeichnis kopieren und nochmals botloader.php aufrufen.

Projekt Program E in a box

Leider ist Program E ein fertiger Bot und nicht eine Library. Es wäre schön wenn man das Ganze objektorientiert in eigenen Applikationen direkt verwenden könnte. Zum Glück habe ich soviel Zeit.

Tools

Um AIML-Dateien zu editieren gibt es unter Linux leider nichts gescheites. Für Windows sieht Rebecca sehr nett aus.

Will man nur Bots machen, so kann man sie bei Robohosting oder Pandorabots hosten lassen und sich nur mit deren Hirnen auseinandersetzen. Beide bieten nette Snippets an um die Bots auf der eigenen Site zu verwenden.

Für Joomla gibt es ein PlugIn, dass eine einfache Einbindung von Chatbots ermöglicht.

Weiterführende Literatur

Teleopolis hat einen Artikel über AIML und AIML-Bots, die Menschen imitieren. Wie immer halb technisch halb klugscheisserisch… Etwas praktischer geht es bei Linux User zu.

Deutsche AIML Datei

Der Gott des deutschen AIML ist Christian Drossmann. Leider ist der Downloadlink auf der AIML-Homepage futsch, aber von seiner Seite aus kann man sie noch problemlos downloaden. Ebenfalls lustig ist sein Blog, in dem er über die Chats der Besucher seiner Seite mit Alice schreibt.

Ausblick

Irgendwann, ja irgendwann werde ich mich auch noch opencyc zuwenden, das ich unglaublich faszinierend finde…

4 Gedanken zu “AIML: Intelligenz im XML

  1. Hört sich interessant an, werde ich mir auf jeden Fall mal ein bisschen näher angucken

  2. Ich bin also der Gott des deutschen AIML? Naja…Halbgott vielleicht 😉
    So doof GermanAlice auch ist, scheinbar ist sie nicht totzukriegen…

    Christian

  3. Pingback: Im Olymp der KI | GermanAlice

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.