Compartilhar via


Suporte a campos de vários vetores no Azure AI Search

Observação

Esse recurso está atualmente em versão prévia pública. Essa visualização é fornecida sem um contrato de nível de serviço e não é recomendada para utilização em 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 para Versões Prévias do Microsoft Azure.

O recurso de suporte a campos de vários vetores na Pesquisa de IA do Azure permite indexar vários vetores filho em um único campo de documento. Esse recurso é valioso para casos de uso, como dados multimodal ou documentos de forma longa, em que representar o conteúdo com um único vetor levaria à perda de detalhes importantes.

Limitações

  • O classificador semântico não tem suporte para partes aninhadas em um campo complexo. Portanto, o classificador semântico não dá suporte a vetores aninhados em campos de vários vetores.

Entender o suporte a campos de vários vetores

Tradicionalmente, os tipos de vetor, por exemplo Collection(Edm.Single) , só podiam ser usados em campos de nível superior. Com a introdução do suporte a campos de vários vetores, agora você pode usar tipos de vetor em campos aninhados de coleções complexas, permitindo efetivamente que vários vetores sejam associados a um único documento.

Um único documento pode incluir até 100 vetores no total, em todos os campos de coleção complexos. Os campos de vetor só podem ser aninhados em um nível profundo.

Definição de índice com campo de vários vetores

Nenhuma nova propriedade de índice é necessária para esse recurso. Aqui está uma definição de índice de exemplo:

{
  "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 ingestão de exemplo

Aqui está um documento de exemplo que ilustra como você pode usar campos de vários vetores na prática:

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

Neste exemplo, o campo cenas é uma coleção complexa que contém vários vetores (os campos de inserção), juntamente com outros dados associados. Cada vetor representa uma cena do filme e pode ser usado para encontrar cenas semelhantes em outros filmes, entre outros possíveis casos de uso.

Consulta com suporte a campos de vários vetores

O recurso de suporte ao campo de vários vetores apresenta algumas alterações no mecanismo de consulta no Azure AI Search. No entanto, o processo de consulta principal permanece praticamente o mesmo. Anteriormente, vectorQueries só era possível direcionar campos de vetor definidos como campos de índice de nível superior. Com esse recurso, estamos relaxando essa restrição e permitindo que vectorQueries direcionem campos aninhados em uma coleção de tipos complexos (até um nível de profundidade). Além disso, um novo parâmetro de tempo de consulta está disponível: perDocumentVectorLimit.

  • Configurar perDocumentVectorLimit para 1 garante que, no máximo, um vetor por documento seja correspondido, assegurando que os resultados provenham de documentos distintos.
  • A configuração perDocumentVectorLimit como 0 (ilimitada) permite que vários vetores relevantes do mesmo documento sejam correspondidos.
{
  "vectorQueries": [
    {
      "kind": "text",
      "text": "whales swimming",
      "K": 50,
      "fields": "scenes/embedding",
      "perDocumentVectorLimit": 0
    }
  ],
  "select": "title, scenes/timestamp, scenes/framePath"
}

Classificar entre vários vetores em um único campo

Quando vários vetores são associados a um único documento, o Azure AI Search usa a pontuação máxima entre eles para classificação. O sistema usa o vetor mais relevante para pontuar cada documento, o que impede a diluição por menos relevantes.

Recuperar elementos relevantes em uma coleção

Quando uma coleção de tipos complexos é incluída no $select parâmetro, somente os elementos que corresponderam à consulta de vetor são retornados. Isso é útil para recuperar metadados associados, como carimbos de data/hora, descrições de texto ou caminhos de imagem.

Observação

Para reduzir o tamanho da carga, evite incluir os próprios valores de vetor no $select parâmetro. Considere omitir o armazenamento de vetor inteiramente se não for necessário.

Depurar consultas de vários vetores (versão prévia)

Quando um documento inclui vários vetores inseridos, como inserções de texto e imagem em subcampos diferentes, o sistema usa a pontuação de vetor mais alta em todos os elementos para classificar o documento.

Para depurar como cada vetor contribuiu, use o modo de depuração innerHits (disponível na versão prévia mais recente da API REST).

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

Forma de resposta de exemplo

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

Descrições de campo

Campo Descrição
ordinal Índice baseado em zero do elemento dentro da coleção.
vectors Uma entrada por campo de vetor pesquisável contido no elemento.
searchScore Pontuação final para esse campo, depois de uma nova pontuação e intensificadores.
vectorSimilarity Similaridade bruta retornada pela função de distância.

Observação

innerHits atualmente, relata apenas campos de vetor.

Relação com debug=vector

Aqui estão alguns fatos sobre esta propriedade:

  • A alternância existente debug=vector permanece inalterada.

  • Quando usado com campos de vários vetores, @search.documentDebugInfo.vector.subscore mostra a pontuação máxima usada para classificar o documento pai, mas não detalhes por elemento.

  • Use innerHits para obter informações sobre como os elementos individuais contribuíram para a pontuação.