Partilhar via


Suporte de campo multivetorial na Pesquisa de IA do Azure

Observação

Esta funcionalidade está atualmente em pré-visualização pública. Esta pré-visualização é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.

O recurso de suporte de campo multivetorial 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 multimodais ou documentos de formato longo, em que representar o conteúdo com um único vetor levaria à perda de detalhes importantes.

Limitações

  • O classificador semântico não é suportado para blocos aninhados dentro de um campo complexo. Portanto, o classificador semântico não suporta vetores aninhados em campos multivetoriais.

Compreender o suporte de campo multivetorial

Tradicionalmente, os tipos vetoriais, por exemplo Collection(Edm.Single) , só podiam ser usados em campos de nível superior. Com a introdução do suporte a campos multivetoriais, 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 vetoriais só podem ser aninhados a um nível de profundidade.

Definição de índice com campo multivetorial

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

Amostra de documento de ingestão

Aqui está um documento de exemplo que ilustra como você pode usar campos multivetoriais 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 de cenas é uma coleção complexa que contém vários vetores (os campos de incorporaçã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 casos de uso potenciais.

Consulta com suporte de campo multivetorial

O recurso de suporte de campo multivetorial introduz algumas alterações no mecanismo de consulta no Azure AI Search. No entanto, o processo principal de consulta permanece basicamente o mesmo. Anteriormente, vectorQueries só era possível direcionar campos vetoriais definidos como campos de índice de nível superior. Com esse recurso, estamos relaxando essa restrição e permitindo que vectorQueries direcione 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.

  • Definir perDocumentVectorLimit para 1 garante que um vetor por documento seja no máximo associado, garantindo que os resultados venham 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"
}

Ordenar em vários vetores num único campo

Quando vários vetores são associados a um único documento, a Pesquisa de IA do Azure usa a pontuação máxima entre eles para classificação. O sistema utiliza o vetor mais relevante para pontuar cada documento, o que evita a diluição por outros 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 correspondem à consulta vetorial são retornados. Isso é útil para recuperar metadados associados, como timestamps, descrições de texto ou caminhos de imagem.

Observação

Para reduzir o tamanho da carga útil, evite incluir os próprios valores vetoriais no $select parâmetro. Considere omitir totalmente o armazenamento vetorial, se desnecessário.

Depurar consultas multivetoriais (pré-visualização)

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

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

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

Exemplo de forma de resposta

"@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 dos campos

Campo Descrição
ordinal Índice baseado em zero do elemento dentro da coleção.
vectors Uma entrada por campo vetorial pesquisável contido no elemento .
searchScore Placar final para esse campo, após qualquer remarcação e reforços.
vectorSimilarity Semelhança bruta retornada pela função de distância.

Observação

innerHits atualmente relata apenas campos vetoriais.

Relação com debug=vetor

Aqui estão alguns factos sobre esta propriedade:

  • O interruptor existente debug=vector permanece inalterado.

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

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