Redshift データをAI アシスタントのPEP から利用する方法

AI アシスタントPEP から Redshift データに連携し、チャットボットでリアルタイムRedshift データを使う方法

CData API Server と ADO.NET Provider / JDBC Driver for Redshift を使って、AI アシスタントPEP(https://pep.work/) から Redshift に接続して、チャットボットでリアルタイムRedshiftデータを使った応答を可能にする方法を説明します。

※製品について詳しい情報をご希望の方は以下からお進みください。

API Server の設定

次のステップに従い、セキュアな REST API サービスを立ち上げます

デプロイ

API Server はサーバー上で稼働します。Windows 版は、製品に組み込まれているスタンドアロンのサーバーかIIS に配置して稼働させることができます。Java 版では、Java servlet コンテナにAPI Server のWAR ファイルを配置します。 デプロイの詳細は製品ヘルプを参照してください。API Server を Microsoft AzureAmazon EC2Heroku にデプロイする方法はKB に記事があります。

Redshift への接続

API Server の管理コンソールで[設定]→[接続]から新しい接続を追加してRedshift を追加します。

Redshift のアイコンがデフォルトのAPI Server の接続先にない場合には、API Server がJava 版の場合はJDBC Drivers、API Server がWindows 版の場合はADO.NET Data ProvidersからRedshift ドライバーをAPI Server と同じマシンにインストールして、API Server を再起動します。

Redshift への接続に必要な認証情報を入力します。接続のテストを行い、接続を確認して、設定を保存します。

Redshift への接続には次を設定します:

  • Server: 接続するデータベースをホストしているクラスタのホスト名およびIP アドレス。
  • Port: クラスタのポート。
  • Database: データベース名、ブランクの場合ユーザーのデフォルトデータベースになります。
  • User: ユーザー名。
  • Password: ユーザーのパスワード。

Server およびPort の値はAWS の管理コンソールで取得可能です:

  1. Amazon Redshift console (http://console.aws.amazon.com/redshift) を開く。
  2. Clusters ページで、クラスタ名をクリック。
  3. クラスタのConfiguration タブで、表示された接続文字列からクラスタのURL をコピーします。

    接続を確立後、[設定]→[リソース]の画面で からREST API として公開するエンティティを選択します。

    API Server のユーザー設定

    [設定]→[ユーザー]からAPI にアクセスできるユーザーの認証設定を行います。API Server はトークンでの認証を行うことができます。 IP アドレスでAPI へのアクセスを制限することも可能です。デフォルトではローカルマシンからのアクセスのみが許可されています。SSL の設定も可能です。

    オンプレミスDB やファイルからのAPI Server 使用(オプション)

    オンプレミスRDB やExcel/CSV などのファイルのデータを使用する場合には、API Server のCloug Gateway / SSH ポートフォワーディングが便利です。是非、Cloud Gatway の設定方法 記事を参考にしてください。

    PEP でRedshift データをチャットで使う設定

    前項まででAPI ができたので、ここからはPEP 側での設定作業です。

    PEP でRedshift のAPI をコールするシナリオを作成

    PEP 側ではあらかじめSlack などのアプリケーションを構成しておきます。ここにAPI Server をコールするAI アシスタントのシナリオを追加していきます。

    • 「会話編集」→「シナリオ」に移動し、新しいシナリオを作成します。
    • シナリオ名を入力します。この例では、条件はSlack Homeを 選択しています。
    • 「新規作成」ボタンをクリックすると、以下のようなシナリオエディタ画面に移動します。これでシナリオを作成する準備ができました。

    Redshift のAPI の接続箇所の設定

    具体的にAPI連携を含めたシナリオを作っていきます。

    • 最初に検索したい文字列を受け取るための対話ノードを配置して、以下のように構成します。
    • ポイントは分岐条件で「以下のすべての会話」、発言内容の記憶で「film_name」として、会話した内容を変数に保存することです。
    • 対話ノードを配置したら、APIノードを追加して、対話ノードから接続していきます。
    • APIノードでは、以下のように CData API Server へのリクエストを構成します。
      ポイントは2つです。CData API Server は Filter 機能によって、取得するデータを絞り込むことができます。その指定が「$filter=contains(title,'{{ state.scenario_4.form.film_name }}')」の部分です。 「{{ state.scenario_4.form.film_name }}」は直前の対話ノードで設定した変数をパラメータとして渡しています。「scenario_4」はPEP のシナリオIDですので、作成したシナリオに合わせて変更してください。
    • HTTPヘッダーにAPI Server のユーザートークンを指定します。
      • API名:任意の名前を設定
      • URL:http://apiserverurl/api.rsc/film_list?$filter=contains(title,'{{ state.scenario_4.form.film_name }}')
      • HTTPメソッド:GET
      • Content-Type:JSON
      • HTTPヘッダー:キー「x-cdata-authtoken」、値「予め取得したAPI Serverのトークン」を指定

    これで保存すると、API ノードが使えるようになります。

    取得したRedshift からのレスポンスの表示方法

    最後に後続の対話ノードを構成し、取得した検索結果を表示します。

    対話ノードの応答文には、以下のような文章を埋め込みます。

    検索結果は以下のとおりです。 {% for item in state.scenario_4.api_response.film_search.value %} フィルムID:{{ item.FID }} タイトル : {{ item.title }} 値段:{{ item.price }} カテゴリー:{{ item.category }} 俳優: ----- {% endfor %}

    ここでポイントになるのは、API Server から受け取るJSONのレスポンスの分解方法です。 API Server のレスポンスはオブジェクト直下にvalueという配列要素があり、このレスポンスは「{{state.scenario_4.api_response.film_search.value}}」の形でアクセスできます。
    設定イメージ:state.シナリオID.api_response.APIノード名.value
    これを「FOR」での繰り返し処理で取得して、文章として表示する仕組みになっています。

    これで設定は完了です。実際に動かしてみると、Redshift →API Server → PEP 経由でデータを取得して表示していることがわかるかと思います。

    CData API Server の無償版およびトライアル

    CData API Server は、無償版および30日の無償トライアルがあります。是非、API Server ページ から製品をダウンロードしてお試しください。

 
 
ダウンロード