Устранение необязательных экземпляров векторов из хранилища
Служба "Поиск ИИ 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
максимально повысить качество поиска.
Чтобы задать это свойство, выполните указанные ниже действия.
Используйте ИНТЕРФЕЙСы REST API для создания индекса или создания или обновления индекса 2024-11-01-preview или бета-версии пакета AZURE SDK, предоставляющего эту функцию.
vectorSearch
Добавьте раздел в индекс с профилями, алгоритмами и сжатием.В разделе сжатия добавьте
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 } ] } }