Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Vectordatabases slaan vector-insluitingen op en beheren. Insluitingen zijn numerieke weergaven van gegevens die semantische betekenis behouden. Woorden, documenten, afbeeldingen, audio en andere typen gegevens kunnen allemaal worden gevectoriseerd. U kunt insluitingen gebruiken om een AI-model te helpen de betekenis van invoer te begrijpen, zodat deze vergelijkingen en transformaties kan uitvoeren, zoals het samenvatten van tekst, het vinden van contextgerelateerde gegevens of het maken van afbeeldingen op basis van tekstbeschrijvingen.
U kunt bijvoorbeeld een vectordatabase gebruiken om het volgende te doen:
- Identificeer vergelijkbare afbeeldingen, documenten en nummers op basis van hun inhoud, thema's, sentimenten en stijlen.
- Identificeer vergelijkbare producten op basis van hun kenmerken, functies en gebruikersgroepen.
- Inhoud, producten of services aanbevelen op basis van gebruikersvoorkeuren.
- Identificeer de beste mogelijke opties uit een grote groep keuzes om te voldoen aan complexe vereisten.
- Identificeer gegevensafwijkingen of frauduleuze activiteiten die niet hetzelfde zijn als overheersende of normale patronen.
Vectorzoekopdrachten begrijpen
Vectordatabases bieden vectorzoekmogelijkheden om vergelijkbare items te vinden op basis van hun gegevenskenmerken in plaats van door exacte overeenkomsten in een eigenschappenveld. Vectorzoekopdrachten werken door de vectorweergaven van uw gegevens te analyseren die u hebt gemaakt met behulp van een AI-insluitmodel, zoals de Azure OpenAI-insluitingsmodellen. Het zoekproces meet de afstand tussen de gegevensvectoren en uw queryvector. De gegevensvectoren die zich het dichtst bij uw queryvector bevinden, zijn semantisch het meest vergelijkbaar.
De meeste moderne databaseproducten ondersteunen vectorzoekopdrachten naast traditionele query's; Dit is het geval bij Azure SQL/SQL Server, Azure Cosmos DB, PostgreSQL en veel andere belangrijke producten. Als alternatief bestaat er een breed scala aan speciale vectordatabaseproducten. Deze producten zijn zeer geoptimaliseerd om vectorzoekopdrachten uit te voeren en worden doorgaans naast een traditionele database uitsluitend geïnstalleerd om vectorzoekworkloads te verwerken.
Vectorzoekwerkstromen met .NET en OpenAI
Vectordatabases en de bijbehorende zoekfuncties zijn vooral handig in RAG-patroon werkstromen met Azure OpenAI. Met dit patroon kunt u uw AI-model uitbreiden met aanvullende semantisch rijke kennis van uw gegevens. Een algemene AI-werkstroom met behulp van vectordatabases omvat de volgende stappen:
- Maak insluitingen voor uw gegevens met behulp van een OpenAI-insluitmodel.
- Sla de insluitingen op en indexeer deze in een vectordatabase of zoekservice.
- Converteer gebruikersprompts van uw toepassing naar insluitingen.
- Voer een vectorzoekopdracht uit op uw gegevens, waarbij de embedding van de gebruikersprompt wordt vergeleken met de embeddings in uw database.
- Gebruik een taalmodel zoals gpt-4o om een gebruiksvriendelijke voltooiing van de vectorzoekresultaten samen te stellen.
Zie de zelfstudie Implement Azure OpenAI met RAG en vectorzoekopdrachten in een .NET-app voor een praktijkvoorbeeld van deze workflow.
Andere voordelen van het RAG-patroon zijn:
- Contextafhankelijk relevante en nauwkeurige antwoorden genereren op gebruikersprompts van AI-modellen.
- Limieten voor LLM-token overwinnen: het zware werk wordt uitgevoerd via de vectorzoekopdracht in de database.
- Verlaag de kosten door regelmatig af te stemmen op bijgewerkte gegevens.
De Microsoft. Extensions.VectorData-bibliotheek
Als u vectorzoekopdrachten wilt gebruiken vanuit .NET, kunt u uw reguliere databasestuurprogramma of SDK gebruiken zonder dat hiervoor extra bibliotheek of API nodig is. Op SQL Server kan bijvoorbeeld vectorzoekopdrachten worden uitgevoerd in T-SQL wanneer u het standaardstuurprogramma voor .NET, SqlClient, gebruikt. Het op deze manier benaderen van vectorzoekopdrachten is echter vaak op een laag niveau, vereist nogal wat handelingen voor de afhandeling van serialisatie/deserialisatie en de resulterende code is niet draagbaar tussen databases.
Als alternatief biedt het 📦 Microsoft.Extensions.VectorData.Abstractions pakket een uniforme abstractielaag voor interactie met vectoropslagruimtes in .NET. Met deze abstracties kunt u eenvoudige code op hoog niveau schrijven op basis van één API en het onderliggende vectorarchief verwisselen met minimale wijzigingen in uw toepassing.
De bibliotheek biedt de volgende belangrijke mogelijkheden:
- Naadloze .NET typetoewijzing: wijs uw .NET-type direct toe aan de database, vergelijkbaar met een object/relatie mapper.
- Unified data model: Definieer uw gegevensmodel eenmaal met behulp van .NET kenmerken en gebruik dit in elk ondersteund vectorarchief.
- CRUD-bewerkingen: records maken, lezen, bijwerken en verwijderen in een vectorarchief.
- Vector en hybride zoekopdracht: query's uitvoeren op semantische overeenkomsten met behulp van vectorzoekopdrachten of vector- en tekstzoekopdrachten combineren voor hybride zoekopdrachten.
- Beheer van het genereren van embeddings: configureer uw generator voor het genereren van embeddings eenmalig en laat de bibliotheek het genereren transparant verwerken.
- Verzamelingsbeheer: verzamelingen (tabellen of indexen) maken, vermelden en verwijderen in een vectorarchief.
Microsoft. Extensions.VectorData is ook de bouwsteen voor extra lagen op een hoger niveau die moeten communiceren met vectordatabases. Bijvoorbeeld de Microsoft. Extensions.DataIngestion.
Microsoft.Extensions.VectorData en Entity Framework Core
Als u al Entity Framework Core gebruikt om toegang te krijgen tot uw database, is het waarschijnlijk dat uw databaseprovider vectorzoekopdrachten al ondersteunt en LINQ-query's kunnen worden gebruikt om dergelijke zoekopdrachten uit te drukken; Microsoft. Extensions.VectorData is niet noodzakelijkerwijs nodig in dergelijke toepassingen. De meeste toegewezen vectordatabases worden echter niet ondersteund door EF Core en Microsoft. Extensions.VectorData kan een goede ervaring bieden voor het werken met die. Daarnaast kunt u zich ook in een situatie bevinden waarin u zowel EF als Microsoft.Extensions.VectorData in dezelfde toepassing gebruikt, bijvoorbeeld wanneer u een extra laag zoals Microsoft.Extensions.DataIngestion gebruikt.
Sleutelabstracties
Hier is een minimaal end-to-end voorbeeld dat een verzameling maakt, records upsert en een vectorzoekopdracht uitvoert.
using Microsoft.Extensions.AI;
using Microsoft.Extensions.VectorData;
using Microsoft.SemanticKernel.Connectors.InMemory;
// Configure an embedding generator to transform text to embeddings
IEmbeddingGenerator<string, Embedding<float>> embeddingGenerator = ...;
// Create a vector store and get a collection with the embedding generator
var vectorStore = new InMemoryVectorStore(new() { EmbeddingGenerator = embeddingGenerator });
var collection = vectorStore.GetCollection<int, Movie>("movies");
await collection.EnsureCollectionExistsAsync();
// Upsert some records
await collection.UpsertAsync(new Movie { Key = 1, Title = "The Lion King", Description = "An animated film about a young lion prince" });
await collection.UpsertAsync(new Movie { Key = 2, Title = "Inception", Description = "A thief who steals corporate secrets through dream-sharing technology" });
await collection.UpsertAsync(new Movie { Key = 3, Title = "Finding Nemo", Description = "A fish searches the ocean for his lost son" });
// Search for movies similar to the query text
await foreach (var result in collection.SearchAsync("animals in the wild", top: 2))
{
Console.WriteLine($"{result.Record.Title} (score: {result.Score})");
}
// Define the data model
class Movie
{
[VectorStoreKey]
public int Key { get; set; }
[VectorStoreData]
public string Title { get; set; }
[VectorStoreVector(Dimensions: 1536)]
public string Description { get; set; }
}
Vectoropslagproviders
Het Microsoft.Extensions.VectorData.Abstractions-pakket definieert de abstracties en afzonderlijke providerpakketten bieden implementaties voor specifieke vectordatabases. Kies de provider die overeenkomt met uw vectordatabase, bijvoorbeeld Microsoft. SemanticKernel.Connectors.AzureAISearch.
Opmerking
Ondanks de opname van 'SemanticKernel' in de pakketnamen, hebben deze providers niets te maken met Semantic Kernel en zijn ze overal in .NET bruikbaar, waaronder Agent Framework.
Alle providers implementeren dezelfde VectorStore en VectorStoreCollection<TKey,TRecord> abstracte klassen, zodat u ertussen kunt schakelen zonder de toepassingslogica te wijzigen.
Aanbeveling
Gebruik de provider in het geheugen (Microsoft. SemanticKernel.Connectors.InMemory) tijdens de eerste ontwikkeling/prototypen: er is geen externe service of configuratie vereist en u kunt deze later verwisselen voor een productieprovider. Vermijd het gebruik van de InMemory-provider voor testen, omdat er belangrijke verschillen kunnen zijn tussen deze provider en uw productiedatabase. Overweeg om testcontainers te gebruiken om tests uit te voeren op uw productiedatabasesysteem.