見出し画像

AIML2.0リファレンス

以下の記事を参考に書いてます。

AIML 2.0 Reference

1. AIML2.0リファレンス

このページでは、AIML2.0のPandorabots実装について説明します。このページの要素は、PlaygroundサーバとDeveloperPortalサーバの両方で使用できます。

2. <aiml>

AIMLルート要素は、AIMLコードのブロックを区切ります。他の全ての要素は、ルート要素の子孫である必要があります。

◎ 属性
・version (optional)
ドキュメントが書き込まれるAIMLバージョン。

◎ 使い方

<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
  <!-- AIML code goes here -->
</aiml>

2. <bot />

bot要素は、.propertiesファイルで定義されたカスタムボットプロパティを呼び出すために使用されます。これらの変数は、ボットの全てのユーザーがアクセスできます。

◎ 属性
・name (required)

リコールされるプロパティの名前を指定します。指定された名前でプロパティが存在しない場合、bot要素はdefault-propertyという名前のプロパティの値を返します。

◎ 使い方

<category>
  <pattern>WHAT IS YOUR NAME</pattern>
  <template>My name is <bot name="name" /></template>
</category>

3. <br />

応答文字列に改行を作成します。 HTMLの<br>要素と同じです。

4. <category>

category要素は、AIMLベースのチャットボットの知識の基本単位を区切ります。 非常に広い意味で、単一のカテゴリが入力を受け入れ、出力を返します。

全てのAIML要素(AIMLルート要素とトピック要素を除く)は、categoryブロック内に含まれている必要があります。

◎ 使い方

<category>
  <pattern>HI</pattern>
  <template>Hello world!</template>
</category>

5. <condition>

条件要素は、ボットの応答内にIF-THEN-ELSEタイプの制御フローを作成するために使用されます。これは、述語の値をチェックし、その値に応じて応答を返すことによって行われます。

◎ 属性
・name (required)

値がチェックされる述部の名前を指定します。

◎ 使い方
condition要素は、value属性で記述されたlist要素と組み合わせて使用されます。condition要素で参照されている述語の値が任意のlist要素の値と一致する場合、そのlist要素が返されます。

list要素にvalue属性が含まれていない場合、述語の値に一致する他のlist要素がない場合に返されます。

<category>
  <pattern>DO YOU FIND ME ATTRACTIVE</pattern>
  <template>
    <condition name="gender">
      <li value="male">I find you very handsome.</li>
      <li value="female">I find you very pretty.</li>
      <li>I find you very attractive.</li>
    </condition>
  </template>
</category>

この例では、ボットはgenderという名前の述語の値をチェックします。 述語の値が「male」または「female」の場合、最初の2つのリスト要素のいずれかが返されます。これらの条件のいずれも満たされない場合、3番目のlist要素が返されます。

6. <date />

ユーザーのロケールの日付を返します。

◎ 属性
・format (optional)

返される日付の形式を指定します。これは、UNIXのstrftime関数への引数のように書くことができます。 詳細はこちら

◎ 使い方

<category>
  <pattern>WHAT IS THE DATE</pattern>
  <template>Today is <date format="%B %d, %Y" /></template>
</category>

7. <denormalize>

denormalize要素は、その内容をdenormal.substitutionにあるプロパティの名前と照合しようとします。一致するものが見つかった場合、非正規化要素とその内容はプロパティの値に置き換えられます。

denormal.substitutionにあるプロパティは、normal.substitutionによって行われた変換を逆にするために使用されます。

◎ 使い方

<category>
  <pattern>SAY *</pattern>
  <template><star /></template>
</category>

<!--

Input: Say pandorabots.com
Output: pandorabots dot com

-->

この句読点は、非正規化要素を使用して再挿入できます。

<category>
  <pattern>SAY *</pattern>
  <template><denormalize><star /></denormalize></template>
</category>

<!--

Input: Say pandorabots.com
Output: pandorabots.com

-->

8. <eval>

