Векторный поиск
Предупреждение
В настоящее время поиск вектора Azure Cosmos DB находится в предварительной версии. В результате при использовании API векторного поиска EF будет создано предупреждение "экспериментального API",EF9103
которое должно быть отложено. API и возможности могут измениться в критическом смысле в будущем.
Azure Cosmos DB теперь предлагает предварительную версию поддержки поиска сходства векторов. Векторный поиск является основной частью некоторых типов приложений, включая ИИ, семантический поиск и другие. Azure Cosmos DB позволяет хранить векторы непосредственно в документах вместе с остальными данными, что означает, что вы можете выполнять все запросы к одной базе данных. Это может значительно упростить архитектуру и удалить необходимость дополнительного выделенного решения векторной базы данных в стеке. Дополнительные сведения о поиске векторов Azure Cosmos DB см. в документации.
Чтобы использовать векторный поиск, необходимо сначала зарегистрировать в функции предварительной версии. Затем определите политики векторов в контейнере, чтобы определить, какие свойства JSON в документах содержат векторы и векторные сведения для этих свойств (измерения, тип данных, функция расстояния).
После правильной настройки контейнера добавьте свойство vector в модель в путь, определенный в политике контейнеров, и настройте его в 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();
Наконец, используйте функцию EF.Functions.VectorDistance()
в запросах LINQ для выполнения поиска сходства векторов:
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
данных.