다음을 통해 공유


벡터 검색

Warning

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 데이터의 유사성을 기준으로 상위 5개 블로그가 반환됩니다.