eval要素は、ネストされたカテゴリ内から外部カテゴリで見つかった変数を参照するために使用されます。これにより、学習カテゴリ内から外部カテゴリのワイルドカードコンテンツをエコーできます。

eval要素内で見つかったものは全て、新しいカテゴリが作成される前に最初に評価されます。

◎ 使い方

<category>
  <pattern>THE * IS BLUE</pattern>
  <template>
 I will remember that the <star /> is blue.
    <learn>
      <category>
        <pattern>WHAT COLOR IS THE <eval><star /></eval></pattern>
        <template>The <eval><star /></eval> is blue</template>
      </category>
    </learn>
  </template>
</category>

<!--

Input: The sky is blue.
Output I will remember that the sky is blue.

Input: What color is the sky?
Output: The sky is blue.

-->

9. <explode>

explode要素は、各文字の間にスペースを挿入することにより、1つの単語を複数の単語に分割するために使用されます。

◎ 使い方

<category>
  <pattern>EXPLODE *</pattern>
  <template><explode><star /></explode></template>
</category>

<!--

Input: Explode coffee
Output: c o f f e e

-->

10. <first>

最初の要素は、その内容で見つかった最初の単語を返します。これはAIMLでのリスト処理の実装です。

◎ 使い方

<category>
  <pattern>FIRST *</pattern>
  <template><first><star /></first></template>
</category>

<!--

Input: First a b c d
Output: a

-->

11. <formal>

正式な要素は、各単語を大文字にして内容を返します。

◎ 使い方

<category>
  <pattern>FORMAL *</pattern>
  <template><formal><star /></formal></template>
</category>

<!--

Input: Formal george washington
Output: George Washington

-->

12. <gender>

性別要素は、その内容を、gender.substitutionにあるプロパティの名前と照合しようとします。一致するものが見つかった場合、gender要素とその内容はプロパティの値に置き換えられます。

性別.substitutionファイルには、名前と値に反対の性別の代名詞が含まれているプロパティが含まれています。

◎ 使い方

<category>  
  <pattern>DOES IT BELONG TO *</pattern>  
  <template>No, it belongs to <gender><star/></gender></template>  
</category>

<!--

Input: Does it belong to her?
Output: No, it belongs to him

-->

13. <get />

get要素は、特定の述語の値を返すために使用されます。

◎ 属性
・name (required)

呼び出す述部の名前を指定します。述語にまだ値がない場合、get要素は.pdefaultsファイルで指定されているその述語のデフォルト値を返します。デフォルトが指定されていない場合、get要素はプロパティdefault-getの値を返します。

◎ 使い方

<category>
  <pattern>WHAT IS MY NAME</pattern>
  <template><get name="name" /></template>
</category>

<category>
  <pattern>MY NAME IS *</pattern>
  <template>Nice to meet you, <set name="name"><star /></template>
</category>

<!--

Input: What is my name?
Output: unknown

Input: My name is Daniel.
Output: Nice to meet you, Daniel.

Input: What is my name?
Output: Daniel.

-->

上記の例に見られるように、カスタム述語名が設定されていない場合、最初のカテゴリはdefault-getプロパティ値(「不明」)を返します。2番目のカテゴリが使用されると、get要素は述語のカスタム値を返します。

default-getの値が返されないようにするには、最初に条件要素を使用して、述語が設定されているかどうかを確認します。リスト要素のvalue属性としてワイルドカードを使用することにより、空の文字列以外の述語の値をチェックできます。

<category>
  <pattern>WHAT IS MY NAME</pattern>
  <template>
    <condition name="name">
      <li value="*"><get name="name" /></li>
      <li>You have not told me your name.</li>
    </condition>
  </template>
</category>

14. <id />

id要素は、入力を発行した人のclient_nameとともに、現在のbotidを返します。 botidはapp_id/botnameと同じです。

15. <img />

image要素は、指定されたURLで見つかった画像を返します。HTMLの<img>タグと同じです。

◎ 属性
・src (required)

