4. COTOBA AIML: 基本要素¶
この章では、COTOBA AIML (cAIML) でサポートしているAIMLの基本となる要素について説明します。
セクション冒頭の[…]は、その要素が最初に定義されたAIMLのバージョンを示しています。
[custom]は、cAIML 独自仕様拡張の要素です。
cAIMLのパターンマッチング優先順位ルールの詳細については「パターンマッチング」を参照してください。
4.1. aiml¶
[1.0]
aiml要素は、cAIMLのルート要素です。他の全てのcAIMLの要素はaiml要素の内容として記述する必要があります。
- 属性
パタメータ | タイプ | 必須 | 説明 |
---|---|---|---|
version | string | Yes | 記述されているAIMLのバージョンを指定します。 |
- 使用例
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<!-- cAIML element should be described here -->
</aiml>
4.2. category¶
[1.0]
category要素は、cAIMLの対話ルールの基本単位に相当します。
aiml要素の内容に、複数のcategory要素のブロックを含んだ形で記述することができます。
尚、登録可能なcategory数は、コンフィグレーション定義の 制限値定義 の max_categories
までとなります。
- 属性
なし
- 使用例
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>こんにちは</pattern>
<template>今日もいい天気ですね</template>
</category>
<category>
<pattern>さようなら</pattern>
<template>明日また会いましょう</template>
</category>
</aiml>
Input: こんにちは
Output: 今日もいい天気ですね
Input: さようなら
Output: 明日また会いましょう
4.3. pattern¶
[1.0]
pattern要素は、category要素の内容として記述し、pattern要素の内容としてユーザの発話文とのパターンマッチングを行うパターンを記述します。
pattern要素内に記述された文字列とユーザ発話文の文字列が一致した場合、当該のpattern要素を含む対話ルール(category要素のブロック内の処理)が実行されます。
- 属性
なし
- 使用例
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>こんにちは</pattern>
<template>今日もいい天気ですね。</template>
</category>
</aiml>
pattern要素の内容には文字列以外のcAIML要素を含む記述を行うこともできます。
それにより、複雑なパターンマッチ処理を行うことができます。
pattern要素の内容として記述可能なcAIML要素の詳細については、pattern要素 を御覧ください。
4.4. template¶
[1.0]
template要素は、category要素の内容として記述し、template要素の内容としてシステムの応答文を記述します。
対話ルール(category要素のブロック)が実行された場合、当該category要素のブロック内のtemplate要素の内容に記述された文字列が、システムの応答文として返されます。
- 属性
なし
- 使用例
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>こんにちは</pattern>
<template>今日もいい天気ですね。</template>
</category>
</aiml>
template要素の内容には文字列以外のcAIMLタグを含む記述を行うことができます。
それにより、複雑な応答文生成処理を行うことができます。
template要素の内容に記述可能なcAIML要素の詳細については、template要素 を御覧ください。
4.5. topic¶
[1.0]
topic要素のブロック内に、複数の対話ルール category 要素を記述することで対話ルールをコンテキスト化することができます。
対話ルールがコンテキスト化されると、対話エンジンが保持する変数 topic の値が、topic要素のname属性で指定した属性値と一致する時だけ、対話ルールが評価されます。
topic要素のブロック内に含まれない対話ルール(コンテキスト化されない対話ルール) category 要素は、name属性の属性値がワイルドカード”*”と指定されているのと同じ扱いになり、対話エンジンが保持する変数 topic の値に関係なくその対話ルールは評価されます。
ただし、topic要素でコンテキスト化された対話ルールが優先して評価され、そのコンテキスト化された対話ルールが実行されなかった場合にのみ、コンテキスト化されない対話ルールが評価されます。
“topic”は予約語となるためユーザが定義する変数名としては利用できません。
- 属性
パラメータ | タイプ | 必須 | 説明 |
---|---|---|---|
name | string | Yes | topic名を指定します。 |
topic要素を利用すると、以下の使用例のように同じ pattern のマッチング動作をコンテキスト(topicの値)に応じて使い分けることができます。
この使用例では、ユーザの「私は何も入れません」という発話に対して、その発話より前に設定されたtopicの値に応じて、評価される対話ルールを切り替えることで応答を変えています。
- 使用例
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>*について話しましょう</pattern>
<template>
私も<set name="topic"><star /></set>が好きです。
</template>
</category>
<topic name="コーヒー">
<category>
<pattern>私は何も入れません</pattern>
<template>私はクリームと砂糖を入れます</template>
</category>
</topic>
<topic name="紅茶">
<category>
<pattern>私は何も入れません</pattern>
<template>私はレモンティーが好きです</template>
</category>
</topic>
</aiml>
Input: コーヒーについて話しましょう
Output: 私もコーヒーが好きです
Input: 私は何も入れません
Output: 私はクリームと砂糖を入れます
Input: 紅茶について話しましょう
Output: 私も紅茶が好きです
Input: 私は何も入れません
Output: 私はレモンティーが好きです