Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается процесс создания векторных данных, индексирования данных и последующего запроса данных в контейнере.
Прежде чем использовать индексирование и поиск векторов, необходимо сначала включить векторный поиск в Azure Cosmos DB для NoSQL. После настройки контейнера Azure Cosmos DB для поиска векторов создайте политику внедрения векторов. Затем вы добавите векторные индексы в политику индексирования контейнеров. Затем вы создадите контейнер с векторными индексами и политикой внедрения векторов. Наконец, выполняется векторный поиск хранимых данных.
Предварительные условия
- Существующая учетная запись Azure Cosmos DB для NoSQL.
- Если у вас нет подписки Azure, попробуйте azure Cosmos DB для NoSQL бесплатно.
- Если у вас есть подписка Azure, создайте новую учетную запись Azure Cosmos DB для NoSQL.
- Последняя версия пакета SDK для Python для Azure Cosmos DB.
Включение функции
Чтобы включить векторный поиск Azure Cosmos DB для NoSQL, выполните следующие действия.
- Перейдите на страницу ресурсов Azure Cosmos DB для NoSQL.
- На левой панели в разделе "Параметры" выберите "Компоненты".
- Выберите векторный поиск в Azure Cosmos DB для NoSQL.
- Ознакомьтесь с описанием функции, чтобы убедиться, что вы хотите включить ее.
- Выберите "Включить", чтобы включить векторный поиск в Azure Cosmos DB для NoSQL.
Совет
Кроме того, используйте Azure CLI, чтобы обновить возможности учетной записи для поддержки векторного поиска в Azure Cosmos DB для NoSQL.
az cosmosdb update \
--resource-group <resource-group-name> \
--name <account-name> \
--capabilities EnableNoSQLVectorSearch
Запрос на регистрацию автоматически одобряется, но на это может уйти 15 минут.
Общие сведения о шагах, связанных с векторным поиском
В следующих шагах предполагается, что вы знаете, как настроить учетную запись Azure Cosmos DB для NoSQL и создать базу данных. Функция поиска векторов в настоящее время не поддерживается в существующих контейнерах. Необходимо создать новый контейнер. При создании контейнера необходимо указать политику внедрения вектора на уровне контейнера и политику индексирования векторов.
Давайте рассмотрим пример создания базы данных для интернет-магазина книг. Вы хотите сохранить название, автор, ISBN и описание каждой книги. Кроме того, необходимо определить следующие два свойства, чтобы содержать векторные внедрения:
- Свойство
contentVector
содержит вставки текста , созданные из текстового содержимого книги. Например, вы объединяетеtitle
,author
,isbn
свойства иdescription
свойства перед созданием встраивания. - Свойство
coverImageVector
генерируется из изображений обложки книги.
Чтобы выполнить векторный поиск, выполните следующие действия.
- Создайте и сохраните векторные внедрения для полей, в которых требуется выполнить поиск векторов.
- Укажите пути встраивания вектора в политику встраивания вектора.
- Включите все векторные индексы, которые требуется в политике индексирования для контейнера.
Для последующих разделов этой статьи рассмотрим следующую структуру для элементов, хранящихся в контейнере:
{
"title": "book-title",
"author": "book-author",
"isbn": "book-isbn",
"description": "book-description",
"contentVector": [2, -1, 4, 3, 5, -2, 5, -7, 3, 1],
"coverImageVector": [0.33, -0.52, 0.45, -0.67, 0.89, -0.34, 0.86, -0.78]
}
Создайте политику встраивания вектора для вашего контейнера
Теперь необходимо определить политику вектора контейнера. Эта политика предоставляет сведения, используемые для информирования обработчика запросов Azure Cosmos DB о том, как обрабатывать свойства векторов в системных VectorDistance
функциях. Эта политика также предоставляет необходимые сведения для политики индексирования векторов, если вы решили указать ее.
Следующие сведения включаются в политику вектора контейнера:
Параметр | Описание |
---|---|
path |
Путь свойства, содержащий векторы. |
datatype |
Тип элементов вектора. (Значение по умолчанию — Float32 .) |
dimensions |
Длина каждого вектора в пути. (Значение по умолчанию — 1536 .) |
distanceFunction |
Метрика, используемая для вычисления расстояния или сходства. (Значение по умолчанию — Cosine .) |
В примере с сведениями о книге политика вектора может выглядеть следующим образом:
vector_embedding_policy = {
"vectorEmbeddings": [
{
"path": "/coverImageVector",
"dataType": "float32",
"distanceFunction": "dotproduct",
"dimensions": 8
},
{
"path": "/contentVector",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 10
}
]
}
Создание векторного индекса в политике индексирования
После принятия решения о путях внедрения векторов необходимо добавить векторные индексы в политику индексирования. Политика индексирования выглядит примерно так:
indexing_policy = {
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?",
"path": "/coverImageVector/*",
"path": "/contentVector/*"
}
],
"vectorIndexes": [
{"path": "/coverImageVector",
"type": "quantizedFlat"
},
{"path": "/contentVector",
"type": "quantizedFlat"
}
]
}
Внимание
Векторный путь добавляется в excludedPaths
раздел политики индексирования, чтобы оптимизировать производительность при вставке. Не добавление пути вектора в excludedPaths
приводит к увеличению платы за единицу запроса и задержке при вставке векторов.
В настоящее время поиск векторов в Azure Cosmos DB для NoSQL поддерживается только в новых контейнерах. При создании контейнера необходимо задать как политику вектора контейнера, так и любую политику индексирования векторов, так как ее нельзя изменить позже.
Создание контейнера с политикой вектора
В настоящее время функция поиска векторов для Azure Cosmos DB для NoSQL поддерживается только в новых контейнерах. При создании контейнера применяется политика вектора. Вы не можете изменить политику позже.
try:
container = db.create_container_if_not_exists(
id=CONTAINER_NAME,
partition_key=PartitionKey(path='/id'),
indexing_policy=indexing_policy,
vector_embedding_policy=vector_embedding_policy)
print('Container with id \'{0}\' created'.format(id))
except exceptions.CosmosHttpResponseError:
raise
Выполнение запроса поиска сходства векторов
После создания контейнера с необходимой политикой векторов и вставки в контейнер данных вектора используйте системную функцию VectorDistance в запросе для проведения векторного поиска.
Предположим, вы хотите искать книги о рецептах пищи, глядя на описание. Сначала необходимо получить встраивание текста запроса. В этом случае может потребоваться создать внедрения для текста food recipe
запроса. После получения встраивания для вашего поискового запроса, его можно использовать в функции VectorDistance
в векторном поисковом запросе, чтобы получить все элементы, похожие на ваш запрос.
SELECT TOP 10 c.title, VectorDistance(c.contentVector, [1,2,3,4,5,6,7,8,9,10]) AS SimilarityScore
FROM c
ORDER BY VectorDistance(c.contentVector, [1,2,3,4,5,6,7,8,9,10])
Этот запрос извлекает названия книг, а также оценки сходства с вашим запросом. Ниже приведен пример в Python:
query_embedding = [1,2,3,4,5,6,7,8,9,10]
# Query for items
for item in container.query_items(
query='SELECT c.title, VectorDistance(c.contentVector,@embedding) AS SimilarityScore FROM c ORDER BY VectorDistance(c.contentVector,@embedding)',
parameters=[
{"name": "@embedding", "value": query_embedding}
],
enable_cross_partition_query=True):
print(json.dumps(item, indent=True))