Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Служба "Поиск ИИ Azure" хранит несколько копий векторных полей, используемых в определенных рабочих нагрузках. Если вам не нужно поддерживать определенное поведение, например возвращать необработанные векторы в ответе запроса, можно задать свойства в индексе, который опустит хранилище для этой рабочей нагрузки.
Удаление хранилища необратимо и требует переиндексирования, если вы хотите вернуть его.
Необходимые компоненты
-
Векторные поля в индексе поиска с
vectorSearch
конфигурацией, указывающей алгоритм иерархических навигационных небольших миров (HNSW) или исчерпывающий алгоритм K-Ближайшего соседа (KNN) и новый профиль вектора.
Как хранятся поля векторов
Для каждого векторного поля существует до трех копий векторов, каждая из которых обслуживает разные цели:
Экземпляр | Использование | Управляемое использование |
---|---|---|
Исходные векторы, полученные во время индексирования документов (данные JSON) | Используется для добавочного обновления данных с действием индексирования merge или mergeOrUpload . Также используется для возврата векторов, доступных для извлечения, в ответе запроса. |
stored свойство в векторных полей |
Исходные векторы полной точности (двоичные данные) | Используется для внутренних операций индексов и для исчерпывающего поиска KNN в более старых версиях API. Для сжатых векторов он также используется для preserveOriginals пересчета в наборе результатов поиска ANN, полученном через сверхвыборку. Это относится к полям векторов, которые проходят скалярную или двоичную квантизацию. |
rescoringOptions.rescoreStorageMethod свойство в vectorSearch.compressions . |
Векторы в графе HNSW для поиска ближайших соседей (граф HNSW) или векторы для исчерпывающего поиска K-ближайших соседей (индекс eKNN) | Используется для выполнения запроса. Состоит из векторов полной точности (если сжатие не применяется) или квантизованных векторов. | Необходимый. Нет параметров для удаления этого экземпляра. |
Вы можете задать свойства, которые окончательно отменяют первые два экземпляра (данные JSON и двоичные данные) из векторного хранилища, но не из последнего экземпляра.
Для компенсации потерь при сжатии данных в HNSW можно сохранить второй экземпляр (двоичные данные) для улучшения качества поиска с использованием АНН. Для eKNN поддерживается только скалярная квантизация, а перезапись не является вариантом. В более новых версиях API, таких как последняя предварительная версия, второй экземпляр не хранится для eKNN, так как третий экземпляр предоставляет векторы полной точности в индексе eKNN.
Индексы, созданные с помощью версий API 2024-11-01-preview или более поздних версий API
Для индексов, созданных с помощью предварительной версии 2024-11-01-preview или более поздней версии API с несжатыми полями векторов, второй и третий экземпляры (двоичные данные и граф HNSW) объединяются в рамках наших инвестиций по сокращению затрат, сокращая общее хранилище. Более новый индекс поколения с консолидированными векторами функционально эквивалентен старым индексам, но использует меньше хранилища. Физические структуры данных устанавливаются в запросе на создание индекса, поэтому необходимо удалить и повторно создать индекс для реализации сокращений хранилища.
Если выбрать векторное сжатие, поиск ИИ сжимает (квантизует) часть в памяти индекса вектора. Так как память часто является основным ограничением для векторных индексов, эта практика позволяет хранить больше векторов в одной службе поиска. Однако сжатие с потерями означает меньше информации в индексе, что может повлиять на качество поиска.
Чтобы устранить потерю информации, можно включить параметры перезаписи и перезагрегирования, чтобы обеспечить качество. Результатом является извлечение большего набора документов-кандидатов из сжатого индекса с повторной компиляцией показателей сходства с помощью исходных векторов или точечных продуктов. Чтобы пересчет работал, исходные векторы должны сохраняться на хранении для определенных сценариев. В результате, в то время как квантизация снижает использование памяти (использование векторного индекса), она немного увеличивает требования к хранилищу, так как хранятся как сжатые, так и исходные векторы. Дополнительное хранилище приблизительно равно размеру сжатого индекса.
Удаление исходных векторов (данные JSON)
Свойство 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 и
stored
заданоretrievable
значение false. В конфигурации по умолчанию сохраняется извлекаемая копия, но она не возвращается автоматически в результатах. Еслиstored
значение равно true, вы можете переключатьсяretrievable
между true и false в любое время, не перестроив индекс. Еслиstored
значение равно false,retrievable
должно иметь значение false и не может быть изменено.
Удаление векторов полной точности (двоичные данные)
Примечание.
Эта функция сейчас доступна в виде общедоступной предварительной версии. Этот предварительный просмотр предоставляется без соглашения об уровне обслуживания и не предназначается для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.
При сжатие векторов с помощью скалярной или двоичной квантизации выполнение запроса выполняется по квантизованным векторам. В этом случае вам потребуются только исходные векторы с полной точностью (двоичные данные), если вы хотите пересчитать оценки.
Если вы используете более новые API предварительной версии и двоичную квантизацию, можно безопасно отказаться от векторов полной точности, так как стратегии пересчета теперь используют скалярное произведение двоичного встраивания, что создает высококачественные результаты поиска без необходимости ссылки на векторы полной точности в индексе.
Свойство rescoreStorageMethod
определяет, хранятся ли векторы полной точности. Руководство по вопросу о том, следует ли сохранять векторы полной точности:
- Для скалярной квантизации сохраните исходные векторы полной точности в индексе, так как они необходимы для rescore.
- Для двоичной квантизации сохраните исходные векторы полной точности для обеспечения высокого качества пересчета, или удалите векторы полной точности (требуется 2025-03-01-preview), если хотите пересчитать на основе скалярного произведения бинарных внедрений.
Стратегии хранения векторов развивались в течение последних нескольких выпусков. Дата создания индекса и версия API определяют параметры хранения.
Версия API | Применимо к | Удаление векторов полной точности |
---|---|---|
2024-07-01 и ранее | Неприменимо. | Нет механизма удаления векторов полной точности. |
2024-11-01-превью | Внедрение двоичных файлов | Используйте rescoreStorageMethod.discardOriginals для удаления векторов полной точности, но это предотвращает перезапись.
enableRescoring должно быть false, если оригиналы исчезли. |
2025-03-01-превью | Внедрение двоичных файлов | Используйте rescoreStorageMethod.discardOriginals для удаления векторов полной точности из индекса, при этом сохраняя опции пересчета. В этом режиме предпросмотра рескоринг возможен, потому что метод изменился. Скалярное произведение двоичных встраиваний используется для пересчёта, обеспечивая высококачественные результаты поиска, эквивалентные более ранним методам на основе векторов полной точности или превосходящие их. |
Обратите внимание, что скаляр не указан в таблице. Если используется скалярная квантизация, необходимо сохранить исходные векторы полной точности, если требуется пересчет.
В vectorSearch.compressions
свойстве rescoreStorageMethod
задано preserveOriginals
значение по умолчанию, в котором сохраняются векторы полной точности для пересэмплирования и способности пересчета для уменьшения эффекта потерь при сжатии на графе HNSW. Если вам не нужны векторы полной точности, можно уменьшить хранилище векторов, установив для этого значение rescoreStorageMethod
discardOriginals
.
Внимание
Установка свойства rescoreStorageMethod
необратима и может отрицательно сказаться на качестве поиска, хотя степень воздействия зависит от метода сжатия и любых применяемых мер.
Чтобы задать это свойство, выполните указанные ниже действия.
Используйте API-интерфейсы Создать индекс (предварительная версия) или Создать или обновить индекс (предварительная версия) и пакеты бета-версии SDK Azure, предоставляющие эту возможность.
vectorSearch
Добавьте раздел в индекс с профилями, алгоритмами и сжатием.В разделе
vectorSearch.compressions
, добавьтеrescoringOptions
, установивenableRescoring
в true,defaultOversampling
как положительное целое число, и установитеrescoreStorageMethod
какdiscardOriginals
для двоичной квантизации иpreserveOriginals
для скалярной квантизации.PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2025-03-01-preview { "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 } ] } }