벡터 검색
비고
벡터 지원은 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을 사용한 근사 검색에 대한 함수(미리 보기)는 현재 지원되지 않습니다.
.NET