Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Vektordatabaser lagrar och hanterar inbäddningar av vektorer. Inbäddningar är numeriska representationer av data som bevarar semantisk betydelse. Ord, dokument, bilder, ljud och andra typer av data kan alla vektoriseras. Du kan använda inbäddningar för att hjälpa en AI-modell att förstå innebörden av indata så att den kan utföra jämförelser och transformeringar, till exempel sammanfatta text, hitta kontextuellt relaterade data eller skapa bilder från textbeskrivningar.
Du kan till exempel använda en vektordatabas för att:
- Identifiera liknande bilder, dokument och låtar baserat på deras innehåll, teman, känslor och format.
- Identifiera liknande produkter baserat på deras egenskaper, funktioner och användargrupper.
- Rekommendera innehåll, produkter eller tjänster baserat på användarinställningar.
- Identifiera de bästa möjliga alternativen från en stor pool med alternativ för att uppfylla komplexa krav.
- Identifiera dataavvikelser eller bedrägliga aktiviteter som skiljer sig från dominerande eller normala mönster.
Förstå vektorsökning
Vektordatabaser ger vektorsökningsfunktioner för att hitta liknande objekt baserat på deras dataegenskaper i stället för exakta matchningar i ett egenskapsfält. Vektorsökning fungerar genom att analysera vektorrepresentationerna av dina data som du skapade med hjälp av en AI-inbäddningsmodell, till exempel Azure OpenAI-inbäddningsmodeller. Sökprocessen mäter avståndet mellan datavektorerna och frågevektorn. De datavektorer som är närmast din frågevektor är de som är mest lika semantiskt.
De flesta moderna databasprodukter stöder vektorsökning vid sidan av traditionell frågekörning. Detta är fallet med Azure SQL/SQL Server, Azure Cosmos DB, PostgreSQL och många andra viktiga produkter. Som ett alternativ finns det ett brett utbud av dedikerade, specialiserade vektordatabasprodukter. Dessa produkter är mycket optimerade för att utföra vektorsökning och installeras vanligtvis tillsammans med en traditionell databas uteslutande för att hantera vektorsökningsarbetsbelastningar.
Arbetsflöden för vektorsökning med .NET och OpenAI
Vektordatabaser och deras sökfunktioner är särskilt användbara i RAG-mönster arbetsflöden med Azure OpenAI. Med det här mönstret kan du utöka DIN AI-modell med ytterligare semantiskt omfattande kunskaper om dina data. Ett vanligt AI-arbetsflöde med hjälp av vektordatabaser innehåller följande steg:
- Skapa inbäddningar för dina data med en OpenAI-inbäddningsmodell.
- Lagra och indexera inbäddningarna i en vektordatabas eller söktjänst.
- Konvertera användarprompter från ditt program till inbäddningar.
- Kör en vektorsökning mellan dina data och jämför inbäddningen av användarprompten med inbäddningarna i databasen.
- Använd en språkmodell som gpt-4o för att sammanställa ett användarvänligt slutförande från vektorsökningsresultatet.
Ett praktiskt exempel på det här flödet finns i självstudien Implement Azure OpenAI med RAG med hjälp av vektorsökning i en .NET-app.
Andra fördelar med RAG-mönstret är:
- Generera kontextuellt relevanta och korrekta svar på användarfrågor från AI-modeller.
- Överkomma LLM-tokengränser – det tunga arbetet görs genom databasvektorsökning.
- Minska kostnaderna från frekvent finjustering av uppdaterade data.
Microsoft. Extensions.VectorData-bibliotek
Om du vill använda vektorsökning från .NET kan du använda din vanliga databasdrivrutin eller SDK utan att behöva något ytterligare bibliotek eller API. På SQL Server kan till exempel vektorsökning utföras i T-SQL när du använder standarddrivrutinen för .NET, SqlClient. Men att komma åt vektorsökning på det här sättet är ofta ganska låg-nivå, kräver omfattande arbete för att hantera serialisering/deserialisering, och den resulterande koden är inte överförbar mellan databaser.
Alternativt Microsoft. Extensions.VectorData-biblioteket ger ett enhetligt lager abstraktioner för interaktion med vektorlager i .NET.
Viktiga abstraktioner
Här är ett minimalt exempel som täcker hela processen, skapar en samling, uppdaterar eller infogar poster och utför en vektorsökning.
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; }
}
Leverantörer av vektorlager
Paketet Microsoft.Extensions.VectorData.Abstractions definierar abstraktionerna och separata provider-paket tillhandahålla implementeringar för specifika vektordatabaser. Välj den provider som matchar din vektordatabas, till exempel Microsoft. SemanticKernel.Connectors.AzureAISearch.
Anmärkning
Trots att "SemanticKernel" ingår i paketnamnen har dessa leverantörer inget att göra med Semantic Kernel och kan användas var som helst i .NET, inklusive Agent Framework.
Alla leverantörer implementerar samma VectorStore och VectorStoreCollection<TKey,TRecord> abstrakta klasser, så att du kan växla mellan dem utan att ändra programlogik.
Tips/Råd
Använd den minnesinterna providern (Microsoft. SemanticKernel.Connectors.InMemory) under inledande utveckling/prototyper – det kräver ingen extern tjänst eller konfiguration, och du kan byta ut den mot en produktionsleverantör senare. Undvik att använda InMemory-providern för testning eftersom det kan finnas viktiga skillnader mellan den här providern och din produktionsdatabas. Överväg att använda testcontainers för att köra tester mot ditt produktionsdatabassystem.