Azure Cosmos DB では、ベクター類似性検索がサポートされるようになりました。 ベクトル検索は、AI、セマンティック検索など、一部のアプリケーションの種類の基本的な部分です。 Azure Cosmos DB を使用すると、残りのデータと共にベクターをドキュメントに直接格納できます。つまり、1 つのデータベースに対してすべてのクエリを実行できます。 これにより、アーキテクチャが大幅に簡素化され、スタック内の追加の専用ベクター データベース ソリューションが不要になります。 Azure Cosmos DB ベクトル検索について詳しくは、 ドキュメントをご覧ください。
Vector プロパティは、 OnModelCreating
内で構成できます。
public class Blog
{
...
public float[] Vector { get; set; }
}
public class BloggingContext
{
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>(b =>
{
b.Property(b => b.Vector).IsVectorProperty(DistanceFunction.Cosine, dimensions: 1536);
b.HasIndex(x => x.Vector).IsVectorIndex(VectorIndexType.Flat);
});
}
}
この時点で、モデルが構成されます。 ベクトル データの挿入は、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 つのブログが返されます。
ハイブリッド検索
ベクター類似性検索は、VectorDistance
(逆ランク Fusion) 関数を使用してFullTextScore
関数とRRF
関数の結果を組み合わせることにより、同じクエリ内のフルテキスト検索 (ハイブリッド検索) で使用できます。
EF モデルでフルテキスト検索のサポートを有効にする方法と、クエリでハイブリッド検索を使用する方法については、 ドキュメント を参照してください。
.NET