Compartilhar via


Eliminar instâncias de vetor opcionais do armazenamento

A Pesquisa de IA do Azure armazena várias cópias de campos de vetor que são usados em cargas de trabalho específicas. Se você não precisar dar suporte a um comportamento específico, como retornar vetores brutos em uma resposta de consulta, poderá definir propriedades no índice que omitem o armazenamento para essa carga de trabalho.

Pré-requisitos

  • Campos de vetor em um índice de pesquisa com uma configuração vectorSearch, usando os algoritmos HNSW (Hierarchical Navigable Small Worlds) ou KNN (K-nearest neighbor) exaustivo e um novo perfil de vetor.

Como os campos de vetor são armazenados

Para cada campo de vetor, há três cópias dos vetores:

Instância Uso
Vetores de origem (em JSON) como recebidos de um modelo de inserção ou solicitação de push para o índice Usado para atualização incremental de dados e se você quiser que os vetores "recuperáveis" sejam retornados na resposta da consulta.
Vetores originais de precisão total Usado para pontuação se os vetores estiverem descompactados ou nova pontuação opcional se os resultados da consulta forem obtidos em vetores compactados. A nova pontuação só se aplicará se os campos de vetor forem submetidos a quantização escalar ou binária.
Vetores no grafo HNSW para a pesquisa ANN (Approximate Nearest Neighbors) Usado para execução de consulta.

Você pode definir propriedades que descartam permanentemente as duas primeiras instâncias do armazenamento de vetor.

A última instância (vetores e grafo) é necessária para a execução da consulta vetor ANN. Técnicas de compactação com perdas, como quantização escalar ou binária, são aplicadas a essa instância de vetor. Se você quiser compensar a compactação com perdas, mantenha a segunda instância para fins de nova pontuação.

Definir a propriedade stored

A propriedade stored é um booliano em uma definição de campo de vetor que determina se o armazenamento é alocado para conteúdo de campo de vetor recuperável (a instância de origem). A propriedade stored booliana é true por padrão. Se não precisar de conteúdo de vetor bruto em uma resposta de consulta, poderá salvar até 50% de armazenamento por campo alterando stored para false.

Considerações para definir stored como false:

  • Como vetores não são legíveis por humanos, você pode omiti-los dos resultados enviados para LLMs em cenários RAG e dos resultados que são exibidos em uma página de busca. Mantenha-os, no entanto, se você estiver usando vetores em um processo downstream que consome conteúdo de vetor.

  • No entanto, se sua estratégia de indexação incluir atualizações parciais de documentos, como "merge" ou "mergeOrUpload" em um documento existente, a configuração stored=false impedirá atualizações de conteúdo para esses campos durante a mesclagem. Em cada operação "merge" ou "mergeOrUpload" para um documento de pesquisa, você deve fornecer os campos de vetor em sua totalidade, juntamente com os campos não vetoriais que você está atualizando ou o vetor será descartado.

Definir a atribuição stored=false é irreversível. Ela é definida durante a criação do índice em campos vetoriais quando estruturas de dados físicas são criadas. Se você quiser conteúdo de vetor recuperável mais tarde, deverá remover e recompilar o índice ou criar e carregar um novo campo que tenha a nova atribuição.

O exemplo a seguir mostra a coleção de campos de um índice de pesquisa. Defina stored como false para remover permanentemente o armazenamento recuperável para o campo de vetor.

PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2024-07-01 
  Content-Type: application/json  
  api-key: [admin key]  

    { 
      "name": "demo-index", 
      "fields": [ 
        { 
          "name": "vectorContent", 
          "type": "Collection(Edm.Single)", 
          "retrievable": false, 
          "stored": false, 
          "dimensions": 1536, 
          "vectorSearchProfile": "vectorProfile" 
        } 
      ] 
    } 

Resumo dos pontos-chave

  • Aplica-se a campos que têm um tipo de dados de vetor.

  • Afeta o armazenamento em disco, não na memória e não tem efeito sobre as consultas. A execução da consulta usa um índice de vetor separado que não é afetado pela propriedade stored porque essa cópia do vetor é sempre armazenada.

  • A propriedade stored é definida durante a criação do índice em campos de vetor e é irreversível. Se você quiser conteúdo recuperável mais tarde, deverá remover e recompilar o índice ou criar e carregar um novo campo que tenha a nova atribuição.

  • Os padrões são stored definido como true e retrievable definido como false. Em uma configuração padrão, uma cópia recuperável é armazenada, mas não é retornada automaticamente nos resultados. Quando stored for true, você pode alternar retrievable entre true e false a qualquer momento sem precisar recriar um índice. Quando stored for false, retrievable deve ser false e não pode ser alterado.

Definir a propriedade rescoreStorageMethod

Observação

Esse recurso está atualmente em visualização pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.

A propriedade rescoreStorageMethod em uma definição de campo de vetor determina se o armazenamento é alocado para vetores originais de precisão total. A propriedade rescoreStorageMethod é definida como preserveOriginals por padrão. Se não estiver usando as mitigações de sobreamostragem e nova pontuação fornecidas para consultar vetores compactados, você poderá salvar no armazenamento de vetores alterando rescoreStorageMethod para discardOriginals.

Se você pretende usar a quantização escalar ou binária, recomendamos manter rescoreStorageMethod definido como preserveOriginals.

Para definir essa propriedade:

  1. Use as APIs REST Criar Índice ou Criar ou Atualizar Índice 2024-11-01-preview ou um pacote beta do SDK do Azure fornecendo o recurso.

  2. Adicione uma seção vectorSearch ao índice com perfis, algoritmos e compactações.

  3. Em compactações, adicione rescoringOptions com enableRescoring definido como true, defaultOversampling definido como um inteiro positivo e rescoreStorageMethod definido como preserveOriginals.

    PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2024-11-01-preview
    
    {
        "name": "demo-index",
        "fields": [. . . ],
        . . .
        "vectorSearch": {
            "profiles": [
                {
                "name": "myVectorProfile",
                "algorithm": "myHnsw",
                "compression": "myScalarQuantization"
                }
            ],
            "algorithms": [
              {
                "name": "myHnsw",
                "kind": "hnsw",
                "hnswParameters": {
                  "metric": "cosine",
                  "m": 4,
                  "efConstruction": 400,
                  "efSearch": 500
                },
                "exhaustiveKnnParameters": null
              }
            ],
            "compressions": [
                {
                    "name": "myScalarQuantization",
                    "kind": "scalarQuantization",
                    "rescoringOptions": {
                        "enableRescoring": true,
                        "defaultOversampling": 10,
                        "rescoreStorageMethod": "preserveOriginals"
                    },
                    "scalarQuantizationParameters": {
                        "quantizedDataType": "int8"
                    },
                    "truncationDimension": null
                }
            ]
        }
    }