Sdílet prostřednictvím


Vektorové vyhledávání

Upozorňující

Vektorové vyhledávání ve službě Azure Cosmos DB je aktuálně ve verzi Preview. V důsledku toho použití rozhraní API ef pro vektorové vyhledávání vygeneruje upozornění "experimentálního rozhraní API",EF9103 které je potřeba potlačit. Rozhraní API a možnosti se můžou v budoucnu měnit zásadními způsoby.

Azure Cosmos DB teď nabízí podporu náhledu vyhledávání vektorové podobnosti. Vektorové vyhledávání je základní součástí některých typů aplikací, včetně AI, sémantického vyhledávání a dalších. Azure Cosmos DB umožňuje ukládat vektory přímo do dokumentů společně se zbytkem dat, což znamená, že můžete provádět všechny dotazy na jednu databázi. To může výrazně zjednodušit architekturu a odstranit potřebu dalšího vyhrazeného řešení vektorové databáze ve vašem zásobníku. Další informace o vektorovém vyhledávání ve službě Azure Cosmos DB najdete v dokumentaci.

Pokud chcete použít vektorové vyhledávání, musíte se nejprve zaregistrovat do funkce Preview. Pak definujte zásady vektorů v kontejneru, abyste zjistili, které vlastnosti JSON v dokumentech obsahují vektory a vektorové informace pro tyto vlastnosti (dimenze, datový typ, funkce vzdálenosti).

Jakmile je kontejner správně nastavený, přidejte do modelu vektorovou vlastnost v cestě, kterou jste definovali v zásadách kontejneru, a nakonfigurujte ho pomocí EF jako vektoru:

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);
    }
}

V tuto chvíli je váš model nakonfigurovaný. Vložení vektorových dat se provádí stejně jako jakýkoli jiný datový typ pomocí EF:

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

Nakonec pomocí EF.Functions.VectorDistance() funkce v dotazech LINQ proveďte vyhledávání vektorové podobnosti:

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();

Tím se vrátí pět prvních pěti blogů na základě podobnosti jejich Vector vlastnosti a externě zadaných anotherVector dat.