目次


サンプル Liberty アプリケーションを作成して IBM Cloud にデプロイする

IBM Cloud の Watson Question and Answer サービスを利用する

Comments

このチュートリアルは、前のバージョンの IBM Cloud インターフェースを使用して作成されています。テクノロジーは急速に進化することから、一部の手順と記載する図の内容は変わっている場合があります。

IBM が Watson サービスを IBM Cloud プラットフォームに導入したのは、2014 年 10 月の初旬です。このチュートリアルでは、Watson Question and Answer サービスを利用したアプリケーションを IBM Cloud にデプロイする方法を紹介します。このチュートリアルでデプロイするのは、Java ベースのアプリケーションです。

IBM Cloud の Watson サービスを利用すると、開発者は Watson を利用した独自のアプリケーションを作成するために、これまでに例のないコグニティブ (認知) ツールへのアクセスができるようになります。さらに、Watson サービスでは、基本的な質問応答機能の枠を超えた Watson 対応のツール・セットを初めて一般公開しています。つまり、クラウドをベースとした初のコグニティブ・プラットフォームを利用できるということです。かなりエキサイティングなことだと思いませんか?

必要となるもの

このチュートリアルでは例として、Mac 対応の Rational Software Architect を使用して Java-Liberty アプリケーションを IBM Cloud にデプロイします。私が使用するのは Rational Software Architect ですが、説明する内容は、Linux および Windows の Eclipse ユーザーにも関連します。このチュートリアルに従うには、以下のものが必要です。

ステップ 1: サンプル・コードを入手する

サンプル・コードをダウンロードします。私が作成した gwTest というサンプル・アプリケーションでは、Question and Answer サービスを利用して Watson for Travel コーパスに質問を投げ掛けます。サンプル・アプリケーションとその構造は、以下に示すとおり、極めて単純です。

アプリケーションのディレクトリー構造のスクリーンショット
アプリケーションのディレクトリー構造のスクリーンショット

私は動的 Web アプリケーションを作成して、REST サービス (Demo.java) とブラウザー・ベースのユーザー・インターフェース (index.html) を追加しました。REST サービスがユーザー・インターフェースからの質問を受け付けて、結果を返します。ブラウザーはその結果を JSON フォーマットで表示します。

ユーザー・インターフェースは、ユーザーが Travel コーパスへの質問を入力するための単なるフォームに過ぎません (以下のコードを参照)。フォームには、「question」という名前のテキスト入力フィールドが 1 つあるだけです。ユーザーが質問を入力して「Submit (送信)」ボタンを選択すると、入力した質問が送信されます。

<!DOCTYPE html>
<html>
  <head>
  <meta charset="ISO-8859-1">
  <title>Ask Watson a Travel Question</title>
  </head>
<body>
  <form action="resources/test" method="post">
Ask Watson for Travel: <input type="text" name="question">
   <input type="submit" value="Submit"/>
  </form>
</body>
</html>

REST サービスの役目は、UI リクエストを処理し、質問を Question and Answer に転送して、結果を返すことです。そのために、このサービスでは以下のオープンソースのコンポーネントを使用しています。

  • Apache HttpClient
  • Apache Wink (JSON ライブラリー)

Apache HttpClient は、Question and Answer に対する REST 呼び出しを開始するために使用します。Apache Wink JSON ライブラリーは、この Java ベースのアプリケーションで JSON を処理するために使用します。

