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 から受け取った text
、data
、language
のパラメータがあります。これは、NLUエンジンに送信される前に、関数内で変更可能なテキストとデータを返す必要があります。
このpreNlu変換関数は、ストップワード除去、句読点除去、ノイズ除去、テキスト正規化、スペルチェックなどの典型的なNLPステップに使用できます。
postNlu
変換関数postNlu
には、NLUエンジンから受け取ったtext
、data
、nluResult
、connectorOutput
のパラメータがあります。
connectorOutput
はDialogFlow、LUIS、WatsonなどのNLUエンジンからの生の出力です。nluResult
よりも多くのデータを持っており、NLUエンジンからの生データは、Flowの実行で使用するためにすでにフィルタリングされ、マッピングされています。
この関数は、フローを処理する前に、data
とnluResult
を返す必要があります。
NLUコードトランスフォーマー
NLU コードトランスフォーマーを使用すると、カスタムNLUパイプラインを記述できます。NLUトランスフォーマーを作成するには、コードコネクタの[Transformer Functions(トランスフォーマー関数)]タブを開きます。ここでは、設定可能なさまざまなトランスフォーマー設定と、トランスフォーマーコードエディタがあります。
トランスフォーマー関数preNlu
には、Endpoint から受け取った text
、data
、language
のパラメータがあります。この関数はdata
とnluResult
を返す必要があり、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.log
、console.info
、console.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"
}
}
}
}