Partilhar via


Índices vetoriais na Pesquisa de IA do Azure

Os vetores são incorporações de alta dimensão que representam matematicamente texto, imagens e outros conteúdos. O Azure AI Search armazena vetores no nível do campo, permitindo que conteúdo vetorial e não vetorial coexistam dentro do mesmo índice de pesquisa.

Um índice de pesquisa torna-se um índice vetorial quando você define campos vetoriais e uma configuração de vetor. Para preencher campos vetoriais, você pode enviar incorporações pré-computadas para eles ou usar vetorização integrada, um recurso interno da Pesquisa de IA do Azure que gera incorporações durante a indexação.

No momento da consulta, os campos vetoriais em seu índice permitem a pesquisa de similaridade, onde o sistema recupera documentos cujos vetores são mais semelhantes à consulta vetorial. Você pode usar a pesquisa vetorial para correspondência de semelhança sozinha ou a pesquisa híbrida para uma combinação de semelhança e correspondência de palavras-chave.

Este artigo aborda os principais conceitos para criar e gerenciar um índice vetorial, incluindo:

  • Padrões de recuperação de vetores
  • Conteúdo (campos vetoriais e configuração)
  • Estrutura física dos dados
  • Operações básicas

Sugestão

Quer começar já? Consulte Criar um índice vetorial.

Padrões de recuperação de vetores

O Azure AI Search suporta dois padrões para recuperação de vetores:

  • Pesquisa clássica. Esse padrão usa uma barra de pesquisa, entrada de consulta e resultados renderizados. Durante a execução da consulta, o mecanismo de pesquisa ou o código do aplicativo vetoriza a entrada do usuário. Em seguida, o mecanismo de pesquisa executa a pesquisa vetorial sobre os campos vetoriais em seu índice e formula uma resposta que você renderiza em um aplicativo cliente.

    Na Pesquisa de IA do Azure, os resultados são retornados como um conjunto de linhas nivelado e você pode escolher quais campos incluir na resposta. Embora o mecanismo de pesquisa corresponda em vetores, seu índice deve ter conteúdo não vetorial legível por humanos para preencher os resultados da pesquisa. A pesquisa clássica suporta consultas vetoriais e consultas híbridas.

  • Pesquisa generativa. Os modelos de linguagem usam dados da Pesquisa de IA do Azure para responder às consultas do usuário. Uma camada de orquestração normalmente coordena os prompts e mantém o contexto, inserindo os resultados da pesquisa em modelos de linguagem para bate-papo como o GPT. Esse padrão é baseado na arquitetura de geração aumentada de recuperação (RAG), onde o índice de pesquisa fornece dados de base.

Esquema de um índice vetorial

O esquema de um índice vetorial requer o seguinte:

  • Nome
  • Campo chave (string)
  • Um ou mais campos vetoriais
  • Configuração vetorial

Os campos não vetoriais não são necessários, mas recomendamos incluí-los para consultas híbridas ou para retornar conteúdo literal que não passa por um modelo de linguagem. Para obter mais informações, consulte Criar um índice vetorial.

Seu esquema de índice deve refletir seu padrão de recuperação de vetor. Esta seção aborda principalmente a composição de campos para pesquisa clássica, mas também fornece orientação de esquema para pesquisa generativa.

Configuração básica do campo vetorial

Os campos vetoriais têm tipos de dados e propriedades exclusivos. Veja a aparência de um campo vetorial em uma coleção de campos:

{
    "name": "content_vector",
    "type": "Collection(Edm.Single)",
    "searchable": true,
    "retrievable": true,
    "dimensions": 1536,
    "vectorSearchProfile": "my-vector-profile"
}

Apenas determinados tipos de dados são suportados para campos vetoriais. O tipo mais comum é Collection(Edm.Single), mas usar tipos estreitos pode economizar em armazenamento.

