処理時間が長くなる4つの原因と、処理時間を短くする方法を紹介します。
実装方法1
<srai>
や<sraix>
を多用すると、その分言語解析処理等が増える為、処理時間が長くなります。特に
<sraix>
は、その都度DBアクセスが発生する為、オーバーヘッドが大きくなります。「#TEST」のように、先頭に「#」を付けると言語解析処理が行われない為、処理時間が短くなります。
ただし、
<sraix>
によるDBアクセスは発生します。
xAIML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<category> <pattern>TEST1</pattern> <template> <!-- 先頭に「#」を付けることで言語処理をスキップする --> <srai>#DATE</srai> </template> </category> <category> <pattern>#DATE</pattern> <template> <date format="yyyy年MM月dd日" /> </template> </category> |
実行結果
1 2 |
user > TEST1 bot > 2019年01月21日 |
実装方法2
条件分岐だけのためのPredicateなど、DBに保持する必要のないPredicateは揮発性Predicateとして利用することで、処理時間が短くなります。
xAIML
1 2 3 4 5 6 7 8 9 10 11 |
<category> <pattern>TEST2</pattern> <template> <!-- 先頭に「_var_」を付けることで揮発性Predicateとして利用する --> <think><set name="_var_time">朝</set></think> <condition name="_var_time"> <li value="朝">おはよう</li> <li>こんにちは</li> </condition> </template> </category> |
実行結果
1 2 |
user > TEST2 bot > おはよう |
実装方法3
<template>
や<li>
にid
属性を指定しない場合、次のユーザ発話時に前回のシステム発話文章の言語解析処理が入る為、処理時間が長くなります。id
属性を指定している場合、言語解析処理が行われない為、処理時間が短くなります。
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 34 35 36 37 |
<category> <pattern>TEST3</pattern> <!-- idを指定することで前回システム発話の言語解析処理を行わない --> <template id="t001">今日の調子はどうですか?</template> </category> <category> <pattern>良い</pattern> <!-- idを指定することで前回システム発話の言語解析処理を行わない --> <that id="t001" /> <template> それは良かったです。 </template> </category> <category> <pattern>良い</pattern> <template> 急にどうしたんですか? </template> </category> <category> <pattern>悪い</pattern> <!-- idを指定することで前回システム発話の言語解析処理を行わない --> <that id="t001" /> <template> 無理をしないでください。 </template> </category> <category> <pattern>悪い</pattern> <template> 突然どうしたんですか? </template> </category> |
実行結果
1 2 3 4 5 6 7 |
user > 良い bot > 急にどうしたんですか? user > TEST3 bot > 今日の調子はどうですか? user > 良い bot > それは良かったです。 |
1 2 3 4 5 6 7 |
user > 悪い bot > 突然どうしたんですか? user > TEST3 bot > 今日の調子はどうですか? user > 悪い bot > 無理をしないでください。 |
実装方法4
アップロードされたSET/MAPファイルを読み込む場合、DBアクセスが発生する為、処理時間が長くなります。
特に、一度のリクエストでレコード数が少ないSET/MAPファイルを参照するAIML記述の場合、SQL実行回数が増えてしまう場合があります。
SET/MAPファイルのレコード数が少ない場合は、<pattern>
を使用することで処理時間が短くなります。
SETファイルを使用する場合
xAIML
1 2 3 4 5 6 |
<category> <pattern><set>apple</set></pattern> <template> りんご </template> </category> |
SETファイル
1 2 |
紅玉 ふじ |
SET/MAPファイルを使用しない場合
xAIML
1 2 3 4 5 6 7 8 9 10 11 |
<category> <pattern>紅玉</pattern> <pattern>ふじ</pattern> <template> りんご </template> </category> |
実行結果
1 2 |
user > 紅玉 bot > りんご |
1 2 |
user > ふじ bot > りんご |