Freigeben über


Vektorsuche

Warnung

Die Azure Cosmos DB-Vektorsuche befindet sich derzeit in der Vorschauphase. Daher generiert die Verwendung der Vektorsuch-APIs von EF eine Warnung „experimentelle API” (EF9103), die unterdrückt werden muss. Die APIs und Funktionen können sich in Zukunft ändern.

Azure Cosmos DB bietet jetzt Vorschauunterstützung für die Vektorähnlichkeitssuche. Die Vektorsuche ist ein grundlegender Bestandteil einiger Anwendungstypen, darunter KI und semantische Suche. Mit Azure Cosmos DB können Vektoren zusammen mit Ihren restlichen Daten direkt in Ihren Dokumenten gespeichert werden, was bedeutet, dass Sie alle Ihre Abfragen für eine einzelne Datenbank ausführen können. Dies kann Ihre Architektur erheblich vereinfachen und dazu führen, dass Sie ohne zusätzliche dedizierte Vektordatenbanklösung in Ihrem Stapel auskommen. Weitere Informationen zur Azure Cosmos DB-Vektorsuche finden Sie in der Dokumentation.

Um die Vektorsuche zu verwenden, müssen Sie sich zuerst für die Previewfunktion registrieren. Definieren Sie dann Vektorrichtlinien für Ihren Container, um anzugeben, welche JSON-Eigenschaften in Ihren Dokumenten Vektoren und vektorbezogene Informationen für diese Eigenschaften (Dimensionen, Datentyp, Entfernungsfunktion) enthalten.

Nachdem Ihr Container ordnungsgemäß eingerichtet wurde, fügen Sie Ihrem Modell im Pfad, den Sie in der Containerrichtlinie definiert haben, eine Vektoreigenschaft hinzu, und konfigurieren Sie ihn mit EF als Vektor:

public class Blog
{
    ...

    public float[] Vector { get; set; }
}

public class BloggingContext
{
    ...

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.Embeddings)
            .IsVector(DistanceFunction.Cosine, dimensions: 1536);
    }
}

An diesem Punkt ist Ihr Modell konfiguriert. Das Einfügen von Vektordaten erfolgt wie jeder andere Datentyp mit EF:

float[] vector = /* generate vector data from text, image, etc. */
context.Add(new Blog { Vector = vector });
await context.SaveChangesAsync();

Verwenden Sie schließlich die EF.Functions.VectorDistance() Funktion in LINQ-Abfragen, um die Vektorgleichheitssuche auszuführen:

float[] anotherVector = /* generate vector data from text, image, etc. */
var blogs = await context.Blogs
    .OrderBy(s => EF.Functions.VectorDistance(s.Vector, anotherVector))
    .Take(5)
    .ToListAsync();

Dies gibt die fünf wichtigsten Blogs basierend auf der Ähnlichkeit ihrer Vector Eigenschaft und den extern bereitgestellten anotherVector Daten zurück.