雑談対話APIを使ったコンピュータとのチャットアプリ(2)
docomo IDと連携したパーソナライズ機能
ContextIDを使ってユーザとコンピュータ間でより自然な対話になるよう文脈を解析しながらやりとりができますが、このContextIDはアプリケーションを終了すると、サーバ上から削除されてしまいます。雑談対話APIでは、会話の内容をdocomo IDと紐づけてサーバ上に蓄積し、後日改めて対話を行ったときも、前回の会話内容を分析し、より最適な会話を続けるパーソナライズ機能が提供されています。
docomo IDを使ったパーソナライズを行うには、OAuth認証を行って、アクセストークンを取得します。取得したアクセストークンを、雑談対話APIのリクエストパラメータにセットすることで、docomo IDに紐づいた対話内容がサーバ上に蓄積されます。OAuth認証を行うためのSDKは以下のサイトから取得します。
ダウンロードしたファイルに含まれるdocomo-oauth-android-sdk-1.1.1.jarをAndoridプロジェクトのlibsフォルダ内にコピーしてください。
また、このSDKを利用するため、docomo Developer supportのマイページから必要なキー情報を取得します。
取得した情報を、次のとおり認証を行うOAuthActivity.javaにセットします。
/** OAuth 認証用 client id */ private static final String CLIENT_ID = "xxxxx"; /** OAuth 認証用 client secret */ private static final String SECRET_ID = "xxxxx"; /** OAuth 認証用 scope */ private static final String SCOPE = "dialogue"; /** OAuth 認証用 コールバックURL */ private static final String REDIRECT_URI = "xxxxx";
今回のチャットアプリのサンプルでは、取得したアクセストークンをPreferencesに保存しています。OAuthActivityクラスの詳細については、本記事の内容からは逸れますのでサンプルコードおよびSDK付属のドキュメントを参照してください。
雑談対話APIのレスポンス
DialogueAsyncTaskクラスは、雑談対話APIのレスポンスを受け取ります。docomo ID認証によるパーソナライズ機能を使うためには、APIのリクエストに取得したアクセストークンを、リクエストパラメータとともに送信します。パーソナライズ機能を使わない時はAPIの呼び出しはリクエストパラメータのみを送ります。
// 雑談対話要求処理クラスにリクエストデータを渡し、レスポンスデータを取得する Dialogue search = new Dialogue(); // パーソナライズ機能を利用するときは、リクエストにアクセストークンを送る boolean oauthFlg = sp.getBoolean("personalize", false); if ( oauthFlg ) { String accessToken = sp.getString("accessToken", ""); resultData = search.request(reqParam, accessToken); } else { resultData = search.request(reqParam); }
雑談対話APIを呼び出すと、以下のような項目がレスポンスとして返ります。このレスポンスから雑談対話の返答(utt)を取得し、画面のListViewコントロールにデータを表示します。
内容 | 項目 | データ型 | 説明 |
---|---|---|---|
システムの返答 | utt | string | 雑談返答 |
音声合成用読み出力 | yomi | string | 音声合成用出力 |
モード | mode | string | 対話のモード |
対話番号 | da | int | ユーザとシステムの対話に対してサーバが付与した番号 |
コンテキストID | context | string | 自動的にシステムより出力されるID |
これで、チャットサンプルアプリの作成がひととおり終わりました。
動作確認
雑談対話APIのサーバとネットワーク通信を行う必要があるので、最後にAndroidManifest.xmlに以下のパーミッションを設定します。
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
サンプルアプリを実行すると、対話画面が表示されます。筆者が試したところ、対話内容は、会話の文脈をもとに返答されることが多いですが、時々、ニックネームで呼ばれたり、登録した場所の天気やイベント情報などが返答されたりすることもあります。
おわりに
今回は、雑談対話APIのご紹介と、雑談対話APIを使ったチャットアプリを作りました。コンピュータとの対話を行うには、機械学習や形態素解析などの自然言語処理など、しきいの高い技術を勉強する必要がありますが、docomo APIを使うと短時間で手軽にアプリケーションに組み込むことができることがお分かりいただけたでしょうか。
「docomo Developer support」では、本連載で紹介した他にもさまざまに有用なAPIを提供しています。本稿で興味を持った人は、ぜひ、他のAPIも触れてみると良いでしょう。