Compatibilidad con campos multi vector en Búsqueda de Azure AI (versión preliminar)

Nota

Búsqueda de Azure AI está disponible a través del portal de Azure, las API REST y los SDK de Azure. También respalda Foundry IQ, la capa de conocimiento administrada que transforma el contenido empresarial en bases de conocimiento reutilizables y compatibles con permisos para agentes en el portal de Microsoft Foundry.

Importante

Las características, funcionalidades o propiedades marcadas (versión preliminar) no están cubiertas por un contrato de nivel de servicio, no se recomiendan para cargas de trabajo de producción y pueden cambiar o restringirse antes de que estén disponibles con carácter general. Los términos de la versión preliminar Búsqueda de Azure AI se aplican a todas las funciones de vista previa, ya sea independiente o parte de una característica disponible con carácter general.

La característica de compatibilidad con campos multi vector (versión preliminar) en Búsqueda de Azure AI permite indexar varios vectores secundarios dentro de un único campo de documento. Esta característica es valiosa para casos de uso como datos bidireccionales o documentos de formato largo, donde representar el contenido con un único vector provocaría la pérdida de detalles importantes.

Limitaciones

  • No se admite el clasificador semántico para fragmentos anidados dentro de un campo complejo. Por lo tanto, el clasificador semántico no admite vectores anidados en campos multi vector.

Entender la compatibilidad con campos multivectoriales

Tradicionalmente, los tipos de vector, por ejemplo Collection(Edm.Single) , solo se podían usar en campos de nivel superior. Con la introducción de la compatibilidad con campos multivector, ahora puede usar tipos de vector en campos anidados de colecciones complejas, permitiendo efectivamente asociar varios vectores a un único documento.

Un único documento puede incluir hasta 100 vectores en total, en todos los campos de colección complejos. Los campos vectoriales solo se pueden anidar en un nivel profundo.

Definición de índice con campo multi vector

No se necesitan nuevas propiedades de índice para esta característica. Esta es una definición de índice de ejemplo:

{
  "name": "multivector-index",
  "fields": [
    {
      "name": "id",
      "type": "Edm.String",
      "key": true,
      "searchable": true
    },
    {
      "name": "title",
      "type": "Edm.String",
      "searchable": true
    },
    {
      "name": "description",
      "type": "Edm.String",
      "searchable": true
    },
    {
      "name": "descriptionEmbedding",
      "type": "Collection(Edm.Single)",
      "dimensions": 3,
      "searchable": true,
      "retrievable": true,
      "vectorSearchProfile": "hnsw"
    },
    {
      "name": "scenes",
      "type": "Collection(Edm.ComplexType)",
      "fields": [
        {
          "name": "embedding",
          "type": "Collection(Edm.Single)",
          "dimensions": 3,
          "searchable": true,
          "retrievable": true,
          "vectorSearchProfile": "hnsw"
        },
        {
          "name": "timestamp",
          "type": "Edm.Int32",
          "retrievable": true
        },
        {
          "name": "description",
          "type": "Edm.String",
          "searchable": true,
          "retrievable": true
        },
        {
          "name": "framePath",
          "type": "Edm.String",
          "retrievable": true
        }
      ]
    }
  ]
}

Documento de ingesta de ejemplo

Este es un documento de ejemplo que muestra cómo puede usar campos multi vector en la práctica:

{
  "id": "123",
  "title": "Non-Existent Movie",
  "description": "A fictional movie for demonstration purposes.",
  "descriptionEmbedding": [1, 2, 3],
  "releaseDate": "2025-08-01",
  "scenes": [
    {
      "embedding": [4, 5, 6],
      "timestamp": 120,
      "description": "A character is introduced.",
      "framePath": "nonexistentmovie\\scenes\\scene120.png"
    },
    {
      "embedding": [7, 8, 9],
      "timestamp": 2400,
      "description": "The climax of the movie.",
      "framePath": "nonexistentmovie\\scenes\\scene2400.png"
    }
  ]
}

En este ejemplo, el campo de escenas es una colección compleja que contiene varios vectores (los campos de inserción), junto con otros datos asociados. Cada vector representa una escena de la película y podría usarse para buscar escenas similares en otras películas, entre otros casos de uso potenciales.

