Configurar um vetorizador em um índice de pesquisa

Importante

Esse recurso está em versão prévia pública nos Termos de Uso Complementares. A API REST 2023-10-01-Preview dá suporte a esse recurso.

Na Pesquisa de IA do Azure, um vetorizador é um software que executa a vetorização, como um modelo de inserção implantado no OpenAI do Azure, que converte texto em vetores durante a execução da consulta.

Ele é definido em um índice de pesquisa, aplica-se a campos de vetor pesquisáveis e é usado no momento da consulta para gerar uma inserção para uma entrada de consulta de texto. Se, em vez disso, você precisar vetorizar o texto como parte do processo de indexação, consulte a Vetorização Integrada (Versão Prévia). Para vetorização interna durante a indexação, você pode configurar um indexador e um conjunto de habilidades que chama um modelo de inserção do OpenAI do Azure para seu conteúdo de texto bruto.

Para adicionar um vetorizador ao índice de pesquisa, você pode usar o designer de índice no portal do Azure ou chamar a API REST Create or Update Index 2023-10-01-preview ou usar qualquer pacote do SDK beta do Azure atualizado para fornecer esse recurso.

Pré-requisitos

Recomendamos que você habilite o log de diagnóstico em seu serviço de pesquisa para confirmar a execução da consulta vetor.

Experimentar um vetor com dados de exemplo

O assistente de importação e vetorização de dados lê arquivos do Armazenamento de Blobs do Azure, cria um índice com campos em partes e vetorizados e adiciona um vetorizador. Por design, o vetorizador criado pelo assistente é definido como o mesmo modelo de inserção usado para indexar o conteúdo do blob.

  1. Carregue arquivos de dados de exemplo em um contêiner no Armazenamento do Azure. Usamos alguns pequenos arquivos de texto do livro terrestre da NASA para testar essas instruções em um serviço de pesquisa gratuito.

  2. Execute o assistente de importação e vetorização de dados, escolhendo o contêiner de blob para a fonte de dados.

    Captura de tela da guia Conectar-se aos seus dados.

  3. Escolha uma implantação existente de text-embedding-ada-002. Esse modelo gera inserções durante a indexação e também é usado para configurar o vetor usado durante consultas.

    Captura de tela da página de dados vetorizar e enriquecer.

  4. Depois que o assistente for concluído e todo o processamento do indexador for concluído, você deverá ter um índice com um campo de vetor pesquisável. A definição JSON do campo tem esta aparência:

     {
         "name": "vector",
         "type": "Collection(Edm.Single)",
         "searchable": true,
         "retrievable": true,
         "dimensions": 1536,
         "vectorSearchProfile": "vector-nasa-ebook-text-profile"
     }
    
  5. Você também deve ter um perfil de vetor e um vetorizador, semelhante ao exemplo a seguir:

    "profiles": [
       {
         "name": "vector-nasa-ebook-text-profile",
         "algorithm": "vector-nasa-ebook-text-algorithm",
         "vectorizer": "vector-nasa-ebook-text-vectorizer"
       }
     ],
     "vectorizers": [
       {
         "name": "vector-nasa-ebook-text-vectorizer",
         "kind": "azureOpenAI",
         "azureOpenAIParameters": {
           "resourceUri": "https://my-fake-azure-openai-resource.openai.azure.com",
           "deploymentId": "text-embedding-ada-002",
           "apiKey": "0000000000000000000000000000000000000",
           "authIdentity": null
         },
         "customWebApiParameters": null
       }
     ]
    
  6. Pule para testar o vetorizador para conversão de texto em vetor durante a execução da consulta.

Definir um vetor e um perfil de vetor