画像のURLを指定します。

16. <input />

input要素は、ユーザーの入力全体を返します。これは、一致したパターンでワイルドカードによってキャプチャされたコンテンツのみを返すstar要素とは異なります。

◎ 使い方

<category>
  <pattern>Stop repeating me</pattern>
  <template><input /></template>
</category>

<!--

Input: Stop repeating me
Output: Stop repeating me

-->

17. <interval>

interval要素は、date要素と組み合わせて使用され、2つの異なる時刻/日付の差を計算します。

◎ 属性
・format

返される日付の形式を指定します。 これは、UNIXのstrftime関数への引数のように書くことができます。詳細はこちら

◎ 子タグ
・<from>

インターバルを開始する日付を指定します。
・<to>
インターバルを終了する日付を指定します。
・<style>
インターバルを返すスタイルを指定します。年、月、日、または秒を含めることができます。

◎ 使い方
現在の日付とボットの生年月日との差を計算するには、使用する形式と一致する形式で、.propertiesファイルに生年月日プロパティを含めるようにしてください。

<category>
  <pattern>AGE IN YEARS</pattern>
  <template>
    <interval format="%B %d, %Y">
      <style>years</style>
      <from><bot name="birthdate"/></from>
      <to><date format="%B %d, %Y" /></to>
    </interval>
  </template>
</category>

style要素は、間隔を年単位で返す必要があることを指定します。

18. <learn>

learn要素を使用すると、ユーザーは会話内から新しいカテゴリブロックを生成できます。AIML 2.0で導入されたこの強力な機能により、ユーザーは実際にボットに新しい情報を教えることができます。

learn要素によって生成されたカテゴリはメモリに保存され、それらの作成に使用されたclient_nameでのみアクセスできます。

◎ 使い方

<category>
  <pattern>I LIKE COFFEE</pattern>
  <template>
 I will remember that you like coffee.
    <learn>
      <category>
        <pattern>WHAT DO I LIKE</pattern>
        <template>You like coffee.</template>
      </category>
    </learn>
  </template>
</category>

<!--

Input: I like coffee.
Output: I will remember that you like coffee.

Input: What do I like?
Output: You like coffee

-->

19. <learnf>

learnf要素は構文のlearn要素と同じですが、生成されたカテゴリは、プロパティlearn-filenameで指定できる.aimlファイルに書き込まれます。ファイルがまだ作成されていない場合は、ボットが最初のカテゴリを「学習」したときに作成されます。

20. <li>

リストアイテム要素は、<condition>と<random>の両方の子にすることができます。 これにより、特定の状況下でそれぞれが選択される複数の応答を添付できます。

◎ 属性
・value (optional)

list item要素がcondition要素の子である場合は、値を指定できます。値が条件要素で参照されている述語の値と一致する場合、list項目要素が返されます。

21. <loop />

loop要素は、conditionブロックに含まれるlist item要素のセットを反復処理するために使用されます。

◎ 使い方
loop要素を使用するには、値を持つlist item要素と、値が指定されていない2番目の要素が必要です。loop要素は2番目のlist itemの子になり、2番目の項目がconditionブロックによって返されるたびにループが発生することを意味します。

これは、2番目の条件が満たされたときに、変数(述語など)を変更できることを意味します。 新しい述語の値が最初のlist itemの値と一致する場合、ループは中断されます。

<category>
  <pattern>COUNT TO <set>number</set></pattern>
  <template>
    <think><set name="count">0</set></think>
    <condition name="count">
      <li><value><star/></value></li>
      <li>
        <set name="count">
          <map><name>successor</name><get name="count"/></map>
        </set>
        <loop/>
      </li>
    </condition>
  </template>
</category>

<!--

Input: Count to 6
Output: 1 2 3 4 5 6

-->

この例では、入力ワードを数値として検証する組み込みのセット番号と、整数を連続する整数にマップする組み込みのマップサクセサを利用します。

