Поделиться через


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

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

Необходимые компоненты

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

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

Для каждого поля вектора может быть три копии векторов, каждая из которых обслуживает другую цель:

Экземпляр Использование Управляемое использование
Исходные векторы, которые хранят json, полученные во время индексирования документов Используется для добавочного обновления данных с merge mergeOrUpload индексированием или во время индексирования документов. Также используется, если вы хотите, чтобы в ответе запроса возвращались векторы с возможностью извлечения. stored свойство в векторных полей
Исходные векторы полной точности В существующих индексах они используются для внутренних операций индексов и для исчерпывающего поиска KNN. Для векторов, использующих сжатие, он также используется для повторного оформления (если включен) для чрезмерного набора результатов поиска ANN в полях векторов с помощью скалярного или двоичного сжатия квантизации . rescoringOptions.rescoreStorageMethod свойство в vectorSearch.compressions. Для несжатых полей векторов в индексах, созданных с 2024-11-01-Preview помощью версий API и более поздних версий, это будет пропущено по умолчанию без влияния на действия поиска или качество.
Векторы в графе HNSW для поиска приблизительных ближайших соседей (ANN) Используется для выполнения запроса ANN. Состоит из векторов полной точности (если сжатие не применяется) или квантизованных векторов (при применении сжатия). Применяется только к HNSW. Эти структуры данных необходимы для эффективного поиска ANN.

Можно задать свойства, которые окончательно отменяют первые два экземпляра из векторного хранилища.

Для выполнения векторного запроса ANN требуется последний экземпляр (векторы и граф). Если используются какие-либо методы сжатия, такие как скалярная или двоичная квантизация , они будут применены к этому набору данных. Если требуется смещение сжатия потери, следует сохранить второй экземпляр для изменения качества поиска ANN.

stored Установка свойства

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

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

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

  • Однако если стратегия индексирования включает частичные обновления документов, например 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 задается во время создания индекса в векторных полях и является необратимым. Если вы хотите получить содержимое позже, необходимо удалить и перестроить индекс или создать и загрузить новое поле с новым атрибутом.

  • По умолчанию задано значение true и retrievable задано stored значение false. В конфигурации по умолчанию сохраняется извлекаемая копия, но она не возвращается автоматически в результатах. Если stored значение равно true, вы можете переключаться retrievable между true и false в любое время, не перестроив индекс. Если stored значение равно false, retrievable должно иметь значение false и не может быть изменено.

rescoreStorageMethod Установка свойства

Примечание.

Эта функция сейчас доступна в виде общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения на уровне обслуживания и не рекомендуется для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.

Свойство rescoreStorageMethod управляет хранилищем векторов полной точности при использовании сжатия.

Для несжатых полей векторов в индексах, созданных с 2024-11-01-Preview помощью версий API и более поздних версий, это будет пропущено по умолчанию без влияния на действия поиска или качество. Для существующих полей векторов, созданных до этой версии API, нет возможности удалить эту копию данных.

Для сжатия rescoreStorageMethod векторов свойство устанавливается preserveOriginals по умолчанию, которое сохраняет векторы полной точности для перераспреждения и переопределения возможностей дляуменьшения эффекта сжатия потери на графе HNSW. Если эти возможности не используются, можно уменьшить хранилище векторов, установив для этого значение rescoreStorageMethod discardOriginals.

Внимание

rescoreStorageMethod Задание свойства необратимо и будет иметь различные уровни потери качества поиска в зависимости от метода сжатия. Это можно задать для индексов, созданных с 2024-11-01-Preview или более поздней версии, либо во время создания индекса или добавления новых векторных полей.

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

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

  1. Используйте ИНТЕРФЕЙСы REST API для создания индекса или создания или обновления индекса 2024-11-01-preview или бета-версии пакета AZURE SDK, предоставляющего эту функцию.

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