AIML-Tags

Vorsicht mit dem srai-Tag!

Richard Wallace hat vor kurzem einen kurzen Eintrag über die Risken des srai-Tags im AliceBlog veröffentlicht.

Alicebot-Blog: Safe Reductions and Dangerous ones

Das Problem „infinite recursion“ - Endlosschleifen durch fehlerhafte srai-Rekursion, die den Bot killen - tritt immer wieder auf, wenn AIML-Dateien nicht richtig durchgeprüft werden.

Was macht das srai-Tag?

Mit dem srai-Tag kann man sich für ähnliche Inputs eine Menge Schreibarbeit sparen. Als Teil des Templates übergibt es eine bestimmte Zeichenkette erneut an die Matchingroutine und ruft eine andere Category auf.

Beispiel:

Wir haben eine category für „Ich heisse *“.
Natürlich könnte man den ganzen Sermon mit Variablen zur Abspeicherung des Benutzernamens, unterschiedliche Begrüßungen per Randomizer etc. nochmals für „Mein Name ist *“ durchhecheln...
Schneller ginge es mit folgendem Code: (ich lasse die spitzen Klammern weg, weil mein Blogsystem sonst anfängt zu spinnen Winking )

category
pattern ICH HEISSE * /pattern
template BOTANTWORTMITSPEICHERVARIABLEUSW. /template
/category

category
pattern MEIN NAME IST * /pattern
template srai ICH HEISSE star/ /srai /template
/category


Das srai-Tag innerhalb des Templates ruft das Matching mit „ICH HEISSE * “ und dem Rest der Eingabe in der Variable star/ erneut auf.
„Mein Name ist Christian“ ruft somit die gleiche category auf wie „Ich heisse Christian“, man muss den gesamten Code aber nur einmal vollständig schreiben und spart sich Redundanzen durch copy-and-paste Orgien.

Eigentlich eine elgegante Sache, doch kann man sich mit diesem Tag auch sehr leicht eine Menge Ärger in Form von Endlosschleifen einhandeln, die den Bot entweder in die Fangroutine nach Überschreitung einer bestimmten Zahl an Iterationen laufen lassen (Program D besitzt z.B. eine solche Routine, die die Notbremse bei sich totlaufenden Matchings zieht und die generische Category matcht) oder ihn aber komplett killen, wenn der verwendete Interpreter diesen Sicherheitsmechanismus nicht besitzt. Der Ärger mit dem Provider ist dann ebenfalls vorprogrammiert, denn die CPU-Last im Server wird dann gigantisch...ein amoklaufender Alicebot kann einen normalen Rackserver binnen Sekunden in den Denial-Of-Service fahren...inklusiver aller Kunden, mit denen man sich den Server teilt Winking
Ja, das geht ...fragt nicht... Winking


cd

Automatisches Lernen in AIML

Die folgende Info könnte vielleicht einige Kopfschmerzen vermeiden:

Dr. Richard Wallace hat im offiziellen Alicebot-Blog vor kurzem auf die learn.aiml von Square Bear verwiesen.
Diese selbst zu verwenden ist nicht ganz trivial!

1. Sie ist nur für die englische Syntax gedacht (wenn ich mal ein paar ruhige Minuten habe, werde ich mal eine Übersetzung bauen)

2. Sie ist -und das ist so nirgendwo explizit dokumentiert- NUR mit Pandorabots kompatibel!

Der Grund:

Pandorabots verwendet einen modifizierten AIML-Interpreter, der das learn-tag anders interpretiert.
Die offizielle AIML 1.0.1-Spezifikation verwendet dieses zum (Nach-)Laden von AIML-Dateien, entweder beim Hochfahren des Bots oder durch bestimmte Schlüsselwörter. Auch kann man damit eine Kategorie bauen, die zur Laufzeit modifizierte AIML-Dateien neu lädt, sodass man nach Änderungen am Bot den Prozess nicht neu starten muss.