Esta seção explica as modificações em um esquema de índice para definir um vetor manualmente.

  1. Use Criar ou Atualizar Índice (versão prévia) para adicionar vectorizers a um índice de pesquisa.

  2. Adicione o seguinte JSON à sua definição de índice. A seção vetorizadores fornece informações de conexão para um modelo de inserção implantado. Esta etapa mostra dois exemplos de vetor para que você possa comparar um modelo de inserção do OpenAI do Azure e uma API Web personalizada lado a lado.

      "vectorizers": [
        {
          "name": "my_azure_open_ai_vectorizer",
          "kind": "azureOpenAI",
          "azureOpenAIParameters": {
            "resourceUri": "https://url.openai.azure.com",
            "deploymentId": "text-embedding-ada-002",
            "apiKey": "mytopsecretkey"
          }
        },
        {
          "name": "my_custom_vectorizer",
          "kind": "customWebApi",
          "customVectorizerParameters": {
            "uri": "https://my-endpoint",
            "authResourceId": " ",
            "authIdentity": " "
          }
        }
      ]
    
  3. No mesmo índice, adicione uma seção de perfis de vetor que especifica um de seus vetores. Perfis de vetor também exigem um algoritmo de busca em vetores usado para criar estruturas de navegação.

    "profiles": [ 
        { 
            "name": "my_vector_profile", 
            "algorithm": "my_hnsw_algorithm", 
            "vectorizer":"my_azure_open_ai_vectorizer" 
        }
    ]
    
  4. Atribua um perfil de vetor a um campo de vetor. O exemplo a seguir mostra uma coleção de campos com o campo de chave necessário, um campo de cadeia de caracteres de título e dois campos de vetor com uma atribuição de perfil de vetor.

    "fields": [ 
            { 
                "name": "ID", 
                "type": "Edm.String", 
                "key": true, 
                "sortable": true, 
                "analyzer": "keyword" 
            }, 
            { 
                "name": "title", 
                "type": "Edm.String"
            }, 
            { 
                "name": "vector", 
                "type": "Collection(Edm.Single)", 
                "dimensions": 1536, 
                "vectorSearchProfile": "my_vector_profile", 
                "searchable": true, 
                "retrievable": true
            }, 
            { 
                "name": "my-second-vector", 
                "type": "Collection(Edm.Single)", 
                "dimensions": 1024, 
                "vectorSearchProfile": "my_vector_profile", 
                "searchable": true, 
                "retrievable": true
            }
    ]
    

Testar um vetorizador

Use um cliente de pesquisa para enviar uma consulta por meio de um vetor. Este exemplo pressupõe o Visual Studio Code com um cliente REST e um índice de exemplo.

  1. No Visual Studio Code, forneça um ponto de extremidade de pesquisa e uma chave de API de consulta de pesquisa:

     @baseUrl: 
     @queryApiKey: 00000000000000000000000
    
  2. Cole em uma solicitação de consulta de vetor. Certifique-se de usar uma versão prévia da API REST.

     ### Run a query
     POST {{baseUrl}}/indexes/vector-nasa-ebook-txt/docs/search?api-version=2023-10-01-preview  HTTP/1.1
         Content-Type: application/json
         api-key: {{queryApiKey}}
    
         {
             "count": true,
             "select": "title,chunk",
             "vectorQueries": [
                 {
                     "kind": "text",
                     "text": "what cloud formations exists in the troposphere",
                     "fields": "vector",
                     "k": 3,
                     "exhaustive": true
                 }
             ]
         }
    

    Os principais pontos sobre a consulta incluem:

    • "kind": "text" informa ao mecanismo de pesquisa que a entrada é uma cadeia de caracteres de texto e para usar o vetor associado ao campo de pesquisa.

    • "text": "what cloud formations exists in the troposphere" é a cadeia de caracteres de texto a ser vetorizada.

    • "fields": "vector" é o nome do campo a ser consultado. Se você usar o índice de exemplo produzido pelo assistente, o campo de vetor gerado será nomeado vector.

  3. Enviar a solicitação. Você deve obter três k resultados, em que o primeiro resultado é o mais relevante.

Observe que não há propriedades de vetorizador a serem definidas no momento da consulta. A consulta lê as propriedades do vetor, de acordo com a atribuição de campo de perfil de vetor no índice.

Verificar os logs

Se você habilitou o log de diagnóstico para seu serviço de pesquisa, execute uma consulta Kusto para confirmar a execução da consulta em seu campo de vetor:

OperationEvent
| where TIMESTAMP > ago(30m)
| where Name == "Query.Search" and AdditionalInfo["QueryMetadata"]["Vectors"] has "TextLength"

Práticas recomendadas

Se você estiver configurando um vetorizador do OpenAI do Azure, considere as mesmas práticas recomendadas para a habilidade de inserção do OpenAI do Azure.

Confira também