NLU Transformers(NLUトランスフォーマー)

説明

NLU Transformers(NLUトランスフォーマー)は、NLUコネクタのパイプラインをカスタマイズするために使用されます。これにより、エンドポイントからの受信メッセージをNLUエンジンに送信する前に変更したり、NLUエンジンからの応答をFlow実行に送信する前に変更したりすることができます。

NLUトランスフォーマーは、Cognigy NLUだけでなく、Alexa、DialogFlow、Microsoft LUIS、Watson Assistantコネクタでも利用可能です。

Cognigy NLUを使用する場合、コネクタは必要ありません。ただし、Cognigy NLU用のトランスフォーマーを使用するには、明示的にCognigy NLUコネクタを作成し、エンドポイントでこのコネクタを選択する必要があります。

Code NLU コネクタを作成し、Codeトランスフォーマーにカスタム NLUパイプラインを記述することで、さまざまなコネクタで利用可能なNLUプロバイダのいずれかを使用せずに、カスタム NLUコネクタを作成することもできます。

NLUトランスフォーマー

Cognigy NLU、Alexa、DialogFlow、LUIS、または Watson Assistant コネクタ用のNLUトランスフォーマーを作成するには、NLUコネクタの[Transformer Functions(トランスフォーマー関数)]タブを開きます。ここでは、設定可能なさまざまなトランスフォーマー設定とトランスフォーマーコードエディタをご覧いただけます。

preNlu

トランスフォーマー関数preNluには、Endpoint から受け取った textdatalanguageのパラメータがあります。これは、NLUエンジンに送信される前に、関数内で変更可能なテキストとデータを返す必要があります。

このpreNlu変換関数は、ストップワード除去、句読点除去、ノイズ除去、テキスト正規化、スペルチェックなどの典型的なNLPステップに使用できます。

postNlu

変換関数postNluには、NLUエンジンから受け取ったtextdatanluResultconnectorOutputのパラメータがあります。

connectorOutputはDialogFlow、LUIS、WatsonなどのNLUエンジンからの生の出力です。nluResultよりも多くのデータを持っており、NLUエンジンからの生データは、Flowの実行で使用するためにすでにフィルタリングされ、マッピングされています。

この関数は、フローを処理する前に、datanluResultを返す必要があります。

NLUコードトランスフォーマー

NLU コードトランスフォーマーを使用すると、カスタムNLUパイプラインを記述できます。NLUトランスフォーマーを作成するには、コードコネクタの[Transformer Functions(トランスフォーマー関数)]タブを開きます。ここでは、設定可能なさまざまなトランスフォーマー設定と、トランスフォーマーコードエディタがあります。

トランスフォーマー関数preNlu には、Endpoint から受け取った textdatalanguage のパラメータがあります。この関数はdatanluResultを返す必要があり、Flowの実行に送られます。

利用可能なモジュール

HTTPリクエストの送信

トランスフォーマー内から、他社NLUエンジンなどの外部サービスにHTTPリクエストを送信することが可能です。すべてのトランスフォーマー関数はこの目的のためにhttpRequestモジュールにアクセスすることができます。このモジュールは1つの設定オブジェクトを引数として受け取る関数として呼び出されます。このオブジェクトは NPM モジュールRequestのoptions オブジェクトと同じ形式です。例:

handleInput: async () => {
  const result = await httpRequest({
    uri: "some-uri",
    method: "POST",
    body: {},
    json: true
  });

  console.log(result);
  return result;
}

httpRequestモジュールの制限事項

デフォルトでは、トランスフォーマーの実行ごとに1つのHTTPリクエストしか送信できず、デフォルトでは、他のエンドポイントにHTTPリクエストを送信することはできません。

Cognigy NLU

トランスフォーマー内から Cognigy NLUを実行することができます。すべてのNLUトランスフォーマー関数はgetCognigyNlu関数にアクセスできます。この関数は引数として文字列を取ります。例:

const cognigyNluResult = await getCognigyNlu(text + "Lorem ipsum dolor sit amet, consectetur adipiscing elit.");

セッションストレージ

セッションストレージは、すべてのトランスフォーマー関数で利用可能なストレージオブジェクトで、セッション全体を通して利用可能です。これは、後に他のトランスフォーマー関数で使用しなければならない変数を保存したり、トークの状態を保存したりするために使用することができます。トランスフォーマー関数に公開されるgetSessionStorageという関数があります。この関数はPromiseを返し、そのPromiseはsessionStorageオブジェクトで解決され、通常のオブジェクトとして操作することができます。例:

セッションストレージ内のオブジェクトの変更

セッションストレージ内のオブジェクトを変更したい場合、オブジェクトを直接変更するのではなく、局所的に変更し、後で割り当てるのが最適な方法です。

const sessionStorage = await getSessionStorage();

sessionStorage.test = "test";

// Muting complex objects
// Instead of changing the objects directly inside sessionStorage
// change them locally and then assign them to the sessionStorage
let tempArr = sessionStorage.arr || [];
tempArr.push(1);
tempArr.push(2);
sessionStorage.arr = tempArr;

NPM モジュール

トランスフォーマーでは、以下の NPM モジュールを使用できます

  • uuid
  • crypto
  • _ (Lodash)
  • moment

ロギング

トランスフォーマーの中で、console.logconsole.infoconsole.errorモジュールを使用することができます。これにより、ログはそれぞれデバッグログ、情報ログ、エラーログとしてプロジェクトログページに表示されます。

トランスフォーマー設定

有効化

特定のトランスフォーマー機能を使用するには、[Transformer Settings(トランスフォーマー設定)]セクションで有効にする必要があります。各トランスフォーマー機能を有効にするためのトグルがあります。トランスフォーマーの機能は、コードを削除することなく、一時的に無効にすることができます。

トランスフォーマーでのエラー処理

トランスフォーマーのデフォルトのエラー処理は、ログページにエラーを記録し、通常の実行を続けるというものです。つまり、トランスフォーマー関数の中で何かが失敗しても、メッセージはトランスフォーマー関数が存在しないかのように処理されます。[Abort On Error]という設定があり、これをオンにすると、トランスフォーマーがエラーを発生した後に実行を完全に停止することができます。

トランスフォーマーのスタックをデバッグ

[Debug Transformer Stack]設定が有効な場合、トランスフォーマーからのさまざまな入力と出力は、インタラクションパネルで入力オブジェクトとして公開されます。これはインタラクションパネルに書き込むときのみ機能し、他のエンドポイントを使用する場合は入力オブジェクトの一部ではないことに注意してください。例:

{
   "transformerStack":{
      "preNluInput":{
         "text":"hi!!!"
      },
      "preNluOutput":{
         "text":"hi",
         "data":{

         }
      },
      "postNluInput":{
         "text":"hi",
         "data":{

         },
         "nluResult":{
            "intent":"",
            "intentScore":0,
            "slots":{

            },
            "type":"Greeting"
         },
         "connectorOutput":null
      },
      "postNluOutput":{
         "data":{

         },
         "nluResult":{
            "intent":"myIntent",
            "intentScore":1,
            "slots":{

            },
            "type":"Greeting"
         }
      }
   }
}