Pandorabots hingegen hat dieses Tag dahingehend modifiziert, dass es eine neue Kategorie mittels Variablen erstellt. Square Bear hat in seiner learn.aiml die Möglichkeit, dem Bot neue Fakten beizubringen, sehr elegant gelöst. Die Datei funktioniert aber NUR mit einen Bot, der auf Pandorabots läuft!!
Diese Datei KANN also mit anderen Interpretern, wie Alice-D usw. NICHT FUNKTIONIEREN.

cd

Variablen vergleichen in AIML

Hallo!

So, mal wieder was für die ALICE-Community.
Es gibt ja in der Originalspezifikation von AIML keine Möglichkeit, den Inhalt zweier Variablen abzugleichen.
Steve Worswick stellt hier eine AIML-Datei zur Verfügung, mit der das doch geht. Ein recht komplexer, aber clever gelöster Weg über symbolische Reduktion und Anlegen einiger Kategorien...
Schaut Euch den Code mal an, dann wird es klar.

cd

Komplexe Funktionen in AIML

Ein desöfteren auftretendes Problem ist die Beschwerde, dass AIML zu wenig Möglichkeiten böte, komplexere Dinge in die Ausgabe des Bots mit einzuflechten. Das liegt daran, dass die Leute zwei sehr mächtige (aber auch gefährliche!) Tags entweder nicht kennen oder deren Macht nicht voll verstehen.

1. Javascript

Ein AIML-Interpreter, der die Spezifikation voll erfüllt, kann eingebettetes Javascript verarbeiten. Dies alleine lässt bereits eine Menge an komplexen Funktionen zu, wenn man Javascript in den Templates verwendet.

2. Das SYSTEM-Kommando

Wohl das mächtigste, aber auch gefährlichste Tag in der AIML-Spezifikation. Es ist Alice damit möglich, durch Patterns getriggert Shellkommandos aufzurufen (macht am meisten Sinn, wenn Alice als Serverprozess läuft) und den Output in die Antwort mit einzuarbeiten. Auf diese Weise kann man auch Shellscripte ausführen lassen. Ich habe mal ein kleines AIML-Set gebaut, mit dem man soetwas wie eine Systemfernwartung realisieren kann. Die Frage "Gibst du mir bitte die Serverstatistik für Januar von drossmann.de?" startet darüber dann z.B. ein Webalizer-Script, der Monat und der Domainname (falls mehrere Domains auf dem gleichen Server laufen) werden als Parameter übernommen und der Bot haut dann die entsprechende Seite raus.
Mit dem Tag sind noch komplexere Sachen möglich, z.B. das Starten eines FTP-Jobs per remote und sogar (wenn man wahnsinnig genug ist) Reboot und Shutdown des Servers. Jedes shellkommando kann auch von Alice ausgelöst werden.
Nimmt man eine Wildcard geht sogar die Funktion "Führe bitte X aus" und was immer für X steht, wird direkt an die bash (oder welche Shell auch immer läuft) übergeben.
Wer dieses Tag nutzt, sollte sicher sein, dass er weiß, was er tut. Die Kommandos werden mit den Rechten des aufrufenden Prozesses ausgeführt. Wer also Alice mit Rootrechten laufen läßt, gibt ihr mit dem Tag auf Shellebene auch Rootrechte!!!!
Also lieber bleibenlassen oder Alice einen eigenen User anlegen, unter dessen Rechten sie dann läuft. Einige Sachen wie "wie ist nochmal die Syntax von X?" zu fragen und die manpage von Alice zu bekommen, sind schon recht cool.
Ich übernehm aber keine Verantwortung dafür, wenn Ihr Euch den Server durch ne amoklaufende Rekursion plattmacht Winking

cd

Liste aller AIML-Tags

Könnte vielleicht hilfreich für zukünftige Botmaster sein.

Eine Liste aller gültigen AIML-Tags für AIML 1.0 gibt es hier.

cd