Consulta con soporte para campos de múltiples vectores

La característica de compatibilidad con campos multi vector introduce algunos cambios en el mecanismo de consulta en Búsqueda de Azure AI. Sin embargo, el proceso de consulta principal sigue siendo en gran medida el mismo. Anteriormente, vectorQueries solo podía establecer como destino los campos vectoriales definidos como campos de índice de nivel superior. Con esta característica, se relaja esta restricción y se permite que vectorQueries tenga como destino campos anidados dentro de una colección de tipos complejos (hasta un nivel profundo). Además, hay disponible un nuevo parámetro de hora de consulta: perDocumentVectorLimit.

  • Establecer perDocumentVectorLimit en 1 garantiza que, como máximo, se coincide con un vector por documento, lo que garantiza que los resultados proceden de documentos distintos.
  • Establecer perDocumentVectorLimit en 0 (ilimitado) permite que se coincidan varios vectores pertinentes del mismo documento.
{
  "vectorQueries": [
    {
      "kind": "text",
      "text": "whales swimming",
      "K": 50,
      "fields": "scenes/embedding",
      "perDocumentVectorLimit": 0
    }
  ],
  "select": "title, scenes/timestamp, scenes/framePath"
}

Clasificación entre varios vectores en un solo campo

Cuando se asocian varios vectores a un único documento, Búsqueda de Azure AI usa la puntuación máxima entre ellos para la clasificación. El sistema utiliza el vector más relevante para puntuar cada documento, lo que evita la dilución por las menos relevantes.

Recuperación de elementos relevantes en una colección

Cuando se incluye una colección de tipos complejos en el $select parámetro , solo se devuelven los elementos que coinciden con la consulta vectorial. Esto resulta útil para recuperar metadatos asociados, como marcas de tiempo, descripciones de texto o rutas de acceso de imagen.

Nota

Para reducir el tamaño de la carga, evite incluir los propios valores vectoriales en el $select parámetro . Considere la posibilidad de omitir el almacenamiento de vectores por completo si no es necesario.

Depuración de consultas multi-vector (versión preliminar)

Cuando un documento incluye varios vectores incrustados, como incrustaciones de texto e imágenes en diferentes subcampos, el sistema usa la puntuación de vector más alta en todos los elementos para clasificar el documento.

Para depurar cómo ha contribuido cada vector, use el innerHits modo de depuración (disponible en la API REST de versión preliminar más reciente).

POST /indexes/my-index/docs/search?api-version=2026-08-01-preview
{
  "vectorQueries": [
    {
      "kind": "vector",
      "field": "keyframes.imageEmbedding",
      "kNearestNeighborsCount": 5,
      "vector": [ /* query vector */ ]
    }
  ],
  "debug": "innerHits"
}

Forma de respuesta de ejemplo

"@search.documentDebugInfo": {
  "innerHits": {
    "keyframes": [
      {
        "ordinal": 0,
        "vectors": [
          {
            "imageEmbedding": {
              "searchScore": 0.958,
              "vectorSimilarity": 0.956
            },
            "textEmbedding": {
              "searchScore": 0.958,
              "vectorSimilarity": 0.956
            }
          }
        ]
      },
      {
        "ordinal": 1,
        "vectors": [
          {
            "imageEmbedding": null,
            "textEmbedding": {
              "searchScore": 0.872,
              "vectorSimilarity": 0.869
            }
          }
        ]
      }
    ]
  }
}

Descripciones de campos

Campo Descripción
ordinal Índice de base cero del elemento dentro de la colección.
vectors Una entrada por campo vectorial que se puede buscar incluido en el elemento .
searchScore Puntuación final para ese campo, después de cualquier nueva calificación y aumento.
vectorSimilarity Similitud bruta generada por la función de distancia.

Nota

innerHits actualmente solo notifica campos vectoriales.

Relación con debug=vector

Estos son algunos hechos sobre esta propiedad:

  • El interruptor existente debug=vector permanece sin cambios.

  • Cuando se usa con campos de varios vectores, @search.documentDebugInfo.vector.subscore muestra la puntuación máxima utilizada para clasificar el documento primario, pero no por detalle de elemento.

  • Use innerHits para obtener información sobre cómo han contribuido los elementos individuales a la puntuación.