Vytvoření aplikace pro vektorové vyhledávání AI v .NET
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. Funkce vektorového vyhledávání je také klíčovou komponentou pro scénáře načítání rozšířené generace (RAG). Aplikace používá Microsoft.Extensions.AI a knihovny Microsoft.Extensions.VectorData.Abstractions, 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.
Požadavky
- SDK .NET 8.0 nebo novější – Nainstalujte SDK .NET 8.0.
- Klíč rozhraní API z 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řte si ho zdarma.
- Přístup ke službě Azure OpenAI
- Azure Developer CLI (volitelné) – instalace nebo aktualizace Azure Developer CLI.
Klonování ukázkového úložiště
Vlastní aplikaci můžete vytvořit pomocí kroků v dalších částech nebo můžete naklonovat úložiště GitHub, které obsahuje dokončené ukázkové aplikace pro všechny rychlé starty. Pokud plánujete používat Azure OpenAI, ukázkové úložiště je také strukturované jako šablona Azure Developer CLI, která vám může zřídit prostředek Azure OpenAI.
git clone https://github.com/dotnet/ai-samples.git
Interakce s daty pomocí vektorových úložišť
Vektorové úložiště 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í generačních odpovědí 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.
Seznámení s Microsoft.Extensions.VectorData.Abstractions
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í CRUD (Create-Read-Update-Delete) operací 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.
Vytvoření aplikace
Provedením následujících kroků vytvořte konzolovou aplikaci .NET, která dokáže provést následující:
- Vytvořte a naplňte vektorové úložiště generováním embeddingů pro datovou sadu.
- Vygenerujte embedding pro uživatelský dotaz
- Dotazování na úložiště vektorů pomocí výzvy uživatele k vložení
- Zobrazí relevantní výsledky z hledání vektorů.
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
Následující seznam popisuje, k čemu se jednotlivé balíčky používají v aplikaci
VectorDataAI
:-
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.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.VectorData.Abstractions
umožňuje operace Create-Read-Update-Delete (CRUD) a vyhledávací operace v úložištích vektorů. - 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
Následující seznam popisuje, k čemu se jednotlivé balíčky používají v aplikaci
VectorDataAI
:-
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.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.VectorData.Abstractions
umožňuje operace Create-Read-Update-Delete (CRUD) a vyhledávací operace v úložištích vektorů. - 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
Ukázkové úložiště GitHubu je strukturované jako šablona Azure Developer CLI (azd
), která azd
umožňuje zřídit službu Azure OpenAI a model za vás.
Z terminálu nebo příkazového řádku přejděte do
src\quickstarts\azure-openai
adresáře ukázkového úložiště.Spuštěním
azd up
příkazu zřiďte prostředky Azure OpenAI. Vytvoření služby Azure OpenAI a nasazení modelu může trvat několik minut.azd up
azd
nakonfiguruje také požadované tajné kódy uživatelů pro ukázkovou aplikaci, jako je koncový bod Azure OpenAI a název modelu.
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
ModelName
hodnotu je nutné zadat model vkládání textu OpenAI, jako jetext-embedding-3-small
nebotext-embedding-3-large
pro generování vkládání pro vektorové vyhledávání v následujících částech.
Přidání kódu aplikace
Přidejte do projektu novou třídu s názvem CloudService s následujícími vlastnostmi:
using Microsoft.Extensions.VectorData; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace VectorDataAI { internal class CloudService { [VectorStoreRecordKey] public int Key { get; set; } [VectorStoreRecordData] public string Name { get; set; } [VectorStoreRecordData] public string Description { get; set; } [VectorStoreRecordVector(384, DistanceFunction.CosineSimilarity)] public ReadOnlyMemory<float> Vector { get; set; } } }
V předchozím kódu:
- Atributy jazyka C# poskytované
Microsoft.Extensions.VectorData
ovlivňují způsob zpracování jednotlivých vlastností při použití v úložišti vektorů. - Vlastnost Vektor ukládá vygenerované zakódování, které představuje sémantický význam Název a Popis pro vyhledávání vektorů.
- Atributy jazyka C# poskytované
Do souboru Program.cs přidejte následující kód pro vytvoření datové sady, která popisuje kolekci cloudových služeb:
var cloudServices = new List<CloudService>() { new CloudService { 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 CloudService { 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 CloudService { 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 CloudService { Key=3, Name="Microsoft Entra ID", Description="Manage user identities and control access to your apps, data, and resources.." }, new CloudService { 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 CloudService { 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 var 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())
Poznámka
DefaultAzureCredential hledá přihlašovací údaje z vašich místních nástrojů. Pokud k zřízení prostředku Azure OpenAI nepoužíváte šablonu
azd
, budete muset přiřaditAzure AI Developer
roli k úč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 var 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)) .AsEmbeddingGenerator(modelId: model);
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(); var cloudServicesStore = vectorStore.GetCollection<int, CloudService>("cloudServices"); await cloudServicesStore.CreateCollectionIfNotExistsAsync(); foreach (var service in cloudServices) { service.Vector = await generator.GenerateEmbeddingVectorAsync(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 var query = "Which Azure service should I use to store my Word documents?"; var queryEmbedding = await generator.GenerateEmbeddingVectorAsync(query); var results = await cloudServicesStore.VectorizedSearchAsync(queryEmbedding, new VectorSearchOptions() { Top = 1, VectorPropertyName = "Vector" }); await foreach (var result in results.Results) { Console.WriteLine($"Name: {result.Record.Name}"); Console.WriteLine($"Description: {result.Record.Description}"); Console.WriteLine($"Vector match score: {result.Score}"); Console.WriteLine(); }
dotnet run
Spuštění aplikace pomocí příkazu:dotnet run
Aplikace vypíše nejlepší výsledek vektorového vyhledávání, což je cloudová služba, která je pro původní dotaz nejbližší. Dotaz můžete upravit a vyzkoušet různé scénáře hledání.
Vyčištění prostředků
Pokud už ukázkovou aplikaci nebo prostředky nepotřebujete, odeberte odpovídající nasazení a všechny prostředky.
azd down