AIML (Artificial Intelligence Markup Language) został opracowany w latach 1995 – 2000 przez dr Richarda S. Wallace na potrzeby projektu A.L.I.C.E. Służy do budowy baz wiedzy programów konwersacyjnych. Dr Wallace, tworząc AIML, przyjął następujące założenia:
Baza wiedzy stworzona w języku AIML opiera się na metodzie słów kluczowych. Program wyszukuje w treści wpisanej przez użytkownika odpowiednich słów kluczowych i znajduje w swojej bazie reakcje na te słowa. Podstawową jednostką bazy wiedzy jest kategoria (category). Każda kategoria składa się z wypowiedzi użytkownika zwanej wzorcem (pattern) i odpowiedzi chatterbota na ten wzorzec nazwanej szablonem (template). W ramach jednej kategorii może wystąpić tylko jeden wzorzec.
Przykład prostej bazy wiedzy, składającej się z jednej tylko kategorii znajduje się poniżej. Analizując ją można zauważyć, że jeśli użytkownik napisze do wirtualnego rozmówcy „Witaj” program odpowie mu „Cześć”.
<aiml>
<category>
<pattern>WITAJ</pattern>
<template>Cześć</template>
</category>
</aiml>
W bazie wiedzy utworzonej w języku AIML może być nieograniczona liczba kategorii. Aby ułatwić tworzenie bazy wiedzy AIML zawiera szereg dodatkowych znaczników. Niektóre z nich wraz z ich znaczeniem zawarto w tabeli 1.
Tabela 1
Wybrane znaczniki języka AIML
Znacznik |
Znaczenie |
<aiml> |
rozpoczyna i kończy dokument AIML |
<category> |
oznacza jednostkę bazy wiedzy |
<pattern> |
zawiera wzorzec wypowiedzi użytkownika |
<template> |
zawiera odpowiedź bota na dany wzorzec |
<srai> |
pozwala na definiowanie synonimów |
<star/> |
pozwala pobrać fragment wypowiedzi użytkownika i umożliwiający stosowanie go w treści wypowiedzi chatterbota |
<input> |
pozwala do sięgnięcia do wcześniejszych odpowiedzi użytkownika |
<random> |
umożliwia losowe wybranie jednej z kilku odpowiedzi chatterbota |
<that> |
pozwala na sprawdzenie kontekstu wypowiedzi |
<set> |
przypisuje do zmiennej fragment wypowiedzi użytkownika |
<get> |
pozwala na umieszczenie w dowolnym miejscu zapisanej wcześniej wypowiedzi użytkownika |
<think> |
powstrzymuje program przed wypisaniem na wyjście umieszczonych pomiędzy nim działań chatterbota |
<topic> |
pozwala grupować kategorie w grupy tematyczne |
<condition> |
umożliwia stosowanie wyrażeń warunkowych |
<formal> |
formatuje tekst w taki sposób, że każde słowo rozpoczyna się wielką literą |
<sentense> |
różnicuje wypowiedzi chatterbota na zdania |