LoginSignup
0
0

Pepper SDK入門(24) TopicとTopicStatusでTopicファイルをまな板の鯉化する

Last updated at Posted at 2021-02-25

¿What is Topic❓

今回の記事で取り扱うTopicとは、QiChatbotのための会話内容が記述されているものです。
ユーザとPepper間の言葉によるやりとりを定義しています。

TopicにはStatusがある

Qichatbotは複数のTopicでビルドできます。ファウルズの話1についてのTopic、スキージャンプ・ペアの話についてのTopicなどです。
ファウルズの話をしている時はファウルズのTopicにフォーカスが当たっており、スキージャンプ・ペアの話をしている時はスキージャンプ・ペアのTopicにフォーカスが当たっています。フォーカスされているTopicは基本的に、最後の応答を返したTopicです。getFocusで、今フォーカスされているTopicを取得することもできます。

TopicStatusは、そうしたTopicファイルの有効・無効を設定できる値クラスです。

fouls.top
u:(野球) 野球最高!!
ski_jumping_pairs.top
u:(スキージャンプペア) トライアングルできるかな

通常上二つのTopicファイルでQichatbotをビルドしてChatさせると、ユーザが「野球」と言えばPepperは「野球最高!!」と返し、「スキージャンプペア」と言えば「トライアングルできるかな」と返します。
しかしTopicStatusでファウルズのTopicファイルを無効(false)にすると、ユーザが「野球」と言っても「野球最高!!」を返さなくなるのです。
一度無効にしたTopicファイルを有効にしたい時には、setEnabledで有効(true)を設定しましょう。

🎡🧪🎨🌈🧫💫

1.QiChatbotをビルドする

TopicファイルからTopicをビルドし、QiChatbotを作成します。
QiChatbotについては前回の記事も参考にしてください。

//Topicを作成
Topic baseballtopic = TopicBuilder.with(qiContext)// QiContextを利用してビルダーを作成
                          .withResource(R.raw.fouls)//Topicファイルを設定
                          .build();//Topicをビルド
Topic skiTopic = TopicBuilder.with(qiContext)
                     .withResource(R.raw.ski_jumping_pairs)
                     .build();

QiChatbot qiChatbot = QiChatbotBuilder.with(qiContext)
            .withTopic(topic)
            .build();

2.Topic、Getだぜ🐭⚡️

QiChatbotに含まれる全てのTopicを取得します。

List<Topic> topics = qiChatbot.getTopics();

##3.TopicStatusを管理(≠全展望監視)する
TopicからTopicStatusを作成します。パノプティコンは作りません。


baseballTopicStatus = qiChatbot.topicStatus(baseballtopic);
skiTopicStatus = qiChatbot.topicStatus(skiTopic);

//該当のTopicファイルを無効にする
baseballTopicStatus.setEnabled(false);
//現在のTopicファイルの状態を知りたい時に呼ぶ
Boolean isEnabled = baseballTopicStatus.getEnabled();
baseballTopicStatus.addOnEnabledChangedListener(enabled ->
     //Topicファイルの状態が変わった時に呼ばれる
     Log.i(TAG, "onEnabledChanged: " + enabled)//UFOの着陸音を流しても可
);
//現在のフォーカスの状態を知りたいときに呼ぶ
Boolean isFocused = baseballTopicStatus.getFocused();
baseballTopicStatus.addOnFocusedChangedListener(focused -> 
     //フォーカスの状態が変わった時に呼ばれる
     Log.i(TAG, "onFocusedChanged: " + focused)//ネッシーの画像を表示しても可
);

上のコードの場合はファウルズのTopicが無効なため、ユーザが「野球」と言ってもPepperは反応しません。
globalRecommendationsでユーザの発話候補を取得すると、ファウルズのTopicから「野球」を取得することはできませんが、スキージャンプ・ペアのTopicから「スキージャンプペア」を取得することはできます。
Recommendationsについては前回を復習してみてくださいね📖🔍

あとがき

今回もPepperSDKforAndroidを参考に書かせていただきました。
さらに詳しくはTopicのAPIリファレンスTopicStatusのAPIリファレンスを参照してください。

次回はQiChatVariableの回です。Variable Star(変光星)🌟とVariable Wind(変向風)🌬の登場はありません。${\mathbb{See you later alligator ~}}$🐊

  1. ここでは円城塔の『オブ・ザ・ベースボール』に登場する、人が降ってくる町の意。バットで落ちてくる人を打ち返します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0