Stella(仮) の実験的インスタンス公開
開発::webapp
Stellaの実働インスタンス
Mimir YokohamaのサポートとしてStellaインスタンスが稼働開始した。
今回はあくまでも「動くところを見せる」ことがメインであり、実用的にはだいぶ弱い。 対応できるところが家庭教師サービスに限られているということもある。
だが、運用的にはおかしくはない。 実際に投げかけられる質問は投げかけられない限り分からないので、推測して予め用意するというのもひとつではあるのだが、それには限界があるので、「ある程度答えられる」くらいで用意して、利用者が投げかけた言葉に基づいて精度を高めていく、というのがStellaの標準的運用方法だからだ。 現時点で当該インスタンスの対応力が低く感じられるのは、恐らくはあくまで家庭教師サービスに関してしか応答しない、という点にあるだろう。
どう書いたか
Stellaの記述にはRuby内部DSLであるSlimを採用している。
(半)公式で提供されているStellaの書き方は以下の種類がある。
- YAMLの直書き
- Logic Builderを使ってRubyで書く
LogicBUilder
クラスを使ってRubyで書く- Stella DSLを使ってRubyで書く
- STLLで書く
書くのが最も楽なのはSTLLだが、STLLはいくつか機能的制限がある。 逆に、Rubyで書くものに関してはRubyの機能が使えるためStellaの機能の枠を越えて機能が提供されることになる。
今回Slimを使った最大の理由は、0.0.18で入ったContext Callerが0.0.16に巻き戻ったために消えてしまったからだ。 これを踏まえて、ルートコンテキストでの応答はメソッドで定義されており、(ルート以外の)フリーワードなコンテキストにおいてはこのコンテキストの応答箇所の後ろでメソッドを呼び出していることで、同じ流れが適用される。 結果的に「コンテキストまたぎ」が可能になっている。
今のところメリットは薄いが、これをやると基本的には今のコンテキストの基点に留まるようにすることでコンテキストの変遷に幅をもたせることができる。
具体的には、家庭教師サービスの話をすると家庭教師サービスのコンテキストになるが、続けて質問された内容が答えられなかったり、あるいはひとつの質問で終わるものだったり(例えば「カリキュラムについて」とか)するとする。 この場合、「まだ家庭教師サービスの話をしたいのか、それとも別のことを聞きたいのか」ということを確定することができない。
Stellaの標準フローとしては、明示的にルートコンテキストに戻る手段を与えるか、もしくはctxpush
してからmsg
でこのコンテキストで続けるか、ルートコンテキストに戻るかを質問して、さらにnext
する。
next
した先でYES/NO判定を行い、ctxpop
またはreset
する。
0.0.18では、これに加えてコンテキストをまたいで自然に判定できるようにするためにContext Callerという機能が提供された。 これは、プログラミング的に見れば関数呼び出しに近い(実際は他のコンテキストの値を配列の自身に位置に挿入して置き換える――単に置き換える入れ子になってしまうからだ)ものだが、この機能の実装をやり直すことなく、手元でなんとかした、ということになる。
このインスタンスはルートコンテキストで「こんにちは」という語に応答するが、家庭教師サービスコンテキストにおいても同様に対応する。 これは家庭教師サービスコンテキストにおいて直接定義されているわけではなく、これと同じ原理でルートコンテキストにおいて例えばサポートサービスコンテキストに移行する定義がなされていれば、家庭教師サービスコンテキストにおいてサポートサービスコンテキストに入るワードを発言すればサポートサービスコンテキストにそのまま移動することができるということである。
なんのために出したか
やはり、Erinaが公開できないものである以上、説得力という意味で「動いてるものが欲しい」という気持ちが大きく、実用的な意味合いよりは、動いているのを見せるという目的で設置している。
現状、Mimir Yokohamaへの問い合わせ件数は少なく、チャットサポートを設置する必然性は高くないのだ。
もっとも、Stellaに関しては問い合わせベースではなく、検索ベースで考えたほうが良い。 検索とFAQの角度を変えた機能であるという見方がStellaとしては正しいからだ。 人間的なサポートを必要とするような人が求めるのはチャットボットではないし、そういう人は基本的にちゃんと問い合わせしてくる。