Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste início rápido, você cria um aplicativo de console do .NET para executar uma pesquisa semântica em um repositório de vetores para encontrar resultados relevantes para a consulta do usuário. Você aprenderá a gerar embeddings para prompts de usuário e usar esses embeddings para consultar o repositório de dados vetoriais.
Repositórios de vetores ou bancos de dados vetoriais são essenciais para tarefas como pesquisa semântica, RAG (geração aumentada de recuperação) e outros cenários que exigem respostas de IA generativa fundamentada. Embora bancos de dados relacionais e bancos de dados de documentos sejam otimizados para dados estruturados e semiestruturados, os bancos de dados vetores são criados para armazenar, indexar e gerenciar dados representados com eficiência como vetores de inserção. Como resultado, os algoritmos de indexação e pesquisa usados por bancos de dados de vetor são otimizados para recuperar com eficiência os dados que podem ser usados downstream em seus aplicativos.
Sobre as bibliotecas
O aplicativo usa as bibliotecas Microsoft.Extensions.AI e Microsoft.Extensions.VectorData para que você possa escrever código usando abstrações de IA em vez de um SDK específico. As abstrações de IA ajudam a criar um código flexívelmente acoplado que permite alterar o modelo de IA subjacente com alterações mínimas no aplicativo.
📦 Microsoft.Extensions.VectorData.Abstractions é uma biblioteca .NET desenvolvida em colaboração com o Kernel Semântico e o ecossistema mais amplo do .NET para fornecer uma camada unificada de abstrações para interagir com repositórios de vetores. As abstrações no Microsoft.Extensions.VectorData.Abstractions
fornecem aos autores e desenvolvedores da biblioteca a seguinte funcionalidade:
- Execute operações CRUD (create-read-update-delete) em repositórios de vetores.
- Use a pesquisa de vetor e texto em repositórios de vetores.
Observação
A biblioteca Microsoft.Extensions.VectorData.Abstractions está atualmente em prévia.
Pré-requisitos
- SDK do .NET 8.0 ou superior – Instalar o SDK do .NET 8.0.
- Uma chave de API do OpenAI para que você possa executar este exemplo.
Pré-requisitos
- SDK do .NET 8.0 ou superior – Instalar o SDK do .NET 8.
- Uma assinatura do Azure – Crie uma gratuitamente.
- CLI do Desenvolvedor do Azure (opcional) – Instalar ou atualizar a CLI do Desenvolvedor do Azure.
Criar o aplicativo
Conclua as seguintes etapas para criar um aplicativo de console .NET que pode:
- Crie e preencha um repositório de vetores gerando inserções para um conjunto de dados.
- Gere uma inserção para o prompt do usuário.
- Consulte o repositório de vetores usando a inserção de prompt do usuário.
- Exiba os resultados relevantes da pesquisa de vetor.
Em um diretório vazio no computador, use o comando
dotnet new
para criar um novo aplicativo de console:dotnet new console -o VectorDataAI
Altere o diretório para a pasta do aplicativo:
cd VectorDataAI
Instale os pacotes necessários:
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
A lista a seguir descreve cada pacote no
VectorDataAI
aplicativo:-
Azure.Identity
fornece suporte à autenticação de tokenMicrosoft Entra ID
no SDK do Azure usando classes comoDefaultAzureCredential
. -
Azure.AI.OpenAI
é o pacote oficial para usar a biblioteca .NET do OpenAI com o Serviço Azure OpenAI. -
Microsoft.Extensions.VectorData.Abstractions
habilita Create-Read-Update-Delete (CRUD) e operações de pesquisa em repositórios de vetores. -
Microsoft.SemanticKernel.Connectors.InMemory
fornece uma classe de repositório de vetores na memória para manter registros de dados de vetor consultáveis. - Microsoft.Extensions.Configuration fornece uma implementação de configuração baseada em pares chave-valor.
-
Microsoft.Extensions.Configuration.UserSecrets
é uma implementação de provedor de configuração de segredos do usuário paraMicrosoft.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
A lista a seguir descreve cada pacote no
VectorDataAI
aplicativo:-
Microsoft.Extensions.AI.OpenAI
fornece abstrações de IA para modelos ou pontos de extremidade compatíveis com OpenAI. Essa biblioteca também inclui como dependência a biblioteca oficialOpenAI
para a API do serviço OpenAI. -
Microsoft.Extensions.VectorData.Abstractions
habilita Create-Read-Update-Delete (CRUD) e operações de pesquisa em repositórios de vetores. -
Microsoft.SemanticKernel.Connectors.InMemory
fornece uma classe de repositório de vetores na memória para manter registros de dados de vetor consultáveis. - Microsoft.Extensions.Configuration fornece uma implementação de configuração baseada em pares chave-valor.
-
Microsoft.Extensions.Configuration.UserSecrets
é uma implementação de provedor de configuração de segredos do usuário paraMicrosoft.Extensions.Configuration
.
-
Abra o aplicativo no Visual Studio Code (ou no editor de sua escolha).
code .
Criar o serviço de IA
Para provisionar um serviço e um modelo do Azure OpenAI, conclua as etapas no artigo Criar e implantar um recurso do Serviço OpenAI do Azure .
Em um terminal ou prompt de comando, navegue até a raiz do diretório do projeto.
Execute os seguintes comandos para configurar o endpoint do Azure OpenAI e o nome do modelo para o aplicativo de exemplo:
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>
Configurar o aplicativo
Navegue até a raiz do projeto .NET de um terminal ou prompt de comando.
Execute os seguintes comandos para configurar sua chave de API OpenAI como um segredo para o aplicativo de exemplo:
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-OpenAI-key> dotnet user-secrets set ModelName <your-OpenAI-model-name>
Observação
Para o nome do modelo, você precisa especificar um modelo de inserção de texto, como text-embedding-3-small
ou text-embedding-3-large
para gerar inserções para pesquisa de vetor nas seções a seguir. Para obter mais informações sobre como inserir modelos, consulte Embeddings.
Adicionar o código do aplicativo
Adicione uma nova classe nomeada
CloudService
ao seu projeto com as seguintes propriedades: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; } }
Os Microsoft.Extensions.VectorData atributos, como VectorStoreKeyAttribute, influenciam como cada propriedade é tratada quando usada em um repositório de vetores. A
Vector
propriedade armazena uma inserção gerada que representa o significado semântico doDescription
valor para pesquisas de vetor.Program.cs
No arquivo, adicione o seguinte código para criar um conjunto de dados que descreve uma coleção de serviços de nuvem: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." } ];
Crie e configure uma implementação
IEmbeddingGenerator
para enviar requisições para um modelo de IA de embedding.// 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();
Observação
DefaultAzureCredential pesquisa credenciais de autenticação de suas ferramentas locais. Você precisará atribuir a
Azure AI Developer
função à conta usada para entrar no Visual Studio ou na CLI do Azure. Para obter mais informações, consulte Autenticar-se nos serviços de IA do Azure com .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();
Crie e preencha um repositório de vetores com os dados do serviço de nuvem. Use a implementação
IEmbeddingGenerator
para criar e atribuir um vetor de inserção para cada registro nos dados do serviço de nuvem:// 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); }
As inserções são representações numéricas do significado semântico para cada registro de dados, o que as torna compatíveis com recursos de pesquisa de vetor.
Crie uma inserção para uma consulta de pesquisa e use-a para executar uma pesquisa de vetor no repositório de vetores:
// 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}"); }
Use o comando
dotnet run
para executar o aplicativo:dotnet run
O aplicativo imprime o resultado superior da pesquisa de vetor, que é o serviço de nuvem mais relevante para a consulta original. Você pode modificar a consulta para experimentar diferentes cenários de pesquisa.
Limpar os recursos
Caso não precise mais deles, exclua o recurso do Azure OpenAI e as implantações de modelo.
- No Portal do Azure, navegue até o recurso OpenAI do Azure.
- Selecione o recurso do Azure OpenAI e selecione Excluir.