Compartir a través de


Eliminación de instancias de vector opcionales del almacenamiento

Búsqueda de Azure AI almacena varias copias de campos vectoriales que se usan en cargas de trabajo específicas. Si no necesita admitir un comportamiento específico, como devolver vectores sin procesar en una respuesta de consulta, puede establecer propiedades en el índice que omiten el almacenamiento de esa carga de trabajo.

La eliminación del almacenamiento es irreversible y, si lo desea recuperar, requiere volver a indexar.

Requisitos previos

  • Campos vectoriales de un índice de búsqueda, con una configuración vectorSearch que especifica el algoritmo Jerárquico de mundos pequeños navegables (HNSW) o el algoritmo K-vecino más cercano (KNN) y un nuevo perfil de vector.

Cómo se almacenan los campos vectoriales

Para cada campo vectorial, hay hasta tres copias de los vectores, cada uno de los cuales sirve para un propósito diferente:

Instancia Uso Controlado mediante
Vectores de origen recibidos durante la indexación de documentos (datos JSON) Se utiliza para la actualización incremental de datos mediante la acción de indexación de merge o mergeOrUpload. También se usa para devolver vectores "recuperables" en la respuesta de consulta. stored propiedad en campos vectoriales
Vectores de precisión completa originales (datos binarios) Se usa para las operaciones de índice internas y para la búsqueda exhaustiva de KNN en versiones anteriores de la API. En el caso de los vectores comprimidos, también se usa para preserveOriginals recalificar en un conjunto de resultados candidatos sobremuestreados de la búsqueda de ANN. Esto se aplica a los campos vectoriales que se someten a la cuantificación escalar o binaria. Propiedad rescoringOptions.rescoreStorageMethod en vectorSearch.compressions.
Vectores del Gráfico HNSW para la búsqueda aproximada de vecinos más próximos (ANN) (gráfico HNSW) o vectores para k vecinos más cercanos exhaustivos (índice eKNN) Se usa para la ejecución de consultas. Consta de vectores de precisión completa (cuando no se aplica ninguna compresión) o vectores cuantificados. Esencial. No hay parámetros para quitar esta instancia.

Puede establecer propiedades que descarten permanentemente las dos primeras instancias (datos JSON y datos binarios) del almacenamiento de vectores, pero no de la última instancia.

Para desplazar la compresión de pérdida para HNSW, puede mantener la segunda instancia (datos binarios) con fines de corrección para mejorar la calidad de la búsqueda ANN. En el caso de eKNN, solo es compatible la cuantificación escalar y la recalificación no es una opción. En versiones más recientes de API como la versión preliminar más reciente, la segunda instancia no se mantiene para eKNN porque la tercera instancia proporciona vectores de precisión completa en un índice eKNN.

Índices creados con versiones de API 2024-11-01-preview o posteriores

En el caso de los índices creados con la versión preliminar 2024-11-01 o una API posterior con campos vectoriales sin comprimir, las instancias segunda y tercera (gráfico binario y HNSW) se combinan como parte de nuestras inversiones en reducción de costos, lo que reduce el almacenamiento general. Un índice de generación más reciente con vectores consolidados es funcionalmente equivalente a índices más antiguos, pero usa menos almacenamiento. Las estructuras de datos físicas se establecen en una solicitud Crear índice, por lo que debe eliminar y volver a crear el índice para realizar las reducciones de almacenamiento.

Si elige la compresión de vectores, AI Search comprime (cuantifica) la parte en memoria del índice vectorial. Dado que la memoria suele ser una restricción principal para los índices vectoriales, esta práctica permite almacenar más vectores en el mismo servicio de búsqueda. Sin embargo, la compresión con pérdida equivale a menos información en el índice, lo que puede afectar la calidad de búsqueda.

