次の方法で共有


Shaper コグニティブ スキル

Shaper スキルは、スキルセットによって作成されたメモリ内エンリッチメント ツリーの構造を変更するために使用されます。 スキルの出力を検索フィールドに直接マップできない場合は、 Shaper スキルを追加して、検索インデックスまたはナレッジ ストアに必要なデータシェイプを作成できます。

このスキルの主なユース ケースは次のとおりです。

  • ナレッジ ストアを設定しています。 ナレッジ ストアのテーブルとオブジェクトの物理的な構造は、プロジェクションによって定義されます。 Shaper スキルは、プロジェクションにプッシュできるデータ図形を作成することで、粒度を追加します。

  • scenario 1で説明されているように、複数のスキル出力を検索インデックス内の単一の構造 (通常はcomplex 型にマップする必要があります。

  • スキルは複数の出力を生成しますが、 scenario 2 で説明されているように、1 つのフィールドに結合する必要があります (複合型である必要はありません。 たとえば、タイトルと作成者を 1 つのフィールドに結合します。

  • スキルは子要素を持つ複数の出力を生成し、それらを組み合わせたい。 このユース ケースは、 cenario 3 に示されています。

Shaper スキルの出力名は常に "output" です。 内部的には、パイプラインでは別の名前をマップできます (下の例では "analyzedText") が、Shaper スキル自体は、応答内で "output" を返します。 これは、エンリッチメントしたドキュメントのデバッグ中に名前付けの不一致に気付いた場合や、カスタム スキルを構築し、応答を自身で作成している場合に重要なことがあります。

Note

このスキルは Azure AI サービスにバインドされていません。 これは課金対象外で、Azure AI サービスの重要な要件はありません。

@odata.type

Microsoft.Skills.Util.ShaperSkill

シナリオ 1: 複合型

analyzedText という名前の構造を作成し、それに 2 つのメンバーがあって、それぞれが textsentiment という名前だとします。 インデックス内では、マルチパートの検索可能フィールドは複合型と呼ばれ、通常は、それにマップする対応した複合構造をソース データが備えている場合に作成されます。

ただし、複合型を作成するための別の方法として、Shaper スキルを利用することもできます。 このスキルをスキルセットに含めることで、スキルセット処理中のメモリ内操作において、入れ子になった構造を持つデータ シェイプを出力できます。その後、それをインデックス内の複合型にマップできます。

次の例のスキル定義では、入力としてメンバー名を提供します。

{
  "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
  "context": "/document/content/phrases/*",
  "inputs": [
    {
      "name": "text",
      "source": "/document/content/phrases/*"
    },
    {
      "name": "sentiment",
      "source": "/document/content/phrases/*/sentiment"
    }
  ],
  "outputs": [
    {
      "name": "output",
      "targetName": "analyzedText"
    }
  ]
}

サンプルのインデックス

スキルセットはインデクサーによって呼び出され、インデクサーはインデックスを必要とします。 インデックス内の複合フィールドの表現は、次の例のようになります。

"name":"my-index",
"fields":[
   { "name":"myId", "type":"Edm.String", "key":true, "filterable":true  },
   { "name":"analyzedText", "type":"Edm.ComplexType",
      "fields":[
         {
            "name":"text",
            "type":"Edm.String",
            "facetable":false,
            "filterable":false,
            "searchable":true,
            "sortable":false  },
         {
            "name":"sentiment",
            "type":"Edm.Double",
            "facetable":true,
            "filterable":true,
            "searchable":true,
            "sortable":true }
      }

スキルの入力

この Shaper スキルに使用できる入力を提供する入力 JSON ドキュメントは、次のようになります。

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "text": "this movie is awesome",
                "sentiment": 0.9
            }
        }
    ]
}

スキルの出力

Shaper スキルにより、textsentiment の要素が組み合わせられている analyzedText という名前の新しい要素が生成されます。 この出力は、インデックス スキーマに準拠します。 Azure AI Search インデックスにインポートされ、インデックスが作成されます。

{
    "values": [
      {
        "recordId": "1",
        "data":
           {
            "analyzedText": 
              {
                "text": "this movie is awesome" ,
                "sentiment": 0.9
              }
           }
      }
    ]
}

シナリオ 2: 入力の統合

別の例で、パイプライン処理の異なる段階において、書籍のタイトルを抽出し、その書籍のさまざまなページで章のタイトルを抽出したとします。 これで、これらのさまざまな出力で構成される 1 つの構造を作成できるようになりました。

このシナリオの Shaper スキルの定義は、次の例のようになります。

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "context": "/document",
    "inputs": [
        {
            "name": "title",
            "source": "/document/content/title"
        },
        {
            "name": "chapterTitles",
            "source": "/document/content/pages/*/chapterTitles/*/title"
        }
    ],
    "outputs": [
        {
            "name": "output",
            "targetName": "titlesAndChapters"
        }
    ]
}

スキルの出力

この場合、Shaper により、すべての章のタイトルがフラット化され、1 つの配列を作成しています。

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "titlesAndChapters": {
                    "title": "How to be happy",
                    "chapterTitles": [
                        "Start young",
                        "Laugh often",
                        "Eat, sleep and exercise"
                    ]
                }
            }
        }
    ]
}

シナリオ 3: 入れ子になったコンテキストからの入力統合

書籍の章のタイトルと章番号があり、コンテンツに対してエンティティ認識とキー フレーズを実行していて、さまざまなスキルの結果を、章名、エンティティ、キー フレーズを含む単一の図形に集計する必要があるとします。

次の使用例は、省略可能な sourceContext プロパティを "chapterTitles" 入力に追加します。 sourcesourceContext のプロパティは相互に排他的です。 入力がスキルのコンテキストにある場合は、 sourceを使用できます。 入力がスキル コンテキストよりもコンテキストにある場合は、sourceContextを使用します。 sourceContextでは、入れ子になった入力を定義する必要があります。各入力には、名前付きノードの設定に使用される特定の要素を識別するsourceがあります。

このシナリオの Shaper スキルの定義は、次の例のようになります。

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "context": "/document",
    "inputs": [
        {
            "name": "title",
            "source": "/document/content/title"
        },
        {
            "name": "chapterTitles",
            "sourceContext": "/document/content/pages/*/chapterTitles/*",
            "inputs": [
              {
                  "name": "title",
                  "source": "/document/content/pages/*/chapterTitles/*/title"
              },
              {
                  "name": "number",
                  "source": "/document/content/pages/*/chapterTitles/*/number"
              }
            ]
        }

    ],
    "outputs": [
        {
            "name": "output",
            "targetName": "titlesAndChapters"
        }
    ]
}

スキルの出力

この場合、Shaper では複合型を作成します。 この構造体はメモリ内に存在します。 ナレッジ ストアに保存する場合は、ストレージの特性が定義されているスキルセット内にプロジェクションを作成する必要があります。

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "titlesAndChapters": {
                    "title": "How to be happy",
                    "chapterTitles": [
                      { "title": "Start young", "number": 1},
                      { "title": "Laugh often", "number": 2},
                      { "title": "Eat, sleep and exercise", "number: 3}
                    ]
                }
            }
        }
    ]
}

関連項目