Habilidades cognitivas do Shaper

A habilidade Modelador é usada para remodelar ou modificar a estrutura da árvore de enriquecimento na memória criada por um conjunto de habilidades. Se as saídas de habilidade não puderem ser mapeadas diretamente para os campos de pesquisa, você poderá adicionar uma habilidade Shaper para criar a forma de dados necessária para o índice de pesquisa ou armazenamento de conhecimento.

Os principais casos de uso dessa habilidade incluem:

  • Você está preenchendo um repositório de conhecimento. A estrutura física das tabelas e objetos de um repositório de conhecimento é definida por meio de projeções. Uma habilidade de Criador adiciona granularidade criando formas de dados que podem ser enviadas para as projeções.

  • Você deseja mapear várias saídas de habilidade em uma única estrutura em seu índice de pesquisa, geralmente um tipo complexo, conforme descrito no cenário 1.

  • As habilidades produzem várias saídas, mas você deseja combinar em um único campo (não precisa ser um tipo complexo), conforme descrito no cenário 2. Por exemplo, combinar títulos e autores em um único campo.

  • As habilidades produzem várias saídas com elementos filho e você deseja combiná-las. Esse caso de uso é ilustrado no cenário 3.

O nome de saída de uma habilidade do Shaper é sempre "saída". Internamente, o pipeline pode mapear um nome diferente, como "analyzedText", como mostrado nos exemplos abaixo, mas a habilidade Shaper em si retorna "saída" na resposta. Isso pode ser importante se você estiver depurando documentos enriquecidos e observar a discrepância de nomenclatura, ou se você criar uma habilidade personalizada e estruturação de resposta por conta própria.

Observação

Essa habilidade não está associada aos serviços de IA do Azure. Ele não é faturável e não tem requisito de chave dos serviços de IA do Azure.

@odata.type

Microsoft.Skills.Util.ShaperSkill

Cenário 1: tipos complexos

Considere um cenário onde você deseja criar uma estrutura chamada analyzedText que tem dois membros: texto e sentimento, respectivamente. Em um índice, um campo pesquisável de várias partes é chamado de tipo complexo e geralmente é criado quando os dados de origem têm uma estrutura complexa correspondente que mapeia para ele.

No entanto, outra abordagem para a criação de tipos complexos é por meio da habilidade de Shaper. Ao incluir essa habilidade em um conjunto de habilidades, as operações na memória durante o processamento do conjunto de habilidades podem gerar formas de dados com estruturas aninhadas, que podem então ser mapeadas para um tipo complexo no índice.

A definição de habilidade de exemplo a seguir fornece os nomes do membro como a entrada.

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

Índice de exemplo

Um conjunto de habilidades é invocado por um indexador e um indexador requer um índice. Uma representação de campo complexo no índice pode ser semelhante ao exemplo a seguir.

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

Entrada de habilidade

Um documento JSON de entrada que fornece uma entrada utilizável para essa habilidade de Shaper pode ser:

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

Saída de habilidade

A habilidade Formatador gera um novo elemento chamado analyzedText com os elementos combinados de texto e sentimento. Essa saída está em conformidade com o esquema do índice. Isso será importado e indexado em um índice do Azure AI Search.

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

Cenário 2: consolidação de entrada

Em outro exemplo, imagine que em diferentes estágios do processamento de pipeline, você extraiu o título de um livro e títulos de capítulo em diferentes páginas do livro. Agora você pode criar uma única estrutura composta por essas várias saídas.

A definição de habilidade de Shaper para esse cenário pode parecer com o exemplo a seguir:

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

Saída de habilidade

Nesse caso, o Shaper mescla todos os títulos de capítulo para criar uma única matriz.

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

Cenário 3: consolidação de entrada de contextos aninhados

Imagine que você tem títulos e números de capítulo de um livro e executou o reconhecimento de entidade e frases-chave no conteúdo e agora precisa agregar os resultados das diferentes habilidades em uma única forma com o nome do capítulo, entidades e frases-chave.

Este exemplo adiciona uma propriedade opcional sourceContext à entrada "chapterTitles". As source propriedades e sourceContext são mutuamente exclusivas. Se a entrada estiver no contexto da habilidade, você poderá usar source. Se a entrada estiver em um contexto diferente do contexto da habilidade, use sourceContext. O sourceContext exige que você defina uma entrada aninhada, em que cada entrada tem um source que identifica o elemento específico usado para preencher o nó nomeado.

A definição de habilidade de Shaper para esse cenário pode parecer com o exemplo a seguir:

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

Saída de habilidade

Nesse caso, o Shaper cria um tipo complexo. Essa estrutura existe na memória. Se você quiser salvá-la em um repositório de conhecimento, deverá criar uma projeção em seu conjunto de habilidades que defina as características de armazenamento.

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

Confira também