Устранение необязательных экземпляров векторов из хранилища

Примечание.

Поиск с использованием ИИ Azure доступна через портал Azure, REST API и Azure SDKs. Он также лежит в основе Foundry IQ — управляемого слоя знаний, который преобразует корпоративный контент в многократно используемые базы знаний с учетом разрешений доступа для агентов на портале Microsoft Foundry.

Служба "Поиск ИИ Azure" хранит несколько копий векторных полей, используемых в определенных рабочих нагрузках. Если в сценариях поиска не требуется все эти копии, можно опустить хранилище для этой рабочей нагрузки.

Варианты использования дополнительной копии:

  • Возвращая необработанные векторы в ответе запроса или поддерживая добавочные обновления содержимого вектора.
  • Пересчет сжатых (квантизованных) векторов как метод оптимизации запросов.

Удаление хранилища необратимо и требует переиндексирования, если вы хотите вернуть его.

Предварительные требования

  • Векторные поля в индексе поиска с vectorSearch конфигурацией, указывающей алгоритм иерархических навигационных небольших миров (HNSW) или исчерпывающий алгоритм K-Ближайшего соседа (KNN) и новый профиль вектора.

Как хранятся поля векторов

Экземпляр Использование Требуется для поиска Как удалить
Векторы в графе HNSW для поиска ближайших соседей (граф HNSW) или векторы для исчерпывающего поиска K-ближайших соседей (индекс eKNN) Используется для выполнения запроса. Состоит из векторов полной точности (если сжатие не применяется) или квантизованных векторов. Essential Нет параметров для удаления этого экземпляра.
Исходные векторы, полученные во время индексирования документов (данные JSON) Используется для добавочного обновления данных с действиями merge или mergeOrUpload индексирования. Также используется для возврата векторов, доступных для извлечения, в ответе запроса. нет Установите свойство stored в значение false.
Исходные векторы полной точности (двоичные данные) 1 Для сжатых векторов используется для preserveOriginals пересчёта оценок на переизбыточном наборе кандидатов из поиска ANN. Это относится к полям векторов, которые проходят скалярную или двоичную квантизацию, и применяется к запросам с помощью графа HNSW. Если вы используете eKNN, все векторы затрагиваются запросом, поэтому перепроверка не влияет на итоговые результаты, а значит, не поддерживается. нет Задайте свойство rescoringOptions.rescoreStorageMethod на discardOriginals в vectorSearch.compressions.

1 Эта копия также предназначена для внутренних индексных операций и для исчерпывающего поиска KNN в более старых версиях API, на индексах, созданных с использованием API 2023 года. В более новых индексах поле, настроенное eKNN, состоит из векторов полной точности, поэтому дополнительная копия не требуется.

Удаление исходных векторов (данные JSON)

В определении векторного поля свойством stored является логический параметр, который определяет, выделяется ли хранилище для извлекаемого векторного содержимого, полученного во время индексирования (исходный экземпляр). По умолчанию для stored задано значение true. Если в ответе на запрос не требуется необработанное векторное содержимое, изменив stored на false, можно сократить до 50% хранилища на каждое поле.

Рекомендации по настройке "stored": false:

  • Поскольку векторы не доступны для чтения, их можно исключить из результатов, отправленных в LLMs в сценариях RAG или из результатов, отображаемых на странице поиска. Однако их следует сохранить, если вы используете векторы в нижнем потоке, использующем векторное содержимое.

  • Если в вашей стратегии индексирования используются частичные обновления документов, такие как merge или mergeOrUpload для существующего документа, параметр "stored": false, если он задан, не позволяет Поиск с использованием ИИ Azure сохранять уже существующий вектор, если поле вектора отсутствует в запросе на обновление. Необходимо включить все поля вектора (и невекторные поля, которые вы обновляете) в каждую операцию переиндексирования. В противном случае векторные данные теряются без ошибки или предупреждения. Чтобы полностью избежать этого риска, задайте "stored": true.

Внимание

Установка атрибуции "stored": false необратима. Это свойство можно задать только при создании индекса и разрешено только в полях векторов. Обновление существующего индекса с новыми полями векторов не может задать для этого свойства falseзначение. Если вы хотите получить векторное содержимое позже, необходимо удалить и перестроить индекс или создать и загрузить новое поле с новым атрибутом.

