Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek vysvětluje, jak vytvořit vektorová data, indexovat data a potom dotazovat data v kontejneru.
Před použitím indexování a vyhledávání vektorů musíte nejprve povolit vektorové vyhledávání ve službě Azure Cosmos DB for NoSQL. Po nastavení kontejneru Azure Cosmos DB pro vektorové vyhledávání vytvoříte zásadu vkládání vektorů. Dále přidáte vektorové indexy do zásad indexování kontejneru. Pak vytvoříte kontejner s vektorovými indexy a zásadami vkládání vektorů. Nakonec provedete vektorové vyhledávání uložených dat.
Požadavky
- Existující účet Azure Cosmos DB pro NoSQL.
- Pokud předplatné Azure nemáte, můžete si ho zdarma vytvořit.
- Pokud máte existující předplatné Azure, vytvořte nový účet Azure Cosmos DB for NoSQL.
- Nejnovější verze sady SDK pro Python služby Azure Cosmos DB.
Povolení funkce
Pokud chcete povolit vektorové vyhledávání pro Azure Cosmos DB for NoSQL, postupujte takto:
- Přejděte na stránku prostředku Azure Cosmos DB pro NoSQL.
- V levém podokně v části Nastavení vyberte Funkce.
- Vyberte Vektorové vyhledávání pro rozhraní API NoSQL.
- Přečtěte si popis funkce a potvrďte, že ji chcete povolit.
- Výběrem možnosti Povolit zapnete vektorové vyhledávání ve službě Azure Cosmos DB for NoSQL.
Tip
Případně můžete pomocí Azure CLI aktualizovat možnosti vašeho účtu tak, aby podporovaly vektorové vyhledávání Ve službě Azure Cosmos DB for NoSQL.
az cosmosdb update \
--resource-group <resource-group-name> \
--name <account-name> \
--capabilities EnableNoSQLVectorSearch
Žádost o registraci je automaticky schválena, ale může trvat 15 minut, než se projeví.
Vysvětlení kroků spojených s hledáním vektorů
Následující kroky předpokládají, že víte, jak nastavit účet Azure Cosmos DB for NoSQL a vytvořit databázi. Funkce vektorového vyhledávání se v současné době nepodporuje u existujících kontejnerů. Musíte vytvořit nový kontejner. Při vytváření kontejneru zadáte zásadu vkládání vektoru na úrovni kontejneru a zásadu indexování vektorů.
Podívejme se na příklad vytvoření databáze pro internetový knihkupectví. Chcete uložit název, autora, ISBN a informace o popisu každé knihy. Musíte také definovat následující dvě vlastnosti, které budou obsahovat vektorové vkládání:
- Vlastnost
contentVectorobsahuje vložené texty , které jsou generovány z textového obsahu knihy. Například zřetězíte vlastnostititle,author,isbnadescriptionpřed vytvořením vložení. - Vlastnost
coverImageVectorse generuje z obrázků titulní stránky knihy.
Pokud chcete provést vektorové vyhledávání, postupujte takhle:
- Vytvořte a uložte vkládání vektorů pro pole, na kterých chcete provádět vektorové vyhledávání.
- Zadejte cesty pro vkládání vektorů v zásadách vkládání vektorů.
- Do zásad indexování kontejneru zahrňte všechny vektorové indexy, které chcete použít.
V dalších částech tohoto článku zvažte následující strukturu položek uložených v kontejneru:
{
"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]
}
Vytvoření zásady vkládání vektorů pro kontejner
Teď potřebujete definovat zásadu vektoru kontejneru. Tato zásada poskytuje informace, které slouží k informování dotazovacího stroje Azure Cosmos DB o tom, jak zpracovávat vlastnosti vektoru v systémových VectorDistance funkcích. Tato zásada také poskytuje nezbytné informace pro zásadu indexování vektorů, pokud se rozhodnete jednu zásadu zadat.
Do zásad vektoru kontejneru jsou zahrnuty následující informace:
| Parametr | Popis |
|---|---|
path |
Cesta vlastnosti, která obsahuje vektory. |
datatype |
Typ prvků vektoru. Výchozí hodnota je Float32. |
dimensions |
Délka každého vektoru v cestě. Výchozí hodnota je 1536. |
distanceFunction |
Metrika použitá k výpočtu vzdálenosti a podobnosti. Výchozí hodnota je Cosine. |
V příkladu s podrobnostmi knihy může politika vektoru vypadat jako v následujícím příkladu.
vector_embedding_policy = {
"vectorEmbeddings": [
{
"path": "/coverImageVector",
"dataType": "float32",
"distanceFunction": "dotproduct",
"dimensions": 8
},
{
"path": "/contentVector",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 10
}
]
}
Vytvoření vektorového indexu v zásadách indexování
Jakmile se rozhodnete o cestách vkládání vektorů, musíte do zásad indexování přidat vektorové indexy. Zásady indexování vypadají přibližně jako v následujícím příkladu:
indexing_policy = {
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?",
"path": "/coverImageVector/*",
"path": "/contentVector/*"
}
],
"vectorIndexes": [
{"path": "/coverImageVector",
"type": "quantizedFlat"
},
{"path": "/contentVector",
"type": "quantizedFlat"
}
]
}
Důležité
Cesta vektoru se přidá do excludedPaths části zásad indexování, aby se zajistil optimalizovaný výkon pro vložení. Nepřidání vektorové cesty do excludedPaths vede k vyššímu poplatku za jednotku požadavku a prodlevě při vkládání vektorů.
V současné době se vektorové vyhledávání ve službě Azure Cosmos DB for NoSQL podporuje pouze u nových kontejnerů. Při vytváření kontejneru je potřeba nastavit zásady vektoru kontejneru i všechny zásady indexování vektorů, protože je později nemůžete upravit.
Vytvořte kontejner s vektorovou politikou
Funkce vektorového vyhledávání pro Azure Cosmos DB for NoSQL se v současné době podporuje jenom u nových kontejnerů. Při vytváření kontejneru použijete zásadu vektoru. Zásady nemůžete později upravit.
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
Spuštění vyhledávacího dotazu vektorové podobnosti
Po vytvoření kontejneru s požadovanými vektorovými zásadami a vložením vektorových dat do kontejneru použijte funkci systému VectorDistance v dotazu k provedení vektorového vyhledávání.
Předpokládejme, že chcete hledat knihy o receptech na jídlo tak, že se podíváte na popis. Nejdřív potřebujete získat vložené texty dotazu. V tomto případě můžete chtít vygenerovat embeddingy pro text dotazu food recipe. Po vložení vyhledávacího dotazu ho můžete použít ve VectorDistance funkci ve vektorovém vyhledávacím dotazu, abyste získali všechny položky podobné vašemu dotazu:
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])
Tento dotaz načte názvy knih spolu se skóre podobnosti vzhledem k vašemu dotazu. Tady je příklad v Pythonu:
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))