Sdílet prostřednictvím


Vektorové vyhledávání ve zprostředkovateli SQL Server EF Core

Poznámka:

Podpora vektorů byla zavedena v EF Core 10.0 a je podporována pouze s SQL Serverem 2025 a novějším.

Datový typ vektoru SQL Serveru umožňuje ukládání vložených objektů, které představují význam, které lze efektivně vyhledávat z hlediska podobnosti, což podporuje úlohy AI, jako je sémantické vyhledávání a načítání rozšířené generace (RAG).

Pokud chcete datový typ použít vector , jednoduše přidejte do typu entity vlastnost SqlVector<float> .NET, která určuje dimenze následujícím způsobem:

public class Blog
{
    // ...

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

Po přidání vlastnosti a vytvoření odpovídajícího sloupce v databázi můžete začít vkládat vložené položky. Generování vkládání se provádí mimo databázi, obvykle prostřednictvím služby, a podrobnosti o tom, jak to udělat, jsou mimo rozsah této dokumentace. Knihovny .NET Microsoft.Extensions.AI však obsahují IEmbeddingGenerator, což je abstrakce nad vložené generátory, které mají implementace pro hlavní poskytovatele.

Jakmile zvolíte generátor vkládání a nastavíte ho, použijte ho ke generování vkládání a jejich vložení následujícím způsobem:

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

Nakonec použijte EF.Functions.VectorDistance() funkci k vyhledání podobnosti pro daný uživatelský dotaz:

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

Poznámka:

Integrovaná podpora v EF 10 nahrazuje předchozí rozšíření EFCore.SqlServer.VectorSearch , které umožňovalo provádět vektorové vyhledávání před zavedením datového vector typu. V rámci upgradu na EF 10 odeberte rozšíření z projektů.

Funkce VECTOR_SEARCH() (ve verzi Preview) pro přibližné vyhledávání pomocí DiskANN se v současné době nepodporuje.