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.
V tomto rychlém startu vytvoříte konzolovou aplikaci .NET, která provede sémantické vyhledávání v úložišti vektorů a vyhledá relevantní výsledky pro dotaz uživatele. Naučíte se generovat vkládání pro výzvy uživatelů a pomocí těchto vložených dat dotazovat úložiště vektorových dat.
Úložiště vektorů nebo vektorové databáze jsou nezbytné pro úlohy, jako je sémantické vyhledávání, načítání rozšířené generace (RAG) a další scénáře, které vyžadují uzemnění odpovědí na generování AI. Zatímco relační databáze a databáze dokumentů jsou optimalizované pro strukturovaná a částečně strukturovaná data, vektorové databáze se vytvářejí tak, aby efektivně ukládaly, indexovaly a spravovaly data reprezentovaná jako vektory vkládání. V důsledku toho jsou algoritmy indexování a vyhledávání používané vektorovými databázemi optimalizované tak, aby efektivně načítaly data, která je možné použít ve vašich aplikacích.
Informace o knihovnách
Aplikace používá knihovny Microsoft.Extensions.AI a Microsoft.Extensions.VectorData knihovny, takže můžete psát kód pomocí abstrakcí AI místo konkrétní sady SDK. Abstrakce AI pomáhají vytvořit volně propojený kód, který umožňuje změnit základní model AI s minimálními změnami aplikace.
📦 Microsoft.Extensions.VectorData.Abstractions je knihovna .NET vyvinutá ve spolupráci s sémantickým jádrem a širším ekosystémem .NET, která poskytuje jednotnou vrstvu abstrakcí pro interakci s vektorovými úložišti. Abstrakce v Microsoft.Extensions.VectorData.Abstractions
poskytují autorům knihoven a vývojářům následující funkce:
- Provádění operací create-read-update-delete (CRUD) v úložištích vektorů.
- Použití vektoru a vyhledávání textu v úložištích vektorů
Poznámka:
Knihovna Microsoft.Extensions.VectorData.Abstractions je aktuálně ve verzi Preview.
Požadavky
- SDK .NET 8.0 nebo novější – Nainstalujte SDK .NET 8.0.
- Klíč API od OpenAI, abyste mohli tuto ukázku spustit.
Požadavky
- .NET 8.0 SDK nebo novější – Nainstalujte sadu .NET 8 SDK.
- Předplatné Azure – Vytvoření zdarma.
- Azure Developer CLI (volitelné) – Nainstalujte nebo aktualizujte Azure Developer CLI.
Vytvoření aplikace
Provedením následujících kroků vytvořte konzolovou aplikaci .NET, která může:
- Vytvořte a naplňte vektorové úložiště generováním embeddingů pro datovou sadu.
- Vygenerujte vložení pro výzvu uživatele.
- Dotazujte se na úložiště vektorů pomocí vnoření uživatelského promptu.
- Zobrazí relevantní výsledky z vektorového vyhledávání.
V prázdném adresáři v počítači pomocí příkazu
dotnet new
vytvořte novou konzolovou aplikaci:dotnet new console -o VectorDataAI
Změňte adresář do složky aplikace:
cd VectorDataAI
Nainstalujte požadované balíčky:
dotnet add package Azure.Identity dotnet add package Azure.AI.OpenAI dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease dotnet add package Microsoft.Extensions.VectorData.Abstractions --prerelease dotnet add package Microsoft.SemanticKernel.Connectors.InMemory --prerelease dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets dotnet add package System.Linq.AsyncEnumerable
Následující seznam popisuje jednotlivé balíčky v
VectorDataAI
aplikaci:-
Azure.Identity
poskytuje podporu ověřování tokenůMicrosoft Entra ID
napříč sadou Azure SDK pomocí tříd, jako jeDefaultAzureCredential
. -
Azure.AI.OpenAI
je oficiální balíček pro použití knihovny .NET OpenAI se službou Azure OpenAI. -
Microsoft.Extensions.VectorData.Abstractions
umožňuje operace Create-Read-Update-Delete (CRUD) a vyhledávací operace v úložištích vektorů. -
Microsoft.SemanticKernel.Connectors.InMemory
poskytuje třídu úložiště vektorů v paměti pro uchovávání záznamů dat vektorových vektorů s možností dotazování. - Microsoft.Extensions.Configuration poskytuje implementaci konfigurace založené na páru klíč-hodnota.
-
Microsoft.Extensions.Configuration.UserSecrets
je implementace zprostředkovatele konfigurace uživatelských tajemství proMicrosoft.Extensions.Configuration
.
dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease dotnet add package Microsoft.Extensions.VectorData.Abstractions --prerelease dotnet add package Microsoft.SemanticKernel.Connectors.InMemory --prerelease dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets dotnet add package System.Linq.AsyncEnumerable
Následující seznam popisuje jednotlivé balíčky v
VectorDataAI
aplikaci:-
Microsoft.Extensions.AI.OpenAI
poskytuje abstrakce AI pro modely nebo koncové body kompatibilní s OpenAI. Tato knihovna také obsahuje oficiální knihovnuOpenAI
jako závislost pro rozhraní API služby OpenAI. -
Microsoft.Extensions.VectorData.Abstractions
umožňuje operace Create-Read-Update-Delete (CRUD) a vyhledávací operace v úložištích vektorů. -
Microsoft.SemanticKernel.Connectors.InMemory
poskytuje třídu úložiště vektorů v paměti pro uchovávání záznamů dat vektorových vektorů s možností dotazování. - Microsoft.Extensions.Configuration poskytuje implementaci konfigurace založené na páru klíč-hodnota.
-
Microsoft.Extensions.Configuration.UserSecrets
je implementace zprostředkovatele konfigurace uživatelských tajemství proMicrosoft.Extensions.Configuration
.
-
Otevřete aplikaci v editoru Visual Studio Code (nebo v libovolném editoru).
code .
Vytvoření služby AI
Pokud chcete zřídit službu a model Azure OpenAI, proveďte kroky v článku Vytvoření a nasazení prostředku služby Azure OpenAI .
Z terminálu nebo příkazového řádku přejděte do kořenového adresáře projektu.
Spuštěním následujících příkazů nakonfigurujte koncový bod Azure OpenAI a název modelu pro ukázkovou aplikaci:
dotnet user-secrets init dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-Azure-OpenAI-endpoint> dotnet user-secrets set AZURE_OPENAI_GPT_NAME <your-Azure-OpenAI-model-name>
Konfigurace aplikace
V terminálu nebo příkazovém řádku přejděte do kořenového adresáře projektu .NET.
Spuštěním následujících příkazů nakonfigurujte klíč rozhraní API OpenAI jako tajný klíč pro ukázkovou aplikaci:
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-OpenAI-key> dotnet user-secrets set ModelName <your-OpenAI-model-name>
Poznámka:
Pro název modelu je nutné zadat model vkládání textu, jako například text-embedding-3-small
nebo text-embedding-3-large
, pro vygenerování vkládání pro vektorové vyhledávání v následujících částech. Další informace o vkládání modelů najdete v tématu Vkládání.
Přidání kódu aplikace
Přidejte do projektu novou třídu
CloudService
s následujícími vlastnostmi:using Microsoft.Extensions.VectorData; namespace VectorDataAI; internal class CloudService { [VectorStoreKey] public int Key { get; set; } [VectorStoreData] public string Name { get; set; } [VectorStoreData] public string Description { get; set; } [VectorStoreVector( Dimensions: 384, DistanceFunction = DistanceFunction.CosineSimilarity)] public ReadOnlyMemory<float> Vector { get; set; } }
Atributy Microsoft.Extensions.VectorData , například VectorStoreKeyAttribute, ovlivňují způsob zpracování každé vlastnosti při použití v úložišti vektorů. Vlastnost
Vector
ukládá vygenerované vkládání, které představuje sémantický významDescription
hodnoty pro vektorové vyhledávání.Program.cs
Do souboru přidejte následující kód pro vytvoření datové sady, která popisuje kolekci cloudových služeb:List<CloudService> cloudServices = [ new() { Key = 0, Name = "Azure App Service", Description = "Host .NET, Java, Node.js, and Python web applications and APIs in a fully managed Azure service. You only need to deploy your code to Azure. Azure takes care of all the infrastructure management like high availability, load balancing, and autoscaling." }, new() { Key = 1, Name = "Azure Service Bus", Description = "A fully managed enterprise message broker supporting both point to point and publish-subscribe integrations. It's ideal for building decoupled applications, queue-based load leveling, or facilitating communication between microservices." }, new() { Key = 2, Name = "Azure Blob Storage", Description = "Azure Blob Storage allows your applications to store and retrieve files in the cloud. Azure Storage is highly scalable to store massive amounts of data and data is stored redundantly to ensure high availability." }, new() { Key = 3, Name = "Microsoft Entra ID", Description = "Manage user identities and control access to your apps, data, and resources." }, new() { Key = 4, Name = "Azure Key Vault", Description = "Store and access application secrets like connection strings and API keys in an encrypted vault with restricted access to make sure your secrets and your application aren't compromised." }, new() { Key = 5, Name = "Azure AI Search", Description = "Information retrieval at scale for traditional and conversational search applications, with security and options for AI enrichment and vectorization." } ];
Vytvořte a nakonfigurujte implementaci
IEmbeddingGenerator
tak, aby odesílala požadavky na model AI pro vložení:// Load the configuration values. IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string endpoint = config["AZURE_OPENAI_ENDPOINT"]; string model = config["AZURE_OPENAI_GPT_NAME"]; // Create the embedding generator. IEmbeddingGenerator<string, Embedding<float>> generator = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential()) .GetEmbeddingClient(deploymentName: model) .AsIEmbeddingGenerator();
Poznámka:
DefaultAzureCredential hledá přihlašovací údaje z vašich místních nástrojů. Bude třeba přiřadit roli
Azure AI Developer
účtu, který jste použili k přihlášení k sadě Visual Studio nebo Azure CLI. Další informace najdete v tématu Ověřování ve službách Azure AI pomocí rozhraní .NET.// Load the configuration values. IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string model = config["ModelName"]; string key = config["OpenAIKey"]; // Create the embedding generator. IEmbeddingGenerator<string, Embedding<float>> generator = new OpenAIClient(new ApiKeyCredential(key)) .GetEmbeddingClient(model: model) .AsIEmbeddingGenerator();
Vytvořte a naplňte vektorové úložiště dat cloudové služby. Pomocí implementace
IEmbeddingGenerator
vytvořte a přiřaďte vektor vkládání pro každý záznam v datech cloudové služby:// Create and populate the vector store. var vectorStore = new InMemoryVectorStore(); VectorStoreCollection<int, CloudService> cloudServicesStore = vectorStore.GetCollection<int, CloudService>("cloudServices"); await cloudServicesStore.EnsureCollectionExistsAsync(); foreach (CloudService service in cloudServices) { service.Vector = await generator.GenerateVectorAsync(service.Description); await cloudServicesStore.UpsertAsync(service); }
Vkládání jsou číselné reprezentace sémantického významu každého datového záznamu, díky čemuž jsou kompatibilní s funkcemi vektorového vyhledávání.
Vytvořte vložení pro vyhledávací dotaz a použijte ho k provedení vektorového vyhledávání v úložišti vektorů:
// Convert a search query to a vector // and search the vector store. string query = "Which Azure service should I use to store my Word documents?"; ReadOnlyMemory<float> queryEmbedding = await generator.GenerateVectorAsync(query); IAsyncEnumerable<VectorSearchResult<CloudService>> results = cloudServicesStore.SearchAsync(queryEmbedding, top: 1); await foreach (VectorSearchResult<CloudService> result in results) { Console.WriteLine($"Name: {result.Record.Name}"); Console.WriteLine($"Description: {result.Record.Description}"); Console.WriteLine($"Vector match score: {result.Score}"); }
dotnet run
Spuštění aplikace pomocí příkazu:dotnet run
Aplikace vytiskne nejlepší výsledek z vektorového vyhledávání, což je cloudová služba, která je k původnímu dotazu nejvíce relevantní. Dotaz můžete upravit a vyzkoušet různé scénáře hledání.
Uklidit zdroje
Pokud je už nepotřebujete, odstraňte nasazení modelu a prostředku Azure OpenAI.
- Na webu Azure Portalpřejděte k prostředku Azure OpenAI.
- Vyberte prostředek Azure OpenAI a pak vyberte Odstranit.