この Java ベースの REST サービスは、サービスの資格情報を VCAP_SERVICES 環境関数から取得します。REST サービスは値 question_and_answer を使用して、VCAP_SERVICES から URL、ユーザー名、パスワードを取得します。

 //Find my service from VCAP_SERVICES in Bluemix 
        String VCAP_SERVICES = System.getenv("VCAP_SERVICES");
        String Service_Name  = "question_and_answer"; 
        
        System.out.println("VCAP SERVICES is :"+VCAP_SERVICES);
 
        // Get the Service Credentials for Watson QAAPI
        if (VCAP_SERVICES != null && 
           ((JSONObject)JSON.parse(VCAP_SERVICES)).containsKey(Service_Name)    ) {
            
            try {               
                JSONObject obj = (JSONObject)JSON.parse(VCAP_SERVICES);             
                JSONArray service = obj.getJSONArray(Service_Name);
 
                // retrieve the service information             
                JSONObject catalog = service.getJSONObject(0); 
 
                // retrieve the credentials
                JSONObject credentials = catalog.getJSONObject("credentials");
 
                // get the credential contents
                userid =    credentials.getString("username");
                password =  credentials.getString("password");
                restServerURL = credentials.getString("url");           
 
            } catch (NullPointerException | JSONException e) {          
                e.printStackTrace();                
            }

Question Answer API リクエストには、ユーザーが入力した質問のテキストが挿入されます。質問のリクエストは JSON オブジェクトになっており、このオブジェクトの question.questionText プロパティーにユーザーの質問が設定されます。

// create the HTTP Post Body information (How to build this comes from the documentation)
        StringEntity ent = new StringEntity("{\"question\" : { \"evidenceRequest\":{\"profile\":\"NO\"},\"questionText\" : \"" + question + "\"}}");
        ent.setContentType("application/json");
        httpPost.setEntity(ent);

ステップ 2: IBM Cloud サーバー・プロファイルを作成する

コードは完成しましたが、IBM Cloud にはどのようにデプロイするのでしょう? IBM Eclipse Tools for IBM Cloud には、IBM Cloud アカウントをサーバーとして表すメカニズムが用意されているので、この例ではこのツールを使用して、Liberty ベースのアプリケーションをワークスペースから IBM Cloud アカウントにデプロイします。そのためには、IBM Cloud サーバー・プロファイルを作成する必要があります。

  1. Eclipse の「Server (サーバー)」ビューを右クリックして、「New (新規)」 > 「Server (サーバー)」の順に選択します。
  2. サーバーとして「IBM Cloud」を選択します。 新規サーバーを作成するウィンドウのスクリーンショット
    新規サーバーを作成するウィンドウのスクリーンショット
  3. 「Next (次へ)」をクリックします。すると、IBM Cloud アカウント情報を求めるプロンプトが出されるので、その情報を入力し、「Validate Account (アカウントの検証)」をクリックします。 IBM Cloud アカウント情報を入力するウィンドウのスクリーンショット
    IBM Cloud アカウント情報を入力するウィンドウのスクリーンショット
  4. アカウントの有効性が確認されたら、「Next (次へ)」をクリックし、IBM Cloud サーバーに関連付ける組織とスペースを選択します。この例では、cmadison@us.ibm.com 組織と、この組織に属する watson スペースを選択しました。 madison@us.ibm.com 組織の watson スペースが選択された「Organization and Spaces (組織およびスペース)」ウィンドウのスクリーンショット
    madison@us.ibm.com 組織の watson スペースが選択された「Organization and Spaces (組織およびスペース)」ウィンドウのスクリーンショット

    アカウントの構成が完了すると、サーバー・リストに IBM Cloud アカウントが表示されます。

    サーバー・リストに表示された IBM Cloud アカウントのスクリーンショット
    サーバー・リストに表示された IBM Cloud アカウントのスクリーンショット

    umcmm は Node.js アプリケーションです。

ステップ 3: アプリケーションを IBM Cloud にデプロイする

gwTest アプリケーションを IBM Cloud にデプロイするには、以下の手順に従います。

  1. 「Server (サーバー)」ビューで、新規に作成した IBM Cloud サーバー・プロファイルを右クリックして「Add and Remove (追加および除去)」を選択します。 「Add and Remove (追加および除去)」メニュー項目のスクリーンショット
    「Add and Remove (追加および除去)」メニュー項目のスクリーンショット
  2. 「gwTest」を「Configured (構成済み)」セクションに追加して、「Finish (完了)」をクリックします。 使用可能なリソースのリストから、構成するリソースを選択する画面のスクリーンショット
    使用可能なリソースのリストから、構成するリソースを選択する画面のスクリーンショット
  3. アプリケーション名を入力して「Next (次へ)」をクリックします。 「Application details (アプリケーションの詳細)」ウィンドウのスクリーンショット
    「Application details (アプリケーションの詳細)」ウィンドウのスクリーンショット
  4. アプリケーションのサブドメイン名とその他のデプロイメント情報を追加します。 「Launch deployment (デプロイメントの起動)」ウィンドウのスクリーンショット
    「Launch deployment (デプロイメントの起動)」ウィンドウのスクリーンショット
  5. 「Next (次へ)」をクリックします。使用可能なサービスから、アプリケーションをバインドするサービスを選択します。この例の場合、バインド先の Question and Answer サービス・インスタンスはまだ存在しません。そのサービス・インスタンスは、ステップ 4 で IBM Cloud ダッシュボードを使用して作成します。 サービスを選択するウィンドウのスクリーンショット
    サービスを選択するウィンドウのスクリーンショット
  6. 「Finish (完了)」をクリックします。これで、IBM Cloud へのアプリケーションのデプロイメントが開始されます。デプロイメント・プロセスの出力は、「Console (コンソール)」ビューに表示されます。アプリケーションが IBM Cloud に転送されると、IBM Cloud はこのアプリケーションが Liberty ベースであると判断し、Java ランタイム環境と Liberty プロファイルを用意します。その環境が使用可能になった時点で、アプリケーションが Liberty にデプロイされて起動されます。 デプロイメント・プロセスの出力を表示する「Console (コンソール)」ビューのスクリーンショット
    デプロイメント・プロセスの出力を表示する「Console (コンソール)」ビューのスクリーンショット

ステップ 4: Question and Answer サービスを追加する

以下に示しているのは、私の IBM Cloud ダッシュボードのビューです。このビューには、2 つのアプリケーションが実行中であり、User Modeling サービス・インスタンスが使用可能になっていることが示されています。ここに欠けているのは、gwTest アプリケーション用の Question and Answer サービス・インスタンスです。

IBM Cloud ダッシュボードのスクリーンショット
IBM Cloud ダッシュボードのスクリーンショット

以下の手順に従って、サービス・インスタンスを作成します。

  1. ダッシュボードで「ADD A SERVICE OR API (サービスまたは API の追加)」リンクを選択します。前述の Watson サービスの選択肢が表示されます。このアプリケーションには Question and Answer サービス・インスタンスを作成する必要があるので、「Question and Answer」アイコンを選択します。 IBM Cloud で使用可能な Watson サービスのスクリーンショット
    IBM Cloud で使用可能な Watson サービスのスクリーンショット
  2. 「Question and Answer」ウィンドウの右側にはいくつかのフィールドがありますが、ここで最も重要なのは、「App (アプリ)」フィールドの値を「gwTest」に設定することです。こうすることで、作成されるサービス・インスタンスが自動的にアプリケーションにバインドされます。そのように設定したら、「CREATE (作成)」をクリックします。 Question and Answer サービスを作成するウィンドウのスクリーンショット
    Question and Answer サービスを作成するウィンドウのスクリーンショット
  3. サービスの作成が完了すると、アプリケーションの詳細が表示されます。サービス・インスタンスの「Show Credentials (資格情報の表示)」をクリックすると、このアプリケーションのサービスとしての資格情報が表示されます。これらの資格情報は、アプリケーションが VCAP_SERVICES 環境変数から受け取る情報です。 gwTest アプリケーションの Question and Answer サービスで使用する資格情報のスクリーンショット
    gwTest アプリケーションの Question and Answer サービスで使用する資格情報のスクリーンショット

ステップ 5: アプリケーションを使用する

Question and Answer サービス・インスタンスが作成されたので、アプリケーションを使用できる状態になりました。ブラウザーでアプリケーションにアクセスすると、単純なインターフェースが表示されます。

  1. 質問テキスト・フィールドに、質問を入力し (例えば、「What is there to do in Cozumel? (コスメル島では何ができますか?)」)、「Submit (送信)」をクリックして質問を Watson に送信します。 質問テキスト・フィールドのスクリーンショット
    質問テキスト・フィールドのスクリーンショット
  2. 応答として返されるのは、JSON 質問応答オブジェクトの配列です。現在のところ、応答を提供する Watson インスタンスは 1 つだけですが、将来的には複数のインスタンスが応答を提供するようになる可能性があります。id プロパティーは一意の質問 ID です。questionText には、尋ねた質問が繰り返されています。 質問に対する応答としての JSON 質問応答オブジェクトの配列を表示した画面のスクリーンショット
    質問に対する応答としての JSON 質問応答オブジェクトの配列を表示した画面のスクリーンショット
  3. 以下に、質問に対してトップに挙げられた応答を示します。応答には、id プロパティー、応答のテキスト、信頼度、そして応答を生成したパイプラインが含まれています。この例での応答に寄与したのは、TAO パイプラインです。TAO は、トピック指向のパイプライン (Topic-Oriented Pipeline) であり、既存のドキュメントからの定義済み応答ユニット (PAU: Predefined Answer Unit) を保持します。この例の場合、ユーザーに表示される応答は、テキストではなく PAU 識別子です。 ユーザーに表示される PAU 識別子のスクリーンショット
    ユーザーに表示される PAU 識別子のスクリーンショット
  4. 応答のテキストを取得するには、evidencelist プロパティーを参照します。answerevidencelist のエントリーは、同じインデックスを共有します (この例では「0」)。このエビデンスには、応答のテキストだけでなく、著作権情報、使用条件、ドキュメントへのポインター、信頼度 (value) などといったメタデータも含まれています。 エビデンスの結果の例のスクリーンショット
    エビデンスの結果の例のスクリーンショット

まとめ

このチュートリアルでは、新しく追加された Watson サービスを簡単に紹介し、Eclipse 対応の IBM Cloud ツールを使用して Javaベースのアプリケーションを Eclipse からデプロイする方法を紹介しました。

次に採るべきステップは、皆さん次第です! IBM Cloud アカウントを取得して、Watson サービスを無料で試して未来を築いてください!


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing
ArticleID=1002327
ArticleTitle=サンプル Liberty アプリケーションを作成して IBM Cloud にデプロイする
publish-date=12142017