xAIMLでは、一般的なプログラミング言語に近いレベルの変数(Predicate)を使用できます。
変数はチャットボットの開発に最適化されており、用途に応じて後述の4つの種別を使い分けます。
ここで説明する変数の他に、システムPredicateや、以下のプレフィックスを持つ予約済みのPredicateがあります。
これらのPredicateはシステムによって管理されるため、一部を除き参照のみ可能となっています。
詳細は各リンク先をご覧ください。
_ext_
(CGS実行結果)_client_
(クライアント情報)_sraix_
(sraix応答情報)_namelister_
(固有表現抽出)_task_
(意図解釈結果)
種別一覧
種別 | アクセス | スコープ | ライフサイクル | 使用方法 |
---|---|---|---|---|
ローカル変数 | 参照/更新 | ボット(ユーザ別) | 対話セッション | <set name="_var_xxx">yyy</set> |
ボット変数 | 参照/更新 | ボット(ユーザ別) | 永続※1 | <set name="xxx">yyy</set> |
グローバル変数 | 参照/更新 | プロジェクト(ユーザ別) | 永続※1 | <predstore>xxx=yyy</predstore> |
ボットプロパティ | 参照のみ | ボット(ユーザ共通) | 永続※1 | <bot name="xxx"/> |
※1 ボットを削除するか、明示的に初期化するまで変数を保持します。
種別詳細
Predicate(変数)における種別の詳細とサンプルです。
ローカル変数
ボット内に限り、ユーザとの対話セッション内で参照/更新できる変数です。
対話セッションとはサーバが「ユーザ発話を受信してからシステム発話を返すまで」の期間を指し、ローカル変数はこのセッション内でのみ参照/更新できます。
また、ローカル変数はセッション終了後に自動的に破棄されます。
ローカル変数はユーザ(厳密にはアプリID)別に値を保持しているため、他のユーザに影響することはありません。
使用方法
ローカル変数は、<set>
でPredicate名の先頭に_var_
を付加することで作成/更新できます。
また、<get>
<condition>
等でPredicate名の先頭に_var_
を付加することで参照できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<category> <pattern>*</pattern> <template> <think> <set name="_var_day"><date format="M"/></set> </think> <condition name="_var_day"> <li value="3|4|5">今は春です。</li> <li value="6|7|8">今は夏です。</li> <li value="9|10|11">今は秋です。</li> <li>今は冬です。</li> </condition> </template> </category> |
ボット変数
ボット内に限り、複数の対話セッションで参照/更新できる変数です。
対話セッションとはサーバが「ユーザ発話を受信してからシステム発話を返すまで」の期間を指し、ボット変数は複数のセッションで参照/更新できます。
また、ボット変数はセッション終了後も内容を保持し続けるため、次の対話セッションで引き続きボット変数を参照/更新できます。
ボット変数はユーザ(厳密にはアプリID)別に値を保持しているため、他のユーザに影響することはありません。
これらを防止するためには、必要に応じてボット変数を初期化するか、ローカル変数の使用をご検討ください。
使用方法
ボット変数は<get>
<set>
<condition>
等で使用できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<category> <pattern>*</pattern> <template> <think> <set name="month_now"><date fotmat="M"/></set> </think> <condition name="month_now"> <li value="3|4|5">今は春です。</li> <li value="6|7|8">今は夏です。</li> <li value="9|10|11">今は秋です。</li> <li>今は冬です。</li> </condition> </template> </category> |
グローバル変数
プロジェクト内のすべてのボット/対話セッションで参照/更新できる変数です。
プロジェクトとは、ボットの管理などを行う一番大きな単位を指します。
また、グローバル変数はプロジェクト単位で変数を保持するため、ボットや対話セッションに依存せずに変数を参照/更新できます。
グローバル変数はユーザ(厳密にはアプリID)別に値を保持しているため、他のユーザに影響することはありません。
使用方法
グローバル変数は<predstore>
でのみ使用できます。
<get>
<condition>
で利用する場合は、ボット変数/ローカル変数に設定してから使用してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<category> <pattern>_</pattern> <template> <think> <predstore>date.year=2018</predstore> <predstore>date.month=10</predstore> <predstore>date.day=15</predstore> <set name="_var_day"><predstore>date.month</predstore></set> </think> <condition name="_var_day"> <li value="3|4|5">今は春です。</li> <li value="6|7|8">今は夏です。</li> <li value="9|10|11">今は秋です。</li> <li>今は冬です。</li> </condition> </template> </category> |
ボットプロパティ
ボットプロパティは、ボット内で対話セッション/ユーザの区別なく参照できる定数です。
値の設定はボット設定からのみ可能であり、xAIMLからは参照のみ行えます。
使用方法
<bot>
でのみ使用できます。
ボットプロパティはボット設定であらかじめ登録されている必要があります。
1 2 3 4 |
<category> <pattern>あなたの名前は?</pattern> <template>私の名前は<bot name="name"/>です。</template> </category> |