"Projeções" do repositório de conhecimento no Azure AI Search

As projeções definem as tabelas, objetos e arquivos físicos em um repositório de conhecimento que aceitam conteúdo de um pipeline de enriquecimento do Azure AI Search. Se estiver a criar um arquivo de conhecimento, a maioria do trabalho consistirá em definir e moldar projeções.

Este artigo apresenta conceitos de projeção e fluxo de trabalho para que você tenha algum conhecimento prévio antes de começar a codificar.

As projeções são definidas nos conjuntos de habilidades do Azure AI Search, mas os resultados finais são as projeções de tabela, objeto e arquivo de imagem no Armazenamento do Azure.

Projections expressed in Azure Storage

Tipos de projeções e utilização

Um repositório de conhecimento é uma construção lógica que é fisicamente expressa como uma coleção solta de tabelas, objetos JSON ou arquivos de imagem binários no Armazenamento do Azure.

Projeção Armazenamento Utilização
Tabelas Armazenamento de Tabelas do Azure Usado para dados que são melhor representados como linhas e colunas, ou sempre que você precisar de representações granulares de seus dados (por exemplo, como quadros de dados). As projeções de tabela permitem definir uma forma esquematizada, usando uma habilidade Shaper ou usando modelagem embutida para especificar colunas e linhas. Você pode organizar o conteúdo em várias tabelas com base em princípios de normalização familiares. As tabelas que estão no mesmo grupo são automaticamente relacionadas.
Objetos Armazenamento de Blobs do Azure Usado quando você precisa da representação JSON completa de seus dados e enriquecimentos em um documento JSON. Assim como nas projeções de tabela, somente objetos JSON válidos podem ser projetados como objetos, e a modelagem pode ajudá-lo a fazer isso.
Ficheiros Armazenamento de Blobs do Azure Usado quando você precisa salvar arquivos de imagem binários normalizados.

Definição de projeção

As projeções são especificadas sob a propriedade "knowledgeStore" de um conjunto de habilidades. As definições de projeção são usadas durante a invocação do indexador para criar e carregar objetos no Armazenamento do Azure com conteúdo enriquecido. Se você não está familiarizado com esses conceitos, comece com o enriquecimento de IA para uma introdução.

O exemplo a seguir ilustra a colocação de projeções sob knowledgeStore e a construção básica. O nome, o tipo e a fonte de conteúdo compõem uma definição de projeção.

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
      {
        "tables": [
          { "tableName": "ks-museums-main", "generatedKeyName": "ID", "source": "/document/tableprojection" },
          { "tableName": "ks-museumEntities", "generatedKeyName": "ID","source": "/document/tableprojection/Entities/*" }
        ],
        "objects": [
          { "storageContainer": "ks-museums", "generatedKeyName": "ID", "source": "/document/objectprojection" }
        ],
        "files": [ ]
      }
    ]

Grupos de projeção

As projeções são uma matriz de coleções complexas, o que significa que você pode especificar vários conjuntos de cada tipo. É comum usar apenas um grupo de projeção, mas você pode usar vários se os requisitos de armazenamento incluírem suporte a diferentes ferramentas e cenários. Por exemplo, você pode usar um grupo para design e depuração de um conjunto de habilidades, enquanto um segundo conjunto coleta a saída usada para um aplicativo online, com um terceiro para cargas de trabalho de ciência de dados.

A mesma saída do conjunto de habilidades é usada para preencher todos os grupos sob projeções. O exemplo a seguir mostra dois.

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
        {
            "tables": [],
            "objects": [],
            "files": []
        }, 
        {
            "tables": [],
            "objects": [],
            "files": []
        }
    ]
}

Os grupos de projeção têm as seguintes características-chave de exclusividade e parentesco mútuo.

Princípio Description
Exclusividade mútua Cada grupo é totalmente isolado de outros grupos para dar suporte a diferentes cenários de modelagem de dados. Por exemplo, se você estiver testando diferentes estruturas e combinações de tabelas, colocaria cada conjunto em um grupo de projeção diferente para teste AB. Cada grupo obtém dados da mesma fonte (árvore de enriquecimento), mas é totalmente isolado da combinação tabela-objeto-arquivo de qualquer grupo de projeção de pares.
Parentesco Dentro de um grupo de projeção, o conteúdo em tabelas, objetos e arquivos está relacionado. O armazenamento de conhecimento usa chaves geradas como pontos de referência para um nó pai comum. Por exemplo, considere um cenário em que você tenha um documento contendo imagens e texto. Você pode projetar o texto em tabelas e as imagens em arquivos binários, e ambas as tabelas e objetos têm uma coluna/propriedade que contém a URL do arquivo.

Projeção "fonte"

O parâmetro source é o terceiro componente de uma definição de projeção. Como as projeções armazenam dados de um pipeline de enriquecimento de IA, a fonte de uma projeção é sempre a saída de uma habilidade. Como tal, a saída pode ser um único campo (por exemplo, um campo de texto traduzido), mas muitas vezes é uma referência a uma forma de dados.

As formas de dados vêm do seu conjunto de habilidades. Entre todas as habilidades internas fornecidas no Azure AI Search, há uma habilidade de utilidade chamada habilidade Shaper que é usada para criar formas de dados. Você pode incluir habilidades de Shaper (quantas forem necessárias) para dar suporte às projeções no repositório de conhecimento.

