Competência cognitiva do formulador

A habilidade Shaper é 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 habilidades não puderem ser mapeadas diretamente para campos de pesquisa, você poderá adicionar uma habilidade Shaper para criar a forma de dados necessária para seu índice de pesquisa ou armazenamento de conhecimento.

Os principais casos de uso para essa habilidade incluem:

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

  • Você deseja mapear várias saídas de habilidades 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, combinando títulos e autores em um único campo.

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

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

Nota

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

@odata.type

Microsoft.Skills.Util.ShaperSkill

Cenário 1: tipos complexos

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

No entanto, outra abordagem para criar tipos complexos é através da habilidade 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 ser mapeadas para um tipo complexo em seu índice.

O exemplo de definição de habilidade a seguir fornece os nomes dos membros como 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 da amostra

Um conjunto de habilidades é invocado por um indexador e um indexador requer um índice. Uma representação de campo complexa em seu índice pode se parecer com o 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 habilidades

Um documento JSON de entrada que forneça entrada utilizável para essa habilidade Shaper pode ser:

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

Resultados em termos de competências

A habilidade Shaper gera um novo elemento chamado analyzedText com os elementos combinados de texto e sentimento. Esta saída está em conformidade com o esquema de índice. Ele 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 inputs

Em outro exemplo, imagine que, em diferentes estágios de processamento de pipeline, você extraiu o título de um livro e os títulos dos capítulos 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 Shaper para este cenário pode se 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"
        }
    ]
}

Resultados em termos de competências

Nesse caso, o Shaper nivela 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 a partir de contextos aninhados

Imagine que você tem títulos de capítulos e números de capítulos de um livro e executou reconhecimento de entidade e frases-chave no conteúdo e agora precisa agregar 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ê pode usar source. Se a entrada estiver em um contexto diferente do contexto de habilidade, use sourceContext. O sourceContext requer que você defina uma entrada aninhada, onde cada entrada tem um source que identifica o elemento específico usado para preencher o nó nomeado.

A definição de habilidade Shaper para este cenário pode se 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"
        }
    ]
}

Resultados em termos de competências

Neste caso, o Shaper cria um tipo complexo. Esta estrutura existe na memória. Se quiser salvá-lo em um repositório de conhecimento, crie 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}
                    ]
                }
            }
        }
    ]
}

Consulte também