ベクトル検索
警告
Azure Cosmos DB ベクトル検索は現在プレビュー段階にあります。 そのため、EF のベクトル検索 API を使用すると、抑制する必要がある "テスト段階の API" 警告 (EF9103
) が生成されます。 API と機能は、将来的に破壊的な方法で変化する可能性があります。
Azure Cosmos DB では、ベクトル類似性検索のプレビュー サポートが提供されるようになりました。 ベクトル検索は、AI、セマンティック検索など、一部のアプリケーションの種類の基本的な部分です。 Azure Cosmos DB を使用すると、残りのデータと共にベクターをドキュメントに直接格納できます。つまり、1 つのデータベースに対してすべてのクエリを実行できます。 これにより、アーキテクチャが大幅に簡素化され、スタック内の追加の専用ベクター データベース ソリューションが不要になります。 Azure Cosmos DB ベクトル検索について詳しくは、 ドキュメントをご覧ください。
ベクトル検索を使用するには、まずプレビュー機能に登録する必要があります。 次に、 コンテナーにベクトル ポリシーを定義 し、ドキュメント内のどの JSON プロパティにベクトルが含まれるか、それらのプロパティのさまざまなベクトル関連情報 (ディメンション、データ型、距離関数) を指定します。
コンテナーが適切に設定されたら、コンテナー ポリシーで定義したパス内のモデルにベクトル プロパティを追加し、EF をベクトルとして構成します。
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);
}
}
この時点で、モデルが構成されます。 ベクトル データの挿入は、EF を使用した他のデータ型と同じように行われます。
float[] vector = /* generate vector data from text, image, etc. */
context.Add(new Blog { Vector = vector });
await context.SaveChangesAsync();
最後に、LINQ クエリで EF.Functions.VectorDistance()
関数を使用して、ベクトルの類似性検索を実行します。
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();
これにより、Vector
プロパティと外部から提供された anotherVector
データの類似性に基づいて、上位 5 つのブログが返されます。
.NET