ユーザとの話題によって、利用できるカテゴリーを制限する方法をご紹介します。
- 同一の
<pattern>
を持つカテゴリーが複数存在しても、話題毎に利用するカテゴリーを制御することができます。 - 話題が限定されるため、カテゴリーの
<pattern>
を簡略化することができます。
(例:「晩御飯は*が食べたいな」 → 話題が晩御飯の場合は「*が食べたいな」)
実装方法
話題毎に<topic name="(任意の名称)">
を作成し、カテゴリーをその配下に移動してください。
話題が決定、または切り替わる段階で、<template>
内で<set name="topic">(存在する名称)</set>
を記述します。
xAIML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<category> <pattern>コーヒー</pattern> <template> コーヒー好き? <think> <set name="topic">COFFEE</set> </think> </template> </category> <category> <pattern>紅茶</pattern> <template> 紅茶好き? <think> <set name="topic">TEA</set> </think> </template> </category> <topic name="COFFEE"> <category> <pattern>好き</pattern> <template>コーヒーおいしいよね</template> </category> </topic> <topic name="TEA"> <category> <pattern>好き</pattern> <template>紅茶おいしいよね</template> </category> </topic> |
実行結果
1 2 3 4 5 6 7 8 9 |
user > コーヒー bot > コーヒー好き? user > 好き bot > コーヒーおいしいよね user > 紅茶 bot > 紅茶好き? user > 好き bot > 紅茶おいしいよね |
また、<srai>
を使用して、<topic>
を跨いで発話を生成することができます。
xAIML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<category> <pattern>遊ぼ</pattern> <template> <random> <li> しりとりしよう<br/> <think> <set name="topic">SHIRITORI</set> </think> <srai>init</srai> </li> <li>今は遊ぶ気分じゃない</li> </random> </template> </category> <topic name="SHIRITORI"> <category> <pattern>init</pattern> <template>スタートです。好きな言葉を言ってね。</template> </category> </topic> |
実行結果
1 2 3 4 5 6 |
user > 遊ぼ bot > しりとりしよう スタートです。好きな言葉を言ってね。 user > 遊ぼ bot > 今は遊ぶ気分じゃない |