Podpora více vektorových polí v Azure AI Vyhledávač

Poznámka

Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.

Poznámka

Tato funkce je aktuálně ve verzi Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučuje se pro produkční úlohy. Některé funkce nemusí být podporované nebo můžou mít omezené možnosti. Další informace najdete v tématu Supplementální podmínky použití pro Microsoft Azure Verze Preview.

Funkce podpory více vektorových polí v Azure AI Vyhledávač umožňuje indexovat více podřízených vektorů v jednom poli dokumentu. Tato funkce je cenná pro případy použití, jako jsou multimodální data nebo dlouhé dokumenty, kdy reprezentace obsahu s jedním vektorem by vedla ke ztrátě důležitých podrobností.

Omezení

  • Sémantický ranker není podporován pro vnořené bloky dat v rámci komplexního pole. Sémantický ranker proto nepodporuje vnořené vektory v polích s více vektory.

Principy podpory více vektorových polí

Tradičně se typy Collection(Edm.Single) vektorů dají použít jenom v polích nejvyšší úrovně. Díky zavedení podpory více vektorových polí teď můžete použít vektorové typy v vnořených polích složitých kolekcí, což umožňuje efektivně přidružit více vektorů k jednomu dokumentu.

Jeden dokument může obsahovat celkem až 100 vektorů ve všech složitých polích kolekce. Vektorová pole mohou být vnořena pouze do hloubky jedné úrovně.

Definice indexu s více vektorovým polem

Pro tuto funkci nejsou potřeba žádné nové vlastnosti indexu. Tady je ukázková definice indexu:

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

Ukázkový dokument pro import dat

Tady je ukázkový dokument, který ukazuje, jak můžete v praxi používat pole s více vektory:

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

V tomto příkladu je pole scény komplexní kolekcí obsahující více vektorů (pole vkládání) spolu s dalšími přidruženými daty. Každý vektor představuje scénu z filmu a lze ji použít k vyhledání podobných scén v jiných filmech, mimo jiné potenciální případy použití.

Dotaz s podporou více vektorových polí

Funkce podpory více vektorových polí zavádí některé změny mechanismu dotazu v Azure AI Vyhledávač. Hlavní proces dotazování ale zůstává z velké části stejný. vectorQueries Dříve mohla pouze cílit na vektorová pole definovaná jako prvotní indexová pole. Díky této funkci uvolníme toto omezení a povolíme vektorQueries cílit pole, která jsou vnořená do kolekce komplexních typů (až do hloubky jedné úrovně). Kromě toho je k dispozici nový parametr času dotazu: perDocumentVectorLimit.

  • Nastavením perDocumentVectorLimit na 1 se zajišťuje, že se shoduje nejvýše jeden vektor na dokument, což zaručuje, že výsledky pocházejí z různých dokumentů.
  • Nastavení perDocumentVectorLimit na 0 (neomezené) umožňuje spárovat více relevantních vektorů ze stejného dokumentu.
{
  "vectorQueries": [
    {
      "kind": "text",
      "text": "whales swimming",
      "K": 50,
      "fields": "scenes/embedding",
      "perDocumentVectorLimit": 0
    }
  ],
  "select": "title, scenes/timestamp, scenes/framePath"
}

Seřadit napříč více vektory v jednom poli

Pokud je k jednomu dokumentu přidruženo více vektorů, Azure AI Vyhledávač použije k hodnocení maximální skóre. Systém používá k určení skóre každého dokumentu nejrelevantní vektor, který zabraňuje ředění méně relevantními vektory.

Načtení relevantních prvků v kolekci

Pokud je v parametru $select zahrnuta kolekce komplexních typů, vrátí se pouze prvky odpovídající vektorovým dotazům. To je užitečné při načítání přidružených metadat, jako jsou časová razítka, popisy textu nebo cesty k obrázkům.

Poznámka

Pokud chcete zmenšit velikost datové části, vyhněte se zahrnutí hodnot vektoru do parametru $select . Pokud nepotřebujete, zvažte vynechání úložiště vektorů úplně.

Ladění více vektorových dotazů (Preview)

Pokud dokument obsahuje více vložených vektorů, jako je text a vkládání obrázků do různých podfieldů, systém k řazení dokumentu použije nejvyšší skóre vektoru ve všech prvcích.

Pokud chcete ladit způsob, jakým jednotlivé vektory přispěly, použijte innerHits režim ladění (dostupný v nejnovější verzi rozhraní REST API verze Preview).

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

Příklad obrazce odpovědi

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

Popisy polí

Pole Popis
ordinal Index prvku uvnitř kolekce založený na nule.
vectors Jedna položka pro prohledávatelné vektorové pole obsažené v prvku.
searchScore Konečné skóre pro toto pole po bodovém přehodnocení a zvýhodnění.
vectorSimilarity Nezpracovaná podobnost vrácená funkcí vzdálenosti.

Poznámka

innerHits v současné době hlásí pouze vektorová pole.

Vztah s debug=vector

Tady je několik faktů o této vlastnosti:

  • Stávající debug=vector přepínač zůstane beze změny.

  • Při použití s více vektorovými poli @search.documentDebugInfo.vector.subscore zobrazuje maximální skóre použité k řazení nadřazeného dokumentu, ale ne podrobností o jednotlivých elementech.

  • Umožňuje innerHits získat přehled o tom, jak jednotlivé prvky přispěly k skóre.