Ondersteuning voor multivectorvelden in Azure AI Zoeken (preview)

Opmerking

Azure AI Zoeken is beschikbaar via de Azure-portal, REST API's en Azure-SDK's. Het vormt ook een basis voor Foundry IQ, de beheerde kennislaag die bedrijfsinhoud transformeert in herbruikbare, machtigingsbewuste knowledge bases voor agents in de Microsoft Foundry-portal.

Important

Functies, mogelijkheden of eigenschappen die zijn gemarkeerd (preview) vallen niet onder een service level agreement, worden niet aanbevolen voor productieworkloads en kunnen worden gewijzigd of beperkt voordat ze algemeen beschikbaar worden. De Azure AI Zoeken preview-voorwaarden zijn van toepassing op alle preview-functionaliteit, ongeacht of deze zelfstandig is of deel uitmaakt van een algemeen beschikbare functie.

Met de functie voor ondersteuning voor meerdere vectorvelden (preview) in Azure AI Zoeken kunt u meerdere onderliggende vectoren in één documentveld indexeren. Deze functie is waardevol voor gebruiksvoorbeelden zoals multimodale gegevens of lange documenten, waarbij het vertegenwoordigen van de inhoud met één vector tot verlies van belangrijke details zou leiden.

Beperkingen

  • Semantische rangschikking wordt niet ondersteund voor geneste brokken binnen een complex veld. Daarom biedt de semantische ranker geen ondersteuning voor geneste vectoren in velden met meerdere vectoren.

Meer informatie over ondersteuning voor multivectorvelden

Traditioneel konden vectortypen bijvoorbeeld Collection(Edm.Single) alleen worden gebruikt in velden op het hoogste niveau. Met de introductie van multivectorveldondersteuning kunt u nu vectortypen gebruiken in geneste velden van complexe verzamelingen, zodat meerdere vectoren aan één document kunnen worden gekoppeld.

Eén document kan in totaal maximaal 100 vectoren bevatten voor alle complexe verzamelingsvelden. Vectorvelden kunnen slechts één niveau diep worden genest.

Indexdefinitie met multivectorveld

Er zijn geen nieuwe indexeigenschappen nodig voor deze functie. Hier volgt een voorbeeld van een indexdefinitie:

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

Voorbeeld van opnamedocument

Hier volgt een voorbeelddocument waarin wordt geïllustreerd hoe u velden met meerdere vectoren in de praktijk kunt gebruiken:

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

In dit voorbeeld is het veld Scènes een complexe verzameling met meerdere vectoren (de ingesloten velden), samen met andere gekoppelde gegevens. Elke vector vertegenwoordigt een scène uit de film en kan worden gebruikt om vergelijkbare scènes in andere films te vinden, onder andere mogelijke gebruiksvoorbeelden.

Query's uitvoeren met ondersteuning voor meerdere vectorvelden

De ondersteuningsfunctie voor meerdere vectorvelden introduceert enkele wijzigingen in het querymechanisme in Azure AI Zoeken. Het hoofdqueryproces blijft echter grotendeels hetzelfde. vectorQueries Voorheen konden alleen doelvectorvelden worden gedefinieerd als indexvelden op het hoogste niveau. Met deze functie versoepelen we deze beperking en stellen we vectorQueries in staat om velden te richten die geneste zijn binnen een verzameling van complexe typen (tot één niveau diep). Daarnaast is er een nieuwe querytijdparameter beschikbaar: perDocumentVectorLimit.

  • Door perDocumentVectorLimit in te stellen op 1 wordt ervoor gezorgd dat maximaal één vector per document overeenkomt, waarmee gegarandeerd is dat de resultaten uit verschillende documenten komen.
  • Als u perDocumentVectorLimit instelt op 0 (onbeperkt), kunnen meerdere relevante vectoren uit hetzelfde document worden vergeleken.
{
  "vectorQueries": [
    {
      "kind": "text",
      "text": "whales swimming",
      "K": 50,
      "fields": "scenes/embedding",
      "perDocumentVectorLimit": 0
    }
  ],
  "select": "title, scenes/timestamp, scenes/framePath"
}

Rangschikken over meerdere vectoren in één veld

Wanneer meerdere vectoren aan één document zijn gekoppeld, Azure AI Zoeken de maximumscore ervan gebruikt voor rangschikking. Het systeem gebruikt de meest relevante vector om elk document te scoren, waardoor verdunning door minder relevante documenten wordt voorkomen.

Relevante elementen in een verzameling ophalen

Wanneer een verzameling complexe typen wordt opgenomen in de $select parameter, worden alleen de elementen geretourneerd die overeenkomen met de vectorquery. Dit is handig voor het ophalen van gekoppelde metagegevens, zoals tijdstempels, tekstbeschrijvingen of afbeeldingspaden.

Opmerking

Als u de nettolading wilt verkleinen, moet u voorkomen dat u de vectorwaarden zelf in de $select parameter opneemt. Overweeg om vectoropslag volledig weg te laten als dit niet nodig is.

Fouten opsporen in query's met meerdere vectoren (preview)

Wanneer een document meerdere ingesloten vectoren bevat, zoals tekst- en afbeeldingsbesluitingen in verschillende subvelden, gebruikt het systeem de hoogste vectorscore voor alle elementen om het document te rangschikken.

Als u fouten wilt opsporen in de manier waarop elke vector heeft bijgedragen, gebruikt u de innerHits foutopsporingsmodus (beschikbaar in de nieuwste preview-REST API).

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

Voorbeeld van antwoordpatroon

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

Veldbeschrijvingen

Veld Beschrijving
ordinal Op nul gebaseerde index van het element in de verzameling.
vectors Eén vermelding per doorzoekbaar vectorveld in het element.
searchScore Eindscore voor dat veld, na eventuele herberekeningen en verhogingen.
vectorSimilarity Onbewerkte gelijkenis die wordt geretourneerd door de afstandsfunctie.

Opmerking

innerHits rapporteert momenteel alleen vectorvelden.

Relatie met foutopsporing=vector

Hier volgen enkele feiten over deze eigenschap:

  • De bestaande debug=vector switch blijft ongewijzigd.

  • Bij gebruik met velden met meerdere vectoren geeft @search.documentDebugInfo.vector.subscore u de maximumscore weer die wordt gebruikt om het bovenliggende document te rangschikken, maar niet per element.

  • Gebruik innerHits deze functie om inzicht te krijgen in de manier waarop afzonderlijke elementen hebben bijgedragen aan de score.