Os campos vetoriais devem ser pesquisáveis e recuperáveis, mas não podem ser filtráveis, faceteáveis ou classificáveis. Eles também não podem ter analisadores, normalizadores ou atribuições de mapas de sinônimos.

A dimensions propriedade deve ser definida para o número de incorporações geradas pelo modelo de incorporação. Por exemplo, text-embedding-ada-002 gera 1.536 incorporações para cada pedaço de texto.

Os campos vetoriais são indexados usando algoritmos especificados em um perfil de pesquisa vetorial, que é definido em outro lugar no índice e não é mostrado neste exemplo. Para obter mais informações, consulte Adicionar uma configuração de pesquisa vetorial.

Coleção de campos para cargas de trabalho vetoriais básicas

Os índices vetoriais exigem mais do que apenas campos vetoriais. Por exemplo, todos os índices devem ter um campo chave, que está id no exemplo a seguir:

"name": "example-basic-vector-idx",
"fields": [
  { "name": "id", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "key": true },
  { "name": "content_vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": null },
  { "name": "content", "type": "Edm.String", "searchable": true, "retrievable": true, "analyzer": null },
  { "name": "metadata", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true }
]

Outros campos, como o content campo, fornecem o equivalente legível por humanos do content_vector campo. Se você estiver usando modelos de linguagem exclusivamente para formulação de respostas, poderá omitir campos de conteúdo não vetoriais, mas as soluções que enviam resultados de pesquisa diretamente para aplicativos cliente devem ter conteúdo não vetorial.

Os campos de metadados são úteis para filtros, especialmente se incluírem informações de origem sobre o documento de origem. Embora não seja possível filtrar diretamente em um campo vetorial, você pode definir os modos pré-filtro, pós-filtro ou pós-filtro estrito (visualização) para filtrar antes ou depois da execução da consulta vetorial.

Esquema gerado pelo assistente de importação

Recomendamos o assistente Importar dados (novos) para avaliação e testes de prova de conceito. O assistente gera o esquema de exemplo neste trecho.

O assistente divide seu conteúdo em documentos de pesquisa menores, o que beneficia os aplicativos RAG que usam modelos de linguagem para formular respostas. O chunking ajuda você a ficar dentro dos limites de entrada dos modelos de linguagem e dos limites de token do ranker semântico. Também melhora a precisão na pesquisa de similaridade ao combinar consultas com partes extraídas de vários documentos de origem. Para obter mais informações, consulte Dividir documentos grandes para soluções de pesquisa vetorial.

Para cada documento de pesquisa no exemplo a seguir, há um ID de bloco, ID pai, bloco, título e campo vetorial. O mago

  • Preenche os campos chunk_id e parent_id com metadados de blob codificados em base64 (caminho).

  • Extrai os campos chunk do conteúdo do blob e title do nome do blob, respectivamente.

  • Cria o vector campo chamando um modelo de incorporação do Azure OpenAI que você fornece para vetorizar o chunk campo. Apenas o campo vetorial é totalmente gerado durante este processo.