Para mitigar la pérdida de información, puede habilitar las opciones de "revaluación" y "remuestreo" para ayudar a mantener la calidad. El efecto es la recuperación de un conjunto mayor de documentos candidatos del índice comprimido, con la recomputación de puntuaciones de similitud mediante los vectores originales o el producto de puntos. Para que funcione la corrección, los vectores originales deben conservarse en el almacenamiento para determinados escenarios. Como resultado, mientras que la cuantificación reduce el uso de memoria (uso del tamaño del índice de vectores), aumenta ligeramente los requisitos de almacenamiento, ya que se almacenan los vectores comprimidos y originales. El almacenamiento adicional es aproximadamente igual al tamaño del índice comprimido.

Eliminación de vectores de origen (datos JSON)

La stored propiedad es una propiedad booleana en una definición de campo vectorial que determina si se asigna almacenamiento para el contenido del campo vectorial recuperable obtenido durante la indexación (la instancia de origen). La propiedad stored es verdadera de forma predeterminada. Si no necesita contenido vectorial sin procesar en una respuesta de consulta, puede ahorrar hasta un 50 % de almacenamiento por campo cambiando stored a false.

Consideraciones para establecer stored en false:

  • Dado que los vectores no son legibles para las personas, puede omitirlos de los resultados enviados a los LLM en los escenarios RAG y de los resultados que se muestran en una página de búsqueda. No obstante, manténgalos si está utilizando vectores en un proceso posterior que consume contenido vectorial.

  • Sin embargo, si la estrategia de indexación incluye actualizaciones parciales de documentos, como "merge" o "mergeOrUpload" en un documento existente, la configuración stored=false impide las actualizaciones de contenido en esos campos durante la combinación. En cada operación "merge" o "mergeOrUpload" en un documento de búsqueda, debe proporcionar los campos vectoriales en su totalidad, junto con los campos novector que está actualizando, o se quitará el vector.

Importante

Establecer la atribución stored=false es irreversible. Esta propiedad solo se puede establecer cuando se crea el índice y solo se permite en campos vectoriales. La actualización de un índice existente con nuevos campos vectoriales no puede establecer esta propiedad en false. Si más adelante quiere recuperar contenido vectorial, deberá quitar y recompilar el índice, o bien crear y cargar un nuevo campo que tenga el nuevo atributo.

Para los nuevos campos vectoriales de un índice de búsqueda, establezca stored en falso para quitar permanentemente el almacenamiento recuperable para el campo vectorial. En el ejemplo siguiente se muestra una definición de campo vectorial con la propiedad stored.

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" 
        } 
      ] 
    } 

Resumen de puntos clave

  • Se aplica a los campos que tienen un tipo de datos vectorial.

  • Afecta al almacenamiento en disco, no a la memoria y no tiene ningún efecto en las consultas. La ejecución de consultas usa un índice vectorial independiente que no se ve afectado por la propiedad stored porque esa copia del vector siempre se almacena.

  • La propiedad stored se establece durante la creación del índice en los campos vectoriales y es irreversible. Si más adelante quiere recuperar contenido, deberá quitar y recompilar el índice, o bien crear y cargar un nuevo campo que tenga la nueva atribución.

  • Los valores predeterminados son stored establecidos en true y retrievable establecidos en false. En una configuración predeterminada, se almacena una copia recuperable, pero no se devuelve automáticamente en los resultados. Cuando stored es true, puede alternar retrievable entre true y false en cualquier momento sin tener que volver a generar un índice. Cuando stored es false, retrievable debe ser false y no se puede cambiar.

Quitar vectores de precisión completa (datos binarios)

Nota:

Esta característica actualmente está en su versión preliminar pública. Esta versión preliminar se ofrece sin contrato de nivel de servicio y no es aconsejable usarla en las cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

Al comprimir vectores mediante cuantización escalar o binaria, la ejecución de la consulta se realiza sobre los vectores cuantificados. En este caso, solo necesita los vectores de precisión completa originales (datos binarios) si desea volver a puntuar.