As formas são frequentemente usadas com projeções de tabela, onde a forma não apenas especifica quais linhas vão para a tabela, mas também quais colunas são criadas (você também pode passar uma forma para uma projeção de objeto).

As formas podem ser complexas e está fora do escopo discuti-las em profundidade aqui, mas o exemplo a seguir ilustra brevemente uma forma básica. A saída da habilidade Shaper é especificada como a origem de uma projeção de tabela. Dentro da própria projeção da tabela haverá colunas para "metadata-storage_path", "reviews_text", "reviews_title", e assim por diante, conforme especificado na forma.

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "name": "ShaperForTables",
    "description": null,
    "context": "/document",
    "inputs": [
        {
            "name": "metadata_storage_path",
            "source": "/document/metadata_storage_path",
            "sourceContext": null,
            "inputs": []
        },
        {
          "name": "reviews_text",
          "source": "/document/reviews_text"
        }, 
        {
          "name": "reviews_title",
          "source": "/document/reviews_title"
        },
        {
          "name": "reviews_username",
          "source": "/document/reviews_username"
        },
    ],
    "outputs": [
      {
        "name": "output",
        "targetName": "mytableprojection"
      }
    ]
}

Ciclo de vida da projeção

As projeções têm um ciclo de vida vinculado aos dados de origem em sua fonte de dados. À medida que os dados de origem são atualizados e reindexados, as projeções são atualizadas com os resultados dos enriquecimentos, garantindo que suas projeções sejam eventualmente consistentes com os dados em sua fonte de dados. No entanto, as projeções também são armazenadas independentemente no Armazenamento do Azure. Eles não serão excluídos quando o indexador ou o próprio serviço de pesquisa for excluído.

Consumir em aplicativos

Depois que o indexador for executado, conecte-se às projeções e consuma os dados em outros aplicativos e cargas de trabalho.

  • Use o portal do Azure para verificar a criação de objetos e o conteúdo no Armazenamento do Azure.

  • Use o Power BI para exploração de dados. Essa ferramenta funciona melhor quando os dados estão no Armazenamento de Tabela do Azure. No Power BI, você pode manipular dados em novas tabelas que são mais fáceis de consultar e analisar.

  • Use dados enriquecidos no contêiner de blob em um pipeline de ciência de dados. Por exemplo, você pode carregar os dados de blobs em um Pandas DataFrame.

  • Por fim, se você precisar exportar seus dados do repositório de conhecimento, o Azure Data Factory tem conectores para exportar os dados e colocá-los no banco de dados de sua escolha.

Lista de verificação para começar

Lembre-se de que as projeções são exclusivas de lojas de conhecimento e não são usadas para estruturar um índice de pesquisa.

  1. No Armazenamento do Azure, obtenha uma cadeia de conexão das Chaves de Acesso e verifique se a conta é StorageV2 (V2 de uso geral).

  2. Enquanto estiver no Armazenamento do Azure, familiarize-se com o conteúdo existente em contêineres e tabelas para escolher nomes não conflitantes para as projeções. Um repositório de conhecimento é uma coleção solta de tabelas e contêineres. Considere adotar uma convenção de nomenclatura para acompanhar objetos relacionados.

  3. No Azure AI Search, habilite o cache de enriquecimento (visualização) no indexador e execute o indexador para executar o conjunto de habilidades e preencher o cache. Este é um recurso de visualização, portanto, certifique-se de usar a API REST de visualização (api-version=2020-06-30-preview ou posterior) na solicitação do indexador. Depois que o cache for preenchido, você poderá modificar as definições de projeção em um repositório de conhecimento gratuitamente (desde que as próprias habilidades não sejam modificadas).

  4. No seu código, todas as projeções são definidas apenas em um conjunto de habilidades. Não há propriedades de indexador (como mapeamentos de campo ou mapeamentos de campo de saída) que se apliquem a projeções. Dentro de uma definição de conjunto de habilidades, você se concentrará em duas áreas: propriedade knowledgeStore e matriz de habilidades.

    1. Em knowledgeStore, especifique projeções de tabela, objeto e arquivo na projections seção . O tipo de objeto, o nome do objeto e a quantidade (de acordo com o número de projeções que você definir) são determinados nesta seção.

    2. A partir da matriz de habilidades, determine quais saídas de habilidades devem ser referenciadas na source de cada projeção. Todas as projeções têm uma fonte. A fonte pode ser a saída de uma habilidade upstream, mas muitas vezes é a saída de uma habilidade Shaper. A composição da sua projeção é determinada através de formas.

  5. Se você estiver adicionando projeções a um conjunto de habilidades existente, atualize o conjunto de habilidades e execute o indexador.

  6. Verifique seus resultados no Armazenamento do Azure. Em execuções subsequentes, evite nomear colisões excluindo objetos no Armazenamento do Azure ou alterando nomes de projetos no conjunto de habilidades.

  7. Se você estiver usando projeções de tabela, marque Noções básicas sobre o modelo de dados do Serviço de Tabela e Metas de escalabilidade e desempenho para armazenamento de tabelas para garantir que seus requisitos de dados estejam dentro dos limites documentados de armazenamento de tabela.

Próximos passos

Analise a sintaxe e os exemplos para cada tipo de projeção.