条件付きコグニティブ スキル
条件付きの スキルを使用すると、ブール値操作を必要とする Azure AI Search シナリオで、出力に割り当てるデータを決定できます。 これらのシナリオには、条件に基づくフィルター処理、既定値の割り当て、データのマージなどがあります。
次の擬似コードは、条件付きスキルで実現できる内容を示しています。
if (condition)
{ output = whenTrue }
else
{ output = whenFalse }
Note
このスキルは Azure AI サービスにバインドされていません。 これは課金対象外で、Azure AI サービスの重要な要件はありません。
@odata.type
Microsoft.Skills.Util.ConditionalSkill
評価済みフィールド
このスキルは、入力が評価済みフィールドなので特別です。
次の各項目は、式の有効な値です。
注釈パス (式内のパスは、"$(" と ")" で区切る必要があります)
例 :"= $(/document)" "= $(/document/content)"
リテラル (文字列、数値、true、false、null)
例 :"= 'this is a string'" // string (note the single quotation marks) "= 34" // number "= true" // Boolean "= null" // null value
比較演算子 (==、!=、>=、>、<=、<) を使用する式
例 :"= $(/document/language) == 'en'" "= $(/document/sentiment) >= 0.5"
ブール演算子 (>、|、!、^) を使用する式
例 :"= $(/document/language) == 'en' && $(/document/sentiment) > 0.5" "= !true"
数値演算子 (+、-、*、/、%) を使用する式
例 :"= $(/document/sentiment) + 0.5" // addition "= $(/document/totalValue) * 1.10" // multiplication "= $(/document/lengthInMeters) / 0.3049" // division
条件付きスキルでは評価がサポートされているため、小規模の変換シナリオで使用できます。 例として、スキル定義 4 を参照してください。
スキルの入力
入力では大文字と小文字が区別されます。
入力 | 説明 |
---|---|
condition | この入力は、評価する条件を表す評価済みフィールドです。 この条件はブール値 (true または false) に評価されます。 例: "= true" "= $(/document/language) =='fr'" "= $(/document/pages/*/language) == $(/document/expectedLanguage)" |
whenTrue | この入力は、条件が true に評価された場合に返される値を表す評価済みフィールドです。 定数文字列は単一引用符 (' と ') に囲まれて返されます。 サンプル値: "= 'contract'" "= $(/document/contractType)" "= $(/document/entities/*)" |
whenFalse | この入力は、条件が false に評価された場合に返される値を表す評価済みフィールドです。 サンプル値: "= 'contract'" "= $(/document/contractType)" "= $(/document/entities/*)" |
スキルの出力
単に "output" という名前の 1 つの出力があります。これは、条件が false の場合は値 whenFalse を返し、条件が true の場合は値 whenTrue を返します。
例
サンプル スキル定義 1: フランス語のドキュメントのみを返すように、ドキュメントをフィルター処理する
次の出力は、ドキュメントの言語がフランス語の場合、文の配列 ("/document/frenchSentences") を返します。 言語がフランス語ではない場合、その値は null に設定されます。
{
"@odata.type": "#Microsoft.Skills.Util.ConditionalSkill",
"context": "/document",
"inputs": [
{ "name": "condition", "source": "= $(/document/language) == 'fr'" },
{ "name": "whenTrue", "source": "/document/sentences" },
{ "name": "whenFalse", "source": "= null" }
],
"outputs": [ { "name": "output", "targetName": "frenchSentences" } ]
}
"/document/frenchSentences" が別のスキルの "コンテキスト" として使用される場合、そのスキルは "/document/frenchSentences" が null に設定されていない場合にのみ実行されます。
サンプル スキル定義 2: 存在しない値の既定値を設定する
次の出力では注釈 ("/document/languageWithDefault") が作成され、ドキュメントの言語に設定されるか、言語が設定されていない場合は "es" に設定されます。
{
"@odata.type": "#Microsoft.Skills.Util.ConditionalSkill",
"context": "/document",
"inputs": [
{ "name": "condition", "source": "= $(/document/language) == null" },
{ "name": "whenTrue", "source": "= 'es'" },
{ "name": "whenFalse", "source": "= $(/document/language)" }
],
"outputs": [ { "name": "output", "targetName": "languageWithDefault" } ]
}
サンプル スキル定義 3: 2 つのフィールドの値を 1 つにマージする
この例では、一部の文には frenchSentiment プロパティがあります。 frenchSentiment プロパティが null の場合は常に englishSentiment 値を使用します。 sentiment ("/document/sentences/*/sentiment") というメンバーに出力を割り当てます。
{
"@odata.type": "#Microsoft.Skills.Util.ConditionalSkill",
"context": "/document/sentences/*",
"inputs": [
{ "name": "condition", "source": "= $(/document/sentences/*/frenchSentiment) == null" },
{ "name": "whenTrue", "source": "/document/sentences/*/englishSentiment" },
{ "name": "whenFalse", "source": "/document/sentences/*/frenchSentiment" }
],
"outputs": [ { "name": "output", "targetName": "sentiment" } ]
}
変換の例
サンプル スキル定義 4: 単一フィールドでのデータ変換
この例では、0 から 1 の間の sentiment を受け取ります。 これを -1 から 1 の間に変換します。 条件付きのスキルを使用して、この小さな変換を実行することができます。
この例では、条件が常に true であるため、このスキルの条件付きの側面は使用しません。
{
"@odata.type": "#Microsoft.Skills.Util.ConditionalSkill",
"context": "/document/sentences/*",
"inputs": [
{ "name": "condition", "source": "= true" },
{ "name": "whenTrue", "source": "= $(/document/sentences/*/sentiment) * 2 - 1" },
{ "name": "whenFalse", "source": "= 0" }
],
"outputs": [ { "name": "output", "targetName": "normalizedSentiment" } ]
}
特別な注意事項
一部のパラメーターは評価されるため、記載されたパターンに慎重に従う必要があります。 式は等号 "=" で始める必要があります。 パスは "$(" と ")" で区切る必要があります。 文字列は必ず単一引用符で囲んでください。 これは、エバリュエーターで文字列と実際のパスや演算子を区別するのに役立ちます。 また、演算子の両側には必ず空白を入れてください (たとえば、パス内の "*" は乗算という意味ではありません)。