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.