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 vás provede procesem vytvoření vektorových dat, indexování dat a následného dotazování dat 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 nemáte předplatné Azure, vyzkoušejte službu Azure Cosmos DB for NoSQL zdarma.
- Pokud máte existující předplatné Azure, vytvořte nový účet Azure Cosmos DB for NoSQL.
- Nejnovější verze sady .NET SDK služby Azure Cosmos DB (verze: 3.45.0 nebo novější, Preview: 3.46.0-preview.0 nebo novější).
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.
- Výběr možnosti Vektorové vyhledávání ve službě Azure Cosmos DB for 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 k 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.
Database db = await client.CreateDatabaseIfNotExistsAsync("vector-benchmarking");
List<Embedding> embeddings = new List<Embedding>()
{
new Embedding()
{
Path = "/coverImageVector",
DataType = VectorDataType.Float32,
DistanceFunction = DistanceFunction.Cosine,
Dimensions = 8,
},
new Embedding()
{
Path = "/contentVector",
DataType = VectorDataType.Float32,
DistanceFunction = 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. 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. Zásady indexování vypadají přibližně jako v následujícím příkladu:
Collection<Embedding> collection = new Collection<Embedding>(embeddings);
ContainerProperties properties = new ContainerProperties(id: "vector-container", partitionKeyPath: "/id")
{
VectorEmbeddingPolicy = new(collection),
IndexingPolicy = new IndexingPolicy()
{
VectorIndexes = new()
{
new VectorIndexPath()
{
Path = "/vector",
Type = VectorIndexType.QuantizedFlat,
}
}
},
};
properties.IndexingPolicy.IncludedPaths.Add(new IncludedPath { Path = "/*" });
properties.IndexingPolicy.ExcludedPaths.Add(new ExcludedPath { Path = "/vector/*" });
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ů.
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 .NET:
float[] embedding = {1f,2f,3f,4f,5f,6f,7f,8f,9f,10f};
var queryDef = new QueryDefinition(
query: $"SELECT c.title, VectorDistance(c.contentVector,@embedding) AS SimilarityScore FROM c ORDER BY VectorDistance(c.contentVector,@embedding)"
).WithParameter("@embedding", embedding);
using FeedIterator<Object> feed = container.GetItemQueryIterator<Object>(
queryDefinition: queryDef
);
while (feed.HasMoreResults)
{
FeedResponse<Object> response = await feed.ReadNextAsync();
foreach ( Object item in response)
{
Console.WriteLine($"Found item:\t{item}");
}
}