conditionブロックの前に、カウント述部は値0で初期化されます。ユーザー入力がCount to 0の場合、最初のlist itemが返されます(入力で見つかった数をエコーします)。

それ以外の場合は、2番目の項目が返され、カウント述部は入力で見つかったものの連続する整数としてリセットされます。 loop要素は条件を再度実行し、述語カウントが<star />の値と一致するまで2番目のlist itemを返し続けます。

22. <lowercase>

lowercase要素は、その内容のすべての文字を小文字に変換します。

23. <map>

map要素は.mapファイルを参照するために使用されます。このファイルは、map要素の内容を独自のプロパティの1つに一致させようとし、プロパティの値を返します。 マップは、キーと値のペアを提供するデータ構造です。

◎ 属性
・name (required)
内容を照合する.mapファイルの名前を指定します。

◎ 使い方
この例では、Rosieチャットボットリポジトリのstate2capital.mapとstate.setを使用しています。

<category>
  <pattern>WHAT IS THE CAPITAL OF <set>state</set></pattern>
  <template>
    <map name="state2capital"><star /></map> is the capital of <star />
  </template>
</category>

<!--

Input: What is the capital of California?
Output: Sacramento is the capital of California

-->

このカテゴリは、マップとセットを相互に組み合わせて使用して、ボットのナレッジベースに「ファクト」を作成する方法を示しています。state.setファイルがパターンで呼び出され、ユーザーの入力に実際に状態が含まれていることを確認します。ワイルドカードの内容がセットファイルに存在する場合は、state2capital.mapへの入力として渡されます。マップファイル内のいずれかのキーと一致する場合、map要素は関連する値として返されます。

24. <normalize>

25. <oob>

out-of-band要素は、会話を超えて何かを伝達するボットの応答の一部の区切り文字として機能します。out-of-band要素はボットの内部では何の目的も果たしませんが、ボットがアプリケーションを「制御」するために使用できます。XMLパーサーを介してボットの応答を実行することにより、ボットのテキスト応答を帯域外のコンテンツから分離できます。

◎ 使い方
チャットボットを携帯電話のネイティブ機能の一部に統合するモバイルアプリケーションを構築したと想像してみてください。アプリケーションが提供する機能の1つは、チャットボットにその人に電話をかけるように指示するだけで、連絡先リストの誰かに電話をかける機能です。

<category>
  <pattern>CALL *</pattern>
  <template>
 Calling <star />.
    <oob><call><star /></call></oob>
  </template>
</category>

<!--

Input: Call Mom.
Output: Calling Mom. <oob><call>Mom</call></oob>

-->

out-of-band要素は、クライアントに返送された後もそのまま残ることに注意してください。out-of-band要素をアプリケーションに真に統合するには、アプリケーションはボットの応答をXMLとして解析し、その構成要素を区切る必要があります。 次に、out-of-band要素の内容をアプリケーションのイベントハンドラーに返し、残りをユーザーに表示できます。

26. <pattern>

pattern要素は、ユーザーの入力を照合できる言語パターンを定義する各カテゴリ内のブロックです。 パターンには、文字、数字、スペース、およびワイルドカードを含む他の多くの記号を含めることができます。 パターンの詳細については、「パターン側の参照」というラベルの付いたセクションを参照してください。

◎ 使い方

<category>
  <pattern>HI</pattern>
  <template>Hello there.</template>
</category>

27. <person>

person要素は、その内容をperson.substitutionsファイルと照合しようとします。このファイルは、代名詞を1人称と2人称の間で変換します。内容がそのファイル内のプロパティの名前と一致する場合、person要素とその内容はプロパティの値に置き換えられます。

◎ 使い方

<category>
  <pattern>I AM *</pattern>  
  <template>You are <person><star/></person></template>  
</category>

<!--

Input: I am waiting for you
Output: You are waiting for me

-->

上記の例では、「waiting for you」というフレーズが、<star />を使用してテンプレートにエコーされています。 ただし、タグはperson要素の子孫であるため、代名詞「you」は「me」に変換されます。

