向量搜尋
警告
Azure Cosmos DB 向量搜尋目前為預覽版。 因此,使用 EF 的向量搜尋 API 會產生必須隱藏的「實驗 API」警告 (EF9103
)。 未來 API 和相關功能可能會有中斷式變更。
Azure Cosmos DB 目前提供向量相似性搜尋的預覽版支援。 向量搜尋是某些應用程式類型的基本部分,包括 AI、語意搜尋等。 Azure Cosmos DB 可讓您將向量直接儲存在文件的其餘數據中,這表示您可以針對單一資料庫執行所有查詢。 這可大幅簡化您的架構,並移除堆疊中額外專用向量資料庫解決方案的需求。 若要深入瞭解 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
資料,傳回前五個部落格。