Wenn 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.
<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:
- Glaube mir und lese instructions.html
- 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…
Hört sich interessant an, werde ich mir auf jeden Fall mal ein bisschen näher angucken
Ich bin also der Gott des deutschen AIML? Naja…Halbgott vielleicht 😉
So doof GermanAlice auch ist, scheinbar ist sie nicht totzukriegen…
Christian
@Christian Droßmann Viele Menschen sind dööfer 😉 … Vielen Dank für Deine grosse Arbeit.
Pingback: Im Olymp der KI | GermanAlice