Для новых векторных полей в индексе поиска задайте "stored": false для окончательного удаления извлекаемого хранилища для поля вектора. В следующем примере показано определение поля вектора со свойством stored .

PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2026-04-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, retrievable можно переключать между true и false в любое время без необходимости перестройки индекса. Когда stored это falseтак, retrievable должно быть false и не может быть изменено.

Удаление векторов полной точности

Исходные векторы полной точности используются в операциях переоценки с сжатыми (квантизованными) векторами. Целью перезаписи является устранение потери информации из-за сжатия. Результатом пересчета является получение большего набора документов-кандидатов из сжатого индекса с пересчетом показателей сходства с помощью исходных векторов или скалярного произведения. Чтобы пересчет работал, исходные векторы должны сохраняться на хранении для определенных сценариев. В результате, в то время как квантизация снижает использование памяти (использование векторного индекса), она немного увеличивает требования к хранилищу, так как хранятся как сжатые, так и исходные векторы. Дополнительное хранилище приблизительно равно размеру сжатого индекса.

Пересчет показателей с помощью подхода квантизации:

  • Для перезаписи скалярных квантизованных векторов требуется хранение исходных векторов полной точности.

  • Пересчет квантизованных двоичных векторов может использовать либо исходные векторы полной точности, либо скалярное произведение двоичного встраивания, что обеспечивает высококачественные результаты поиска без обращения к векторам полной точности в индексе.

Рекомендации по пересчету оценок:

  • Для скалярной квантизации сохраните исходные векторы полной точности в индексе, так как они необходимы для rescore.

  • Для двоичной квантизации сохраняйте исходные векторы полной точности для обеспечения высокого качества пересчета или откажитесь от векторов полной точности, если вы хотите пересчитывать на основе скалярного произведения двоичных векторных вложений.

Свойство rescoreStorageMethod определяет, хранятся ли векторы полной точности. В vectorSearch.compressions свойстве rescoreStorageMethod задано preserveOriginals значение по умолчанию, в котором сохраняются векторы полной точности для пересэмплирования и способности пересчета для уменьшения эффекта потерь при сжатии на графе HNSW. Если не нужно пересчитывать оценки или если вы использовали двоичную квантизацию и скалярное произведение для пересчета оценок, можно уменьшить объем хранения векторов, установив rescoreStorageMethod в discardOriginals.

Внимание

Установка свойства rescoreStorageMethod необратима и может отрицательно сказаться на качестве поиска, хотя степень воздействия зависит от метода сжатия и любых применяемых мер.

Чтобы задать это свойство, выполните указанные ниже действия.

  1. Используйте интерфейсы REST API Создать индекс или Создать или обновить индекс, либо пакет SDK Azure.

  2. vectorSearch Добавьте раздел в индекс с профилями, алгоритмами и сжатием.

  3. В разделе vectorSearch.compressions, добавьте rescoringOptions, установив enableRescoring в true, defaultOversampling как положительное целое число, и установите rescoreStorageMethod как discardOriginals для двоичной квантизации и preserveOriginals для скалярной квантизации.

    PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2026-04-01
    
    {
        "name": "demo-index",
        "fields": [. . . ],
        . . .
        "vectorSearch": {
            "profiles": [
                {
                "name": "myVectorProfile-1",
                "algorithm": "myHnsw",
                "compression": "myScalarQuantization"
                },
                {
                "name": "myVectorProfile-2",
                "algorithm": "myHnsw",
                "compression": "myBinaryQuantization"
                }
            ],
            "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
                },
                {
                    "name": "myBinaryQuantization",
                    "kind": "binaryQuantization",
                    "rescoringOptions": {
                        "enableRescoring": true,
                        "defaultOversampling": 10,
                        "rescoreStorageMethod": "discardOriginals"
                    },
                    "truncationDimension": null
                }
            ]
        }
    }
    

Примечание.

Стратегии хранения векторов развивались в течение последних нескольких выпусков. Дата создания индекса и версия API определяют параметры хранения. Например, в предварительной версии 2024-11-01-preview, если задано discardOriginals полное удаление векторов высокой точности, не было пересчета для двоичной квантизации, так как метод скалярного произведения был недоступен. Мы рекомендуем использовать последние API для лучших вариантов устранения рисков.