28. <person2>

person2要素はperson要素と同じですが、代名詞を1人称と3人称の間で変換するために使用されます。

◎ 使い方

<category>  
  <pattern>GIVE THE * TO *</pattern>  
  <template>User has asked me to give the <star/> to <person2><star index="2"/></person2></template>  
</category>

<!--

Input: Give the password to me
Output: User has asked me to give the password to them

-->

29. <program>

program要素は、使用されているAIMLインタープリタの名前とバージョン番号を返します。

◎ 使い方
Playgroundでこの要素を使用する。

<category>
  <pattern>PROGRAM</pattern>
  <template><program /></template>
</category>

<!--

Input: Program
Output: Pandorabots AIML Interpreter 2.0

-->

30. <random>

random要素をlist item要素と組み合わせて使用すると、潜在的なボット応答のセットを提供できます。カテゴリが一致した場合、そのうちの1つがランダムに返されます。

これは、ボットに繰り返しの少ない個性を提供できるため、デフォルトのカテゴリ、または頻繁に一致すると思われるカテゴリで使用するのに非常に便利なタグです。

◎ 使い方

<category>
  <pattern>HI</pattern>
  <template>
    <random>
      <li>Hello!</li>
      <li>Well hello there.</li>
      <li>Howdy.</li>
      <li>Good day.</li>
      <li>Hi, friend.</li>
    </random>
  </template>
</category>

ユーザーの入力が「HI」の場合、list item要素の1つがランダムにユーザーに返されます。

31. <request />

request要素は、履歴インデックス値で指定されたユーザーの入力を返します。

属性index呼び出すユーザーの入力の履歴インデックスを指定します。index="0" は現在の入力を示します。

◎ 使い方

<category>
  <pattern>WHAT DID I JUST SAY</pattern>
  <template><request index="1" /></template>
</category>

<!--

Input: Hi
Output: Hi there!

Input: What did I just say?
Output: Hi

-->

32. <response />

response要素は、履歴インデックス値で指定されたボットの応答を返します。

属性indexリコールするボット応答の履歴インデックスを指定します。index="0" は現在の応答を示します。

◎ 使い方

<category>
  <pattern>WHAT DID YOU JUST SAY</pattern>
  <template><request index="1" /></template>
</category>

<!--

Input: Hi
Output: Hi there!

Input: What did you just say?
Output: Hi there!

-->

33. <rest>

rest要素は、最初の単語を省略して要素の内容を返すリスト処理タグです。

◎ 使い方

<category>
  <pattern>REST *</pattern>
  <template><rest><star /></rest></template>
</category>

<!--

Input: Rest A B C D
Output: B C D

-->

34. <sentence>

sentence要素は、内容が文の始まりであるかのように、その内容の最初の単語を大文字にします。

35. <set>

set要素は、述語変数を設定するために使用されます。述語はプロパティのようにハードコードされておらず、会話中に初期化できます。これは、ユーザーからの入力が述語の値にエコーされる可能性があることを意味します。

◎ 属性
・name (required) 
name属性は、設定する述語の名前を指定します。 述語は、get要素を使用して同じ名前で呼び出すことができます。

<category>
  <pattern>MY NAME IS *</pattern>
  <template>
 Nice to meet you, <set name="username"><star />.</set>
  </template>
</category>

<category>
  <pattern>WHAT IS MY NAME</pattern>
  <template>Your name is <get name="username" />.</template>
</category>

<!--

Input: My name is Daniel.
Output: Nice to meet you, Daniel.

Input: What is my name?
Output: Your name is Daniel.

-->

36. <size />

size要素は、現在のボットに含まれているカテゴリブロックの数を返します。

37. <sr />

sr要素は<srai> <star /> </ srai>の省略形です。これは最も頻繁に使用される要素の組み合わせの1つであるため、AIMLでは短縮バージョンとして記述できます。

38. <srai>

