チャットボットを作りたいのですが、aiml で単一のパターンに対して複数の方法で応答するにはどうすればよいでしょうか? たとえば、ユーザーが次に何を尋ねた場合、チャット ボットはステップ 1 に応答する必要があります。
4 に答える
テンプレートで「that」タグを使用できます。これは、最後のボット ステートメントを記憶し、それに応じて応答しますが、これにより 1 レベルの制御しかできなくなります。より多くのレベルが必要な場合は、"think" タグを使用してトピックを設定し、最初に使用されるトピック固有のテンプレートを定義することをお勧めします。
まず、ステップを認識し、定義された形式で回答を返すカテゴリが必要です。私の例では、フォーマットは
MAKE TOAST STEP * *
ここで、最初の星はステップ番号で、2 番目の星は返されたテキストの残りを表します。カテゴリは次のとおりです。
<category>
<pattern>MAKING TOAST STEP *</pattern>
<template>
<set var="step"><star/></set>
<condition var="step">
<li value="1">Make toast step 1, get some bread</li>
<li value="2">Make toast step 2, put the bread in the toaster</li>
<li value="3">Make toast step 3, wait until it pops up</li>
<li>Make toast step 4, eat the toast</li>
</condition>
</template>
</category>
次に、前の回答が乾杯の質問であった場合にのみ、次のステップを呼び出すカテゴリが必要です。このカテゴリは、そのタグを使用して、乾杯の会話中にのみアクティブ化されるようにします。thatstarを使用して前のステップ番号を取得し、ステップ番号に 1 を追加します。
<category>
<pattern>WHAT IS NEXT</pattern>
<that>MAKE TOAST STEP * *</that>
<template>
<set var="step"><calculate><thatstar/>+1</calculate></set>
<srai>MAKING TOAST STEP <get var="step"/></srai>
</template>
</category>
次に、シーケンス全体を開始するためのカテゴリが必要です。
<category>
<pattern>HOW DO I MAKE TOAST</pattern>
<template>
<srai>MAKING TOAST STEP 1</srai>
</template>
</category>
このアプローチの注意点は、(1)標準の AIML ではないが、非常に簡単にコーディングする必要があるcalculateタグを使用することです。(2) getやsetで使用される変数など、AIML v2 要素を使用します。(3) 私はそれをテストしていませんが、プロセスがうまくいくはずだと確信しています.