向量搜尋
備註
向量支援是在 EF Core 10.0 中引進的,而且只有 SQL Server 2025 和更新版本才支援。
SQL Server 向量資料類型允許儲存 內嵌,這些內嵌是可以有效搜尋相似性的意義表示,為語意搜尋和檢索增強生成 (RAG) 等 AI 工作負載提供支援。
若要使用 vector 資料類型,只需將 type SqlVector<float> 的 .NET 屬性新增至實體類型,並指定維度,如下所示:
public class Blog
{
// ...
[Column(TypeName = "vector(1536)")]
public SqlVector<float> Embedding { get; set; }
}
新增屬性並在資料庫中建立對應的欄後,您就可以開始插入內嵌。 內嵌產生是在資料庫外部完成,通常是透過服務,執行此動作的詳細資料超出本檔的範圍。 不過, .NET Microsoft.Extensions.AI 程式庫 包含 IEmbeddingGenerator,這是內嵌產生器的抽象概念,具有主要提供者的實作。
選擇並設定嵌入產生器後,使用它來產生嵌入並按如下方式插入它們
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();
最後,使用函數 EF.Functions.VectorDistance() 對給定的使用者查詢執行相似性搜尋:
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();
備註
EF 10 中的內建支援取代了先前的 EFCore.SqlServer.VectorSearch 延伸模組,這允許在引進資料類型之前執行 vector 向量搜尋。 在升級至 EF 10 的過程中,請從專案中移除延伸模組。
VECTOR_SEARCH()目前不支援使用 DiskANN 進行近似搜尋的功能(預覽版)。