srai要素を使用すると、ボットはユーザーの入力を変換した後、カテゴリを再帰的に呼び出すことができます。頭字語「srai」には正式な意味はありませんが、シンボリック縮小またはシンボリック再帰として定義される場合があります。

◎ 使い方

<category>
  <pattern>HELLO GOOD DAY</pattern>
  <template><srai>HI</template>
</category>

<category>
  <pattern>BONJOUR</pattern>
  <template><srai>HI</template>
</category>

<category>
  <pattern>GUTEN TAG</pattern>
  <template><srai>HI</srai></template>
</category>

<category>
  <pattern>HI</pattern>
  <template>Hello there!</template>
</category>

ユーザーの入力が「Hellogoodday」、「Bonjour」、「Guten Tag」の場合、最初の3つのカテゴリが繰り返され、ボットに新しい入力「HI」が与えられます。これは4番目のカテゴリと一致し、その応答をユーザーに返します。

39. <sraix >

sraix要素を使用すると、ボットは別のボット内に存在するカテゴリを呼び出し、それが独自のものであるかのように応答を返すことができます。これにより、それぞれが特定の目的を持つ多くのボットを作成できます。これらのボットは相互に接続して、AIMLカテゴリの一種の「ニューラルネットワーク」を形成します。

◎ 属性
・bot (required) 

ボットによって定義された、呼び出すボットを指定します。Pandorabots Playgroundでは、botidはusername/botnameと同等です。 開発者ポータルでは、app_id/botnameとして定義されています。

40. <star />

star要素は、ワイルドカードによってキャプチャされたユーザーの入力の一部をエコーするために使用されます。

◎ Attributes
・index
エコーするワイルドカードを指定します(複数のワイルドカードが存在する場合に使用されます)。インデックスが指定されていない場合、デフォルトは0です。

◎ 使い方

<category>
  <pattern>MY FAVORITE * IS *</pattern>
  <template>Your favorite <star /> is <star index="2" /></template>
</category>

<!--

Input: My favorite color is blue
Output: Your favorite color is blue

-->

41. <template>

template要素は、戻り値を定義するカテゴリの部分です。他にも様々な要素を含めることができます。テキストをユーザーに直接返すものと、再帰を引き起こして新しいカテゴリをトリガーするものがあります。全てのカテゴリには、テンプレートブロックが含まれている必要があります。

◎ 使い方

<category>
  <pattern>HI</pattern>
  <template>Hello there!</template>
</category>

42. <that>

that要素は、パターンのコンテキストを確立するために使用されるcategory要素のオプションの子です。カテゴリにその要素が含まれている場合、ボットの前の応答の最後の文がその内容と一致する場合にのみ、パターンを一致させることができます。ある意味で、その要素はパターンを会話の直接のコンテキストにバインドします。

これは、「はい」や「いいえ」などの一般的で単純なユーザー入力をコンテキスト化する場合に非常に役立ちます。

その要素は、パターン要素のすべての規則に従います。句読点を含めることはできず、ワイルドカード記号を使用することもできます。全て大文字で記述する必要があります。

◎ 使い方

<category>
  <pattern>I LIKE COFFEE</pattern>
  <template>Do you take cream or sugar in your coffee?</template>
</category>

<category>
  <pattern>YES</pattern>
  <that>DO YOU TAKE CREAM OR SUGAR IN YOUR COFFEE</that>
  <template>I do too.</template>
</category>

<category>
  <pattern>NO</pattern>
  <that>DO YOU TAKE CREAM OR SUGAR IN YOUR COFFEE</that>
  <template>Really? I have a hard time drinking black coffee.</template>
</category>

この例では、ユーザーが会話を開始し、ボットがユーザーに「はい」または「いいえ」の質問をすることで応答する、可能な会話のタイムラインを説明しました。ただし、問題は、ユーザーが「はい」または「いいえ」で答えることができる質問の数が無限に近いことです。ボットはどのようにしてユーザーの答えのコンテキストを知るのでしょうか。2番目と3番目のカテゴリにはそのブロックが含まれているため、どちらも特定のコンテキストにバインドされています。これらのカテゴリは、ボットの以前の応答が「コーヒーにクリームまたは砂糖を入れますか」と一致しない限り、一致しません。

