Dela via


Vektorsökning i SQL Server EF Core-providern

Anmärkning

Vektorstöd introducerades i EF Core 10.0 och stöds endast med SQL Server 2025 och senare.

Sql Server-vektordatatypen gör det möjligt att lagra inbäddningar, vilket är en representation av innebörden som effektivt kan sökas efter likheter, vilket driver AI-arbetsbelastningar som semantisk sökning och hämtningsförhöjd generation (RAG).

Om du vill använda vector datatypen lägger du helt enkelt till en .NET-egenskap av typen SqlVector<float> till din entitetstyp och anger dimensionerna enligt följande:

public class Blog
{
    // ...

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

När egenskapen har lagts till och motsvarande kolumn har skapats i databasen kan du börja infoga inbäddningar. Inbäddningsgenereringen görs utanför databasen, vanligtvis via en tjänst, och informationen för att göra detta ligger utanför omfånget för den här dokumentationen. .NET-Microsoft.Extensions.AI-bibliotekenIEmbeddingGeneratorinnehåller dock , vilket är en abstraktion över inbäddningsgeneratorer som har implementeringar för de större leverantörerna.

När du har valt inbäddningsgeneratorn och konfigurerat den använder du den för att generera inbäddningar och infoga dem på följande sätt

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

Använd EF.Functions.VectorDistance() slutligen funktionen för att utföra likhetssökning efter en viss användarfråga:

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

Anmärkning

Det inbyggda stödet i EF 10 ersätter det tidigare EFCore.SqlServer.VectorSearch-tillägget , som gjorde det möjligt att utföra vektorsökning innan vector datatypen introducerades. Som en del av uppgraderingen till EF 10 tar du bort tillägget från dina projekt.

Funktionen VECTOR_SEARCH() (i förhandsversion) för ungefärlig sökning med DiskANN stöds för närvarande inte.