Si usa las API de versión preliminar más recientes y la cuantificación binaria, puede descartar de forma segura vectores de precisión completa porque las estrategias de corrección usan ahora el producto de punto de una inserción binaria, que genera resultados de búsqueda de alta calidad, sin tener que hacer referencia a vectores de precisión completa en el índice.

La rescoreStorageMethod propiedad controla si se almacenan vectores de precisión completa. Las instrucciones para conservar vectores de precisión completa son las siguientes:

  • Para la cuantificación escalar, conserve los vectores de precisión completa originales en el índice, ya que son necesarios para volver a puntuar.
  • Para la cuantificación binaria, conserve los vectores de precisión completa originales para obtener la mayor calidad de recorción o descarte los vectores de precisión completa (requiere 2025-03-01-preview) si desea volver a puntuar en función del producto de puntos de las incrustaciones binarias.

Las estrategias de almacenamiento de vectores han evolucionado en las últimas versiones. La fecha de creación del índice y la versión de api determinan las opciones de almacenamiento.

Versión de API Se aplica a Eliminación de vectores de precisión completa
2024-07-01 y versiones anteriores No aplicable. No hay ningún mecanismo para quitar vectores de precisión completa.
2024-11-01-versión preliminar Incrustaciones binarias Use rescoreStorageMethod.discardOriginals para quitar vectores de precisión completa, pero al hacerlo se evita la corrección. enableRescoring debe ser falso si los originales han desaparecido.
2025-03-01-versión preliminar Incrustaciones binarias Use rescoreStorageMethod.discardOriginals para quitar vectores de precisión completa en el índice mientras se conservan las opciones de rescore. En esta versión preliminar, es posible volver a escribir porque la técnica ha cambiado. El producto de puntos de las incrustaciones binarias se usa en la rescore, generando resultados de búsqueda de alta calidad equivalentes o mejores que las técnicas anteriores basadas en vectores de precisión completa.

Observe que el escalar no aparece en la tabla. Si usa la cuantificación escalar, debe conservar los vectores de precisión completa originales si desea volver a puntuar.

En vectorSearch.compressions, la propiedad rescoreStorageMethod se establece en preserveOriginals de forma predeterminada, lo que conserva vectores de precisión completa para las funcionalidades de sobremuestreo y recalificación, reduciendo el efecto de la compresión con pérdida en el gráfico HNSW. Si no necesita vectores de precisión completa, puede reducir el almacenamiento de vectores estableciendo rescoreStorageMethod a discardOriginals.

Importante

Establecer la rescoreStorageMethod propiedad es irreversible y puede afectar negativamente a la calidad de la búsqueda, aunque el grado depende del método de compresión y de las mitigaciones que aplique.

Para establecer esta propiedad:

  1. Usar Crear índice (versión preliminar) o Crear o actualizar índice (versión preliminar) API REST, o un paquete beta del SDK de Azure que proporcione la característica.

  2. Agregue una sección vectorSearch al índice con perfiles, algoritmos y compresión.

  3. En vectorSearch.compressions, agregue rescoringOptions con enableRescoring establecido en true, con defaultOversampling establecido en un entero positivo, y con rescoreStorageMethod establecido en discardOriginals para la cuantificación binaria y en preserveOriginals para la cuantificación escalar.

    PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2025-03-01-preview
    
    {
        "name": "demo-index",
        "fields": [. . . ],
        . . .
        "vectorSearch": {
            "profiles": [
                {
                "name": "myVectorProfile-1",
                "algorithm": "myHnsw",
                "compression": "myScalarQuantization"
                },
                {
                "name": "myVectorProfile-2",
                "algorithm": "myHnsw",
                "compression": "myBinaryQuantization"
                }
            ],
            "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
                },
                {
                    "name": "myBinaryQuantization",
                    "kind": "binaryQuantization",
                    "rescoringOptions": {
                        "enableRescoring": true,
                        "defaultOversampling": 10,
                        "rescoreStorageMethod": "discardOriginals"
                    },
                    "truncationDimension": null
                }
            ]
        }
    }