AIML (Artificial Intelligence Markup Language) – język znaczników oparty na języku XML, służący do tworzenia baz wiedzy chatterbotów, opracowany pierwotnie przez hakera, dr. Richarda S. Wallace’a, a później rozwijany również przez społeczność wolnego oprogramowania ALICE w latach 1995–2000.

Elementy języka AIML edytuj

Język AIML zawiera kilka różnych elementów. Najważniejsze z nich są opisane poniżej.

Category edytuj

Kategorie (<category>) są najważniejszymi znacznikami AIML. Kategorie składają się z przynajmniej dwóch elementów: znacznika <pattern> oraz znacznika <template>. Poniżej znajduje się prosty przykład zastosowania znacznika <category>:

<aiml version="1.0.1">
<category>
  <pattern>HELLO</pattern>
  <template>Witam.</template>
</category>
</aiml>

Baza wiedzy podana w przykładzie jest zgodna z wersją 1.0.1 dokumentacji języka AIML.

Pattern edytuj

Wzorzec (<pattern>) jest ciągiem znaków dopasowanych do jednego lub więcej zapytań użytkownika. Wzorzec w stylu:

ILE MASZ LAT

zawiera tylko jedno zapytanie, ignorując: „jak masz na imię”. Wzorce mogą również zawierać symbol wieloznaczny ('*'), który odpowiada jednemu lub kilku wyrazom. Wzorzec w stylu:

ILE MASZ *

dopasuje do skończonej liczby zapytań np.: „ile masz lat”, „ile masz zwierzaków”, „ile masz par butów” itd.

Pattern języka AIML jest prostszym i o wiele mniej skomplikowanym językiem dla wzorów niż wyrażenia regularne.

Template edytuj

Szablony (<template>) określają reakcje na wzorzec. Szablony mogą być całą odpowiedzią, np.

MAM NA IMIĘ ASIA.

W szablonach można używać również zmiennych np.

MAM NA IMIĘ <bot name="name"/>.

która zastąpi nazwę bota w zdaniu, lub

POWIEDZIAŁEŚ MI, ŻE MASZ <get name="user-age"/> LAT.

która zastąpi user-age (jeśli zostało to już wcześniej w rozmowie z botem podane) wiekiem użytkownika.

Znacznik template zawiera podstawowe elementy formatowania tekstu, odpowiedzi warunkowe (if-then/else) oraz losowe odpowiedzi.

Szablony mogą przekierowywać do innych wzorców przy użyciu znacznika <srai>. Może być to wykorzystywane w przypadku synonimicznych wzorców, jak w przykładzie poniżej

<category>
  <pattern>JAK MASZ NA IMIĘ</pattern>
  <template>MAM NA IMIĘ <bot name="name"/>.</template>
</category>
<category>
  <pattern>JAK SIĘ NAZYWASZ</pattern>
  <template>
    <srai>JAK MASZ NA IMIĘ</srai>
  </template>
</category>

Pierwsza kategoria zawiera prostą odpowiedź na pytanie „jak masz na imię”, wstawiając w odpowiedzi nazwę bota. Druga kategoria przekieruje zapytanie „jak się nazywasz” do kategorii, zawierającej zapytanie „jak masz na imię” i zwróci odpowiedź. Oba wyrażenia są równoważne.

Linki zewnętrzne edytuj