Dukungan bidang multi-vektor di Pencarian Azure AI (pratinjau)

Catatan

Pencarian Azure AI tersedia melalui portal Azure, REST API, dan Azure SDK. Ini juga mendukung Foundry IQ, lapisan pengetahuan terkelola yang mengubah konten perusahaan menjadi pangkalan pengetahuan yang dapat digunakan kembali dan sadar izin untuk agen di portal Microsoft Foundry.

Important

Fitur, kemampuan, atau properti yang ditandai (pratinjau) tidak tercakup dalam perjanjian tingkat layanan, tidak disarankan untuk beban kerja produksi, dan mungkin berubah atau dibatasi sebelum tersedia secara umum. Ketentuan pratinjau Pencarian Azure AI berlaku untuk semua fungsionalitas pratinjau, baik itu mandiri atau bagian dari fitur yang tersedia secara umum.

Fitur dukungan bidang multi-vektor (pratinjau) di Pencarian Azure AI memungkinkan Anda mengindeks beberapa vektor anak dalam satu bidang dokumen. Fitur ini berharga untuk kasus penggunaan seperti data multimodal atau dokumen bentuk panjang, di mana mewakili konten dengan satu vektor akan menyebabkan hilangnya detail penting.

Keterbatasan

  • Peringkat semantik tidak didukung untuk gugus berlapis dalam bidang yang kompleks. Oleh karena itu, ranker semantik tidak mendukung vektor berlapis di bidang multi-vektor.

Memahami dukungan bidang multi-vektor

Secara tradisional, jenis vektor, misalnya Collection(Edm.Single) hanya dapat digunakan di bidang tingkat atas. Dengan diperkenalkannya dukungan bidang multi-vektor, Anda sekarang dapat menggunakan jenis vektor di bidang berlapis koleksi kompleks, yang secara efektif memungkinkan beberapa vektor dikaitkan dengan satu dokumen.

Satu dokumen dapat mencakup total hingga 100 vektor, di semua bidang koleksi yang kompleks. Bidang vektor hanya dapat disarangkan satu tingkat kedalaman.

Definisi indeks dengan bidang multi-vektor

Tidak diperlukan properti indeks baru untuk fitur ini. Berikut adalah contoh definisi indeks:

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

Sampel Dokumen Pemasukan

Berikut adalah contoh dokumen yang menggambarkan bagaimana Anda dapat menggunakan bidang multi-vektor dalam praktiknya:

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

Dalam contoh ini, bidang adegan adalah koleksi kompleks yang berisi beberapa vektor (bidang penyematan), bersama dengan data terkait lainnya. Setiap vektor mewakili adegan dari film dan dapat digunakan untuk menemukan adegan serupa di film lain, di antara kasus penggunaan potensial lainnya.

Kueri dengan dukungan bidang multi-vektor

Fitur dukungan bidang multi-vektor memperkenalkan beberapa perubahan pada mekanisme kueri di Pencarian Azure AI. Namun, proses kueri utama sebagian besar tetap sama. Sebelumnya, vectorQueries hanya dapat menargetkan bidang vektor yang didefinisikan sebagai bidang indeks tingkat atas. Dengan fitur ini, kami melonggarkan pembatasan ini dan memungkinkan vektorQueries untuk menargetkan bidang yang disarangkan dalam kumpulan jenis kompleks (hingga satu tingkat dalam). Selain itu, parameter waktu kueri baru tersedia: perDocumentVectorLimit.

  • Pengaturan perDocumentVectorLimit untuk 1 memastikan bahwa paling banyak satu vektor per dokumen cocok, menjamin bahwa hasilnya berasal dari dokumen yang berbeda.
  • Pengaturan perDocumentVectorLimit ke 0 (tidak terbatas) memungkinkan beberapa vektor yang relevan dari dokumen yang sama untuk dicocokkan.
{
  "vectorQueries": [
    {
      "kind": "text",
      "text": "whales swimming",
      "K": 50,
      "fields": "scenes/embedding",
      "perDocumentVectorLimit": 0
    }
  ],
  "select": "title, scenes/timestamp, scenes/framePath"
}

Peringkat berdasarkan berbagai vektor dalam satu bidang

Saat beberapa vektor dikaitkan dengan satu dokumen, Pencarian Azure AI menggunakan skor maksimum di antaranya untuk peringkat. Sistem ini menggunakan vektor yang paling relevan untuk mengevaluasi setiap dokumen, yang mencegah pengaruh dari vektor yang kurang relevan.

Mengambil elemen yang relevan dalam koleksi

Saat kumpulan jenis kompleks disertakan dalam $select parameter, hanya elemen yang cocok dengan kueri vektor yang dikembalikan. Ini berguna untuk mengambil metadata terkait seperti tanda waktu, deskripsi teks, atau jalur gambar.

Catatan

Untuk mengurangi ukuran payload, hindari menyertakan nilai vektor itu sendiri dalam parameter $select. Pertimbangkan untuk menghilangkan penyimpanan vektor sepenuhnya jika tidak perlu.

Debugging kueri multivektor (pratinjau)

Ketika dokumen menyertakan beberapa vektor yang disematkan, seperti penyematan teks dan gambar di subbidang yang berbeda, sistem menggunakan skor vektor tertinggi di semua elemen untuk memberi peringkat dokumen.

Untuk men-debug bagaimana setiap vektor berkontribusi, gunakan innerHits mode debug (tersedia di REST API pratinjau terbaru).

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

Contoh bentuk respons

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

Deskripsi bidang

Bidang Deskripsi
ordinal Indeks berbasis nol dari elemen di dalam koleksi.
vectors Satu entri per bidang vektor yang dapat dicari yang terkandung dalam elemen .
searchScore Skor akhir untuk bidang tersebut, setelah penghitungan ulang dan peningkatan nilai.
vectorSimilarity Kesamaan mentah yang dihasilkan oleh fungsi jarak.

Catatan

innerHits saat ini hanya melaporkan bidang vektor.

Hubungan dengan debug=vektor

Berikut adalah beberapa fakta tentang properti ini:

  • Sakelar debug=vector yang ada tidak mengalami perubahan.

  • Saat digunakan dengan bidang multi-vektor, @search.documentDebugInfo.vector.subscore menunjukkan skor maksimum yang digunakan untuk memberi peringkat dokumen induk, tetapi tidak detail per elemen.

  • Gunakan innerHits untuk mendapatkan wawasan tentang bagaimana masing-masing elemen berkontribusi pada skor.