Freigeben über


Vektorsuche im SQL Server EF Core-Anbieter

Hinweis

Die Vektorunterstützung wurde in EF Core 10.0 eingeführt und wird nur mit SQL Server 2025 und höher unterstützt.

Der SQL Server-Vektordatentyp ermöglicht das Speichern von Einbettungen, bei denen es sich um eine Darstellung der Bedeutung handelt, die effizient nach Ähnlichkeit durchsucht werden kann, sodass KI-Workloads wie semantische Suche und Generierung von Abruferweiterungen (RETRIEVAL-Augmented Generation, RAG) unterstützt werden können.

Um den vector Datentyp zu verwenden, fügen Sie einfach eine .NET-Eigenschaft vom Typ SqlVector<float> zu Ihrem Entitätstyp hinzu, und geben Sie die Dimensionen wie folgt an:

public class Blog
{
    // ...

    [Column(TypeName = "vector(1536)")]
    public SqlVector<float> Embedding { get; set; }
}

Nachdem Ihre Eigenschaft hinzugefügt wurde und die entsprechende Spalte in der Datenbank erstellt wurde, können Sie mit dem Einfügen von Einbettungen beginnen. Die Einbettungsgenerierung erfolgt außerhalb der Datenbank, in der Regel über einen Dienst, und die Details zu diesem Zweck sind für diese Dokumentation außerhalb des Gültigkeitsbereichs. Die .NET-Microsoft.Extensions.AI-Bibliotheken enthalten IEmbeddingGeneratorjedoch eine Abstraktion über Einbettungsgeneratoren mit Implementierungen für die wichtigsten Anbieter.

Nachdem Sie ihren Einbettungsgenerator ausgewählt und eingerichtet haben, verwenden Sie ihn, um Einbettungen zu generieren und wie folgt einzufügen.

IEmbeddingGenerator<string, Embedding<float>> embeddingGenerator = /* Set up your preferred embedding generator */;

var embedding = await embeddingGenerator.GenerateVectorAsync("Some text to be vectorized");
context.Blogs.Add(new Blog
{
    Name = "Some blog",
    Embedding = new SqlVector<float>(embedding)
});
await context.SaveChangesAsync();

Verwenden Sie schließlich die EF.Functions.VectorDistance() Funktion, um die Ähnlichkeitssuche für eine bestimmte Benutzerabfrage auszuführen:

var sqlVector = new SqlVector<float>(await embeddingGenerator.GenerateVectorAsync("Some user query to be vectorized"));
var topSimilarBlogs = context.Blogs
    .OrderBy(b => EF.Functions.VectorDistance("cosine", b.Embedding, sqlVector))
    .Take(3)
    .ToListAsync();

Hinweis

Die integrierte Unterstützung in EF 10 ersetzt die vorherige EFCore.SqlServer.VectorSearch-Erweiterung , die die Durchführung der Vektorsuche vor der Einführung des vector Datentyps erlaubte. Entfernen Sie im Rahmen des Upgrades auf EF 10 die Erweiterung aus Ihren Projekten.

Die VECTOR_SEARCH() Funktion (in der Vorschau) für die ungefähre Suche mit DiskANN wird derzeit nicht unterstützt.