43. <thatstar />

thatstar要素は、<that>タグ内にあるワイルドカードの内容をエコーするために使用されます。

属性indexエコーするワイルドカードのインデックスを指定します。 インデックスが指定されていない場合、デフォルトは0です。

◎ 使い方

<category>
  <pattern>I LIKE IT TOO</pattern>
  <that>I LIKE *</that>
  <template>What do you like best about <thatstar /></template>
</category>

<!--

Input: ...
Output: I like coffee.

Input: I like it too.
Output: What do you like best about coffee?

-->

このタイプのカテゴリは、代名詞の解決(照応)を処理するのに役立ちます。ユーザーが「it」という単語を入力すると、その要素とthatstar要素を実装して、問題の元の名詞への参照を保持できます。

44. <think>

think要素を使用すると、ボットはset要素の内容を実際にユーザーに表示せずに述語を設定できます。 これは、述語の「サイレント」設定と呼ばれることもあります。

◎ 使い方
述語を設定するこの例を考えてみましょう。ただし、set要素の内容が実際にテンプレートの一部としてユーザーに返されるようになっています。

<category>
  <pattern>MY NAME IS *</pattern>
  <template>
 Nice to meet you, <set name="name"><star /></set>
  </template>
</category>

<!--

Input: My name is Daniel
Output: Nice to meet you, Daniel

-->

thinkタグを使用すると、ユーザーに対して述語の値を実際に繰り返すことなく、名前の述語を設定できます。

<category>
  <pattern>MY NAME IS *</pattern>
  <template>
    <think><set name="name"><star /></set></think>
 I will remember your name.
  </template>
</category>

<!--

Input: My name is Daniel
Output: I will remember your name

-->

45. <topic>

topic要素を使用すると、「topic」という名前の述語の値に従ってカテゴリをコンテキスト化できます。その要素と同様に、トピックはパターンを特定のコンテキストにバインドしますが、これは、前のボット応答ではなく、述語の永続性に従って行われます。

topic要素は、categoryブロックの外側に表示されるという点で、ほとんどのAIML要素に固有です。topic要素内でいくつかのカテゴリをラップして、それら全てのカテゴリをバインドできます。

述語名「topic」はこの目的のために予約されていることにも注意してください。

◎ 属性
・name (required)
トピック述部の可能な値を参照します。

◎ 使い方

<category>
  <pattern>LET US TALK ABOUT *</pattern>
  <template>
 OK, I like <set name="topic"><star /></set>
  </template>
</category>

<topic name="coffee">

  <category>
    <pattern>I DRINK IT PLAIN</pattern>
    <template>I prefer mine with cream and sugar</template>
  </category>

</topic>

<topic name="tea">

  <category>
    <pattern>I DRINK IT PLAIN</pattern>
    <template>I prefer mine with honey and lemon</template>
  </category>

</topic>

<!--

Input: Let us talk about coffee
Output: OK, I like coffee

Input: I drink it plain
Output: I prefer mine with cream and sugar

Input: Let us talk about tea
Output: OK, I like tea

Input: I drink it plain
Output: I prefer mine with honey and lemon

-->

この基本的な例は、トピックの設定が入力のコンテキスト化にもどのように役立つかを示しています。ユーザーが「私はそれを普通に飲む」のようなことを言った場合、ボットは、関連する答えを提供するために、「それ」が何を指しているのかを知る何らかの方法を持っている必要があります。これは、上記の例で、コーヒーやお茶に追加する可能性のあるさまざまなものを介して示されています。 トピック述語の値に応じて、ボットはどの飲料追加セットに応答するかを認識します。

46. <topicstar />

47. <uppercase>

uppercase要素は、その内容のすべての文字を大文字に変換します。




























この記事が気に入ったらサポートをしてみませんか?