다음을 통해 공유


SQL Server EF Core 공급자의 벡터 검색

비고

벡터 지원은 EF Core 10.0에서 도입되었으며 SQL Server 2025 이상에서만 지원됩니다.

SQL Server 벡터 데이터 형식을 사용하면 유사성을 효율적으로 검색할 수 있는 의미를 나타내는 포함을 저장할 수 있으며 의미 체계 검색 및 RAG(검색 보강 세대)와 같은 AI 워크로드를 지원합니다.

데이터 형식을 vector 사용하려면 다음과 같이 차원을 지정하여 엔터티 형식에 형식 SqlVector<float> 의 .NET 속성을 추가하면 됩니다.

public class Blog
{
    // ...

    [Column(TypeName = "vector(1536)")]
    public SqlVector<float> Embedding { get; set; }
}

속성이 추가되고 데이터베이스에 해당 열이 만들어지면 포함 삽입을 시작할 수 있습니다. 포함 생성은 일반적으로 서비스를 통해 데이터베이스 외부에서 수행되며 이 작업에 대한 세부 정보는 이 설명서의 범위를 벗어냅니다. 그러나 .NET Microsoft.Extensions.AI 라이브러리 에는 IEmbeddingGenerator주요 공급자에 대한 구현이 있는 포함 생성기에 대한 추상화입니다.

포함 생성기를 선택하고 설정했으면 포함 생성기를 사용하여 포함을 생성하고 다음과 같이 삽입합니다.

IEmbeddingGenerator<string, Embedding<float>> embeddingGenerator = /* Set up your preferred embedding generator */;

var embedding = await embeddingGenerator.GenerateVectorAsync("Some text to be vectorized");
context.Blogs.Add(new Blog
{
    Name = "Some blog",
    Embedding = new SqlVector<float>(embedding)
});
await context.SaveChangesAsync();

마지막으로 함수를 EF.Functions.VectorDistance() 사용하여 지정된 사용자 쿼리에 대해 유사성 검색을 수행합니다.

var sqlVector = new SqlVector<float>(await embeddingGenerator.GenerateVectorAsync("Some user query to be vectorized"));
var topSimilarBlogs = context.Blogs
    .OrderBy(b => EF.Functions.VectorDistance("cosine", b.Embedding, sqlVector))
    .Take(3)
    .ToListAsync();

비고

EF 10의 기본 제공 지원은 데이터 형식이 도입되기 전에 vector 벡터 검색을 수행할 수 있었던 이전 EFCore.SqlServer.VectorSearch 확장을 대체합니다. EF 10으로 업그레이드하는 과정의 일환으로 프로젝트에서 확장을 제거합니다.

VECTOR_SEARCH() DiskANN을 사용한 근사 검색에 대한 함수(미리 보기)는 현재 지원되지 않습니다.