Kognitiv formarfärdighet

Shaper-färdigheten används för att omforma eller ändra strukturen i det minnesinterna berikande träd som skapats av en kompetensuppsättning. Om kunskapsutdata inte kan mappas direkt till sökfält kan du lägga till en Shaper-färdighet för att skapa den dataform du behöver för ditt sökindex eller kunskapslager.

Primära användningsfall för den här färdigheten är:

  • Du fyller i ett kunskapslager. Den fysiska strukturen för tabellerna och objekten i ett kunskapslager definieras genom projektioner. En Shaper-färdighet lägger till kornighet genom att skapa dataformer som kan push-överföras till projektionerna.

  • Du vill mappa flera kunskapsutdata till en enda struktur i ditt sökindex, vanligtvis en komplex typ, enligt beskrivningen i scenario 1.

  • Kunskaper ger flera utdata, men du vill kombinera till ett enda fält (det behöver inte vara en komplex typ), enligt beskrivningen i scenario 2. Du kan till exempel kombinera rubriker och författare i ett enda fält.

  • Kunskaper skapar flera utdata med underordnade element och du vill kombinera dem. Det här användningsfallet illustreras i scenario 3.

Utdatanamnet för en Shaper-färdighet är alltid "output". Internt kan pipelinen mappa ett annat namn, till exempel "analyzedText" enligt exemplen nedan, men själva Shaper-färdigheten returnerar "utdata" i svaret. Detta kan vara viktigt om du felsöker berikade dokument och märker namngivningsavvikelsen, eller om du skapar en anpassad färdighet och strukturerar svaret själv.

Kommentar

Den här färdigheten är inte kopplad till Azure AI-tjänster. Den kan inte faktureras och har inga nyckelkrav för Azure AI-tjänster.

@odata.type

Microsoft.Skills.Util.ShaperSkill

Scenario 1: komplexa typer

Tänk dig ett scenario där du vill skapa en struktur med namnet analyzedText som har två medlemmar: text respektive attityd. I ett index kallas ett sökbart fält i flera delar för en komplex typ och skapas ofta när källdata har en motsvarande komplex struktur som mappar till den.

En annan metod för att skapa komplexa typer är dock genom Shaper-färdigheten. Genom att inkludera den här färdigheten i en kompetensuppsättning kan minnesinterna åtgärder under bearbetning av kompetensuppsättningar mata ut dataformer med kapslade strukturer, som sedan kan mappas till en komplex typ i ditt index.

Följande exempel på färdighetsdefinitionen innehåller medlemsnamnen som indata.

{
  "@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"
    }
  ]
}

Exempelindex

En kompetensuppsättning anropas av en indexerare och en indexerare kräver ett index. En komplex fältrepresentation i ditt index kan se ut som i följande exempel.

"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 }
      }

Kunskapsinmatning

Ett inkommande JSON-dokument som tillhandahåller användbara indata för den här Shaper-färdigheten kan vara:

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

Kunskapsutdata

Shaper-färdigheten genererar ett nytt element som kallas analyzedText med de kombinerade elementen text och attityd. Dessa utdata överensstämmer med indexschemat. Den importeras och indexeras i ett Azure AI Search-index.

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

Scenario 2: konsolidering av indata

I ett annat exempel kan du tänka dig att du i olika skeden av pipelinebearbetningen har extraherat titeln på en bok och kapitelrubriker på olika sidor i boken. Nu kan du skapa en enda struktur som består av dessa olika utdata.

Formningsfärdighetsdefinitionen för det här scenariot kan se ut som i följande exempel:

{
    "@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"
        }
    ]
}

Kunskapsutdata

I det här fallet förenklar Shaper alla kapitelrubriker för att skapa en enda matris.

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

Scenario 3: indatakonsolidering från kapslade kontexter

Anta att du har kapitelrubriker och kapitelnummer i en bok och har kört entitetsigenkänning och nyckelfraser på innehållet och nu måste aggregera resultat från de olika färdigheterna till en enda form med kapitelnamnet, entiteterna och nyckelfraserna.

I det här exemplet läggs en valfri sourceContext egenskap till "chapterTitles"-indata. Egenskaperna source och sourceContext är ömsesidigt uteslutande. Om indata finns i kontexten för färdigheten kan du använda source. Om indata har en annan kontext än kunskapskontexten använder du sourceContext. Kräver sourceContext att du definierar en kapslad indata, där varje indata har en source som identifierar det specifika element som används för att fylla i den namngivna noden.

Formningsfärdighetsdefinitionen för det här scenariot kan se ut som i följande exempel:

{
    "@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"
        }
    ]
}

Kunskapsutdata

I det här fallet skapar Shaper en komplex typ. Den här strukturen finns i minnet. Om du vill spara den i ett kunskapslager bör du skapa en projektion i din kompetensuppsättning som definierar lagringsegenskaper.

{
    "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}
                    ]
                }
            }
        }
    ]
}

Se även