"name": "example-index-from-import-wizard",
"fields": [
  { "name": "chunk_id", "type": "Edm.String", "key": true, "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true, "analyzer": "keyword"},
  { "name": "parent_id", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": true},
  { "name": "chunk", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "sortable": false},
  { "name": "title", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": false},
  { "name": "vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "vector-1707768500058-profile"}
]

Se você estiver projetando armazenamento vetorial para aplicativos RAG e estilo chat, poderá criar dois índices:

  • Um para conteúdo estático que você indexou e vetorizou.
  • Uma opção para conversas que podem ser usadas em fluxos de prompt.

Para fins ilustrativos, esta seção usa o acelerador de solução de bate-papo com seus dados para criar os índices chat-index e conversations.

Captura de ecrã dos índices criados pelo acelerador.

Os seguintes campos de chat-index dão suporte a experiências de pesquisa generativa:

"name": "example-index-from-accelerator",
"fields": [
  { "name": "id", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true },
  { "name": "content", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true },
  { "name": "content_vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "my-vector-profile"},
  { "name": "metadata", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true },
  { "name": "title", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "facetable": true },
  { "name": "source", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true  },
  { "name": "chunk", "type": "Edm.Int32", "searchable": false, "filterable": true, "retrievable": true },
  { "name": "offset", "type": "Edm.Int32", "searchable": false, "filterable": true, "retrievable": true }
]

Os seguintes campos do conversations suportam orquestração e histórico de chat:

"fields": [
    { "name": "id", "type": "Edm.String", "key": true, "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": false },
    { "name": "conversation_id", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": true },
    { "name": "content", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true },
    { "name": "content_vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "default-profile" },
    { "name": "metadata", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true },
    { "name": "type", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": true },
    { "name": "user_id", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": true },
    { "name": "sources", "type": "Collection(Edm.String)", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": true },
    { "name": "created_at", "type": "Edm.DateTimeOffset", "searchable": false, "filterable": true, "retrievable": true },
    { "name": "updated_at", "type": "Edm.DateTimeOffset", "searchable": false, "filterable": true, "retrievable": true }
]

A captura de tela a seguir mostra os resultados da pesquisa no conversationsSearch explorer:

Captura de ecrã do Search Explorer com os resultados de um índice concebido para aplicações RAG.

No nosso exemplo, a pontuação da pesquisa é 1,00 porque a pesquisa não é qualificada. Vários campos suportam orquestração e fluxos imediatos:

  • conversation_id identifica cada sessão de chat.
  • type Indica se o conteúdo é do usuário ou do assistente.
  • created_at e updated_at removem os chats do histórico.

Estrutura física e dimensão

No Azure AI Search, a estrutura física de um índice é, em grande parte, uma implementação interna. Você pode acessar seu esquema, carregar e consultar seu conteúdo, monitorar seu tamanho e gerenciar sua capacidade. No entanto, a Microsoft gerencia a infraestrutura e as estruturas de dados físicas armazenadas com seu serviço de pesquisa.

A dimensão e o conteúdo de um índice são determinados por:

  • Quantidade e composição dos seus documentos.

  • Atributos em campos individuais. Por exemplo, é necessário mais armazenamento para campos filtráveis.

  • Configuração de índice, incluindo a configuração vetorial que especifica como as estruturas de navegação internas são criadas. Você pode escolher HNSW ou KNN exaustivo para pesquisa de similaridade.

O Azure AI Search impõe limites ao armazenamento vetorial, o que ajuda a manter um sistema equilibrado e estável para todas as cargas de trabalho. Para ajudá-lo a permanecer abaixo dos limites, o uso de vetores é rastreado e relatado separadamente no portal do Azure e programaticamente por meio de estatísticas de serviço e índice.

A captura de tela a seguir mostra um serviço S1 configurado com uma partição e uma réplica. Este serviço tem 24 pequenos índices, cada um com uma média de um campo vetorial composto por 1.536 incorporações. O segundo bloco mostra a cota e o uso de índices vetoriais. Como um índice vetorial é uma estrutura de dados interna criada para cada campo vetorial, o armazenamento para índices vetoriais é sempre uma fração do armazenamento geral usado pelo índice. Campos não vetoriais e outras estruturas de dados consomem o resto.

Captura de tela de blocos de uso mostrando armazenamento, índice de vetores e contagem de índice.

Os limites e estimativas de índice vetorial são abordados em outro artigo, mas dois pontos a enfatizar são que o armazenamento máximo depende da data de criação e da camada de preços do seu serviço de pesquisa. Os serviços de mesma camada mais recentes têm significativamente mais capacidade para índices vetoriais. Por estas razões, deve:

Operações básicas e interação

Esta seção apresenta operações de tempo de execução vetorial, incluindo a conexão e a proteção de um único índice.

Observação

Não há suporte a portal ou API para mover ou copiar um índice. Normalmente, aponta-se a implantação da aplicação para um serviço de pesquisa diferente (usando o mesmo nome de índice), ou altera-se o nome para criar uma cópia no serviço de pesquisa atual e depois construí-la.

Isolamento do índice

No Azure AI Search, você trabalha com um índice de cada vez. Todas as operações relacionadas ao índice visam um único índice. Não há nenhum conceito de índices relacionados ou a junção de índices independentes para indexação ou consulta.

Disponível continuamente

Um índice fica imediatamente disponível para consultas assim que o primeiro documento é indexado, mas não está totalmente operacional até que todos os documentos estejam indexados. Internamente, um índice é distribuído entre partições e executado em réplicas. O índice físico é gerenciado internamente. Você gerencia o índice lógico.

Um índice está continuamente disponível e não pode ser pausado ou colocado offline. Por ser projetado para operação contínua, as atualizações de seu conteúdo e adições ao próprio índice acontecem em tempo real. Se uma solicitação coincidir com uma atualização de documento, as consultas poderão retornar temporariamente resultados incompletos.

A continuidade da consulta existe para operações de documento, como atualização ou exclusão, e para modificações que não afetam a estrutura existente ou a integridade de um índice, como a adição de novos campos. As atualizações estruturais, como a alteração de campos existentes, geralmente são gerenciadas usando um fluxo de trabalho drop-and-rebuild em um ambiente de desenvolvimento ou criando uma nova versão do índice no serviço de produção.

Para evitar uma reconstrução de índice, alguns clientes que estão a fazer pequenas alterações "versionam" um campo ao criar um novo que coexiste com uma versão anterior. Com o tempo, isso leva a conteúdo órfão devido a campos obsoletos e definições obsoletas de analisadores personalizados, especialmente num índice de produção que custa caro a replicar. Você pode resolver esses problemas durante as atualizações planejadas do índice como parte do gerenciamento do ciclo de vida do índice.

Conexão de ponto de extremidade

Todas as solicitações de indexação vetorial e consulta destinam-se a um índice. Os parâmetros de avaliação são geralmente um dos seguintes:

Ponto final Ligação e controlo de acessos
<your-service>.search.windows.net/indexes Destina-se à coleção de índices. Usado ao criar, listar ou excluir um índice. Os direitos de administrador são necessários para essas operações e estão disponíveis por meio de chaves de API de administrador ou de uma função de Colaborador de Pesquisa.
<your-service>.search.windows.net/indexes/<your-index>/docs Destina-se à coleção de documentos de um único índice. Usado ao consultar um índice ou atualização de dados. Para consultas, os direitos de leitura são suficientes e estão disponíveis por meio de chaves de API de consulta ou de uma função de leitor de dados. Para a atualização de dados, são necessários direitos de administrador.
  1. Verifique se você tem permissões ou uma chave de acesso à API. A menos que esteja consultando um índice existente, você precisa de direitos de administrador ou uma atribuição de função de Colaborador para gerenciar e exibir conteúdo em um serviço de pesquisa.

  2. Comece com o portal do Azure. A pessoa que criou o serviço de pesquisa pode visualizá-lo e gerenciá-lo, incluindo a concessão de acesso a outras pessoas na página Controle de acesso (IAM).

  3. Avance para outros clientes para acesso de forma programática. Para as primeiras etapas, recomendamos o guia de início rápido Pesquisa vetorial usando REST e o repositório azure-search-vector-samples.

Gerenciar repositórios de vetores

O Azure fornece uma plataforma de monitoramento que inclui log de diagnóstico e alertas. Recomendamos que você:

Acesso seguro a dados vetoriais

O Azure AI Search implementa criptografia de dados, conexões privadas para cenários sem internet e atribuições de função para acesso seguro por meio do Microsoft Entra ID. Para obter mais informações sobre recursos de segurança corporativos, consulte Segurança no Azure AI Search.