共用方式為


從記憶體排除選擇性向量實例

Azure AI 搜尋會儲存用於特定工作負載的多個向量字段複本。 如果您不需要支援特定行為,例如在查詢回應中傳回原始向量,您可以在省略該工作負載記憶體的索引中設定屬性。

必要條件

  • 搜尋索引 中的向量字段具有組 vectorSearch 態,使用階層式導覽小型世界 (HNSW) 或詳盡的 K 近鄰 (KNN) 演算法和新的向量配置檔。

向量欄位的儲存方式

針對每個向量欄位,可能會有三個向量複本,每個復本各有不同的用途:

執行個體 使用方式 使用控制
儲存文件編製索引期間所接收 JSON 的來源向量 用於在文件編製索引期間使用 mergemergeOrUpload 的累加式數據重新整理。 如果您要在查詢回應中傳回「可擷取」向量,也會使用 。 stored 向量欄位上的屬性
原始全精確度向量 在現有的索引中,這些用於內部索引作業和詳盡的 KNN 搜尋。 對於使用壓縮的向量,它也會用於使用純量或二元量化壓縮,在過度取樣的候選專案集上,使用 純量或二元量化 壓縮,在向量字段上進行 ANN 搜尋的結果。 rescoringOptions.rescoreStorageMethod 中的 vectorSearch.compressions屬性。 針對使用 2024-11-01-Preview API 版本和更新版本所建立之索引上的未壓縮向量欄位,預設會省略此欄位,而不會影響搜尋活動或品質。
HNSW 圖表中的 向量,用於近似近鄰 (ANN) 搜尋 用於 ANN 查詢執行。 包含全精確度向量(未套用壓縮時)或量化向量(套用壓縮時) 僅適用於 HNSW。 需要這些數據結構,才能有效率的 ANN 搜尋。

您可以設定從向量儲存永久捨棄前兩個實例的屬性。

ANN 向量查詢執行需要最後一個實例(向量和圖表)。 如果使用純量或二進位量化任何壓縮技術,則會套用至這組數據。 如果您想要位移遺失壓縮,您應該保留第二個實例以供重新記錄,以改善 ANN 搜尋品質。

stored設定屬性

屬性 stored 是向量欄位定義的布林值屬性,可決定是否為可擷取的向量字段內容配置記憶體(來源實例)。 stored 屬性依預設為 true。 如果您在查詢回應中不需要原始向量內容,您可以藉由變更 stored 為 false,為每個欄位儲存最多 50% 的記憶體。

stored 設定為 false 的考量:

  • 由於人類無法讀取向量,因此您可以從 RAG 案例中傳送至 LLM 的結果,以及從搜尋頁面上轉譯的結果中省略它們。 不過,如果您要在取用向量內容的下游流程中使用向量,請保留它們。

  • 不過,如果您的索引編製策略包含 部分檔更新,例如現有檔的 「merge」 或 「mergeOrUpload」,設定 stored=false 會防止合併期間對這些字段的內容更新。 在每個搜尋檔的「合併」或「mergeOrUpload」作業上,您必須完整地提供向量字段,以及您要更新的非向量字段,或卸除向量。

重要

stored=false設定屬性是無法復原的。 只有在您建立索引且只允許向量欄位時,才能設定這個屬性。 使用新的向量欄位更新現有的索引,無法將這個屬性設定為 false。 如果您想要稍後可擷取的向量內容,您必須卸除並重建索引,或建立並載入具有新屬性的新欄位。

針對搜尋索引中的新向量字段,設定 stored 為 false 以永久移除向量欄位的可擷取記憶體。 下列範例顯示具有 屬性的 stored 向量欄位定義。

PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2024-07-01 
  Content-Type: application/json  
  api-key: [admin key]  

    { 
      "name": "demo-index", 
      "fields": [ 
        { 
          "name": "vectorContent", 
          "type": "Collection(Edm.Single)", 
          "retrievable": false, 
          "stored": false, 
          "dimensions": 1536, 
          "vectorSearchProfile": "vectorProfile" 
        } 
      ] 
    } 

要點摘要

  • 適用於具有向量數據類型欄位。

  • 影響磁碟上的儲存空間,而非記憶體,且不會影響查詢。 查詢執行會使用不受 屬性影響 stored 的不同向量索引,因為該向量複本一律會儲存。

  • 在向量欄位的索引建立期間,會設定 stored 屬性,而且無法復原。 如果您想要稍後擷取內容,您必須卸除並重建索引,或建立並載入具有新屬性的新欄位。

  • 預設值為 stored 設為 true,retrievable 設為 false。 在預設設定中,會儲存可擷取的副本,但不會在結果中自動傳回。 當 stored 為 true 時,您可以隨時在 true 和 false 之間切換 retrievable,而不需要重建索引。 當 stored 為 false 時,retrievable 必須是 false 且無法變更。

rescoreStorageMethod設定屬性

注意

此功能目前處於公開預覽。 此預覽版是在沒有服務等級協定的情況下提供,不建議用於生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

屬性 rescoreStorageMethod 會控制使用壓縮時的完整有效位數向量儲存。

針對使用 2024-11-01-Preview API 版本和更新版本所建立之索引上的未壓縮向量欄位,預設會省略此欄位,而不會影響搜尋活動或品質。 對於在此 API 版本之前建立的現有向量欄位,無法就地移除此資料複本。

在向量壓縮上rescoreStorageMethod,屬性預設會設定為 preserveOriginals ,它會保留用於過度取樣和重新取樣功能的完整有效位數向量,以減少 HNSW 圖形上遺失壓縮的影響。 如果您未使用這些功能,您可以將 設定 rescoreStorageMethoddiscardOriginals來減少向量儲存。

重要

rescoreStorageMethod設定 屬性是無法復原的,而且會根據壓縮方法而有不同的搜尋品質遺失層級。 您可以在索引建立期間或新增向量字段期間,於使用 2024-11-01-Preview 或更新版本建立的索引上設定。

如果您想要使用純量或二進位量化,建議您保留 rescoreStorageMethod 設定為 preserveOriginals 以將搜尋品質最大化。

若要設定此屬性:

  1. 使用建立索引或建立或更新索引 2024-11-01-preview REST API,或提供此功能的 Azure SDK Beta 套件。

  2. vectorSearch使用設定檔、演算法和壓縮,將區段新增至您的索引。

  3. 在壓縮下,將和 rescoringOptions enableRescoring 設為 true、 defaultOversampling 設定為正整數,並將 rescoreStorageMethod 設定為 preserveOriginals

    PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2024-11-01-preview
    
    {
        "name": "demo-index",
        "fields": [. . . ],
        . . .
        "vectorSearch": {
            "profiles": [
                {
                "name": "myVectorProfile",
                "algorithm": "myHnsw",
                "compression": "myScalarQuantization"
                }
            ],
            "algorithms": [
              {
                "name": "myHnsw",
                "kind": "hnsw",
                "hnswParameters": {
                  "metric": "cosine",
                  "m": 4,
                  "efConstruction": 400,
                  "efSearch": 500
                },
                "exhaustiveKnnParameters": null
              }
            ],
            "compressions": [
                {
                    "name": "myScalarQuantization",
                    "kind": "scalarQuantization",
                    "rescoringOptions": {
                        "enableRescoring": true,
                        "defaultOversampling": 10,
                        "rescoreStorageMethod": "preserveOriginals"
                    },
                    "scalarQuantizationParameters": {
                        "quantizedDataType": "int8"
                    },
                    "truncationDimension": null
                }
            ]
        }
    }