ベクトル検索
注
ベクターのサポートは EF Core 10.0 で導入され、SQL Server 2025 以降でのみサポートされています。
SQL Server ベクター データ型を使用すると、 埋め込みを格納できます。これは、類似性を効率的に検索できる意味を表し、セマンティック検索や取得拡張生成 (RAG) などの AI ワークロードを強化します。
vectorデータ型を使用するには、エンティティ型に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 へのアップグレードの一環として、プロジェクトから拡張機能を削除します。
DiskANN での近似検索の VECTOR_SEARCH() 関数 (プレビュー段階) は現在サポートされていません。
.NET