다음을 통해 공유


레거시 의미 체계 커널 메모리 저장소

레거시 메모리 저장소 대신 벡터 저장소 추상화 사용을 권장합니다. 벡터 저장소 추상화 사용 방법에 대한 자세한 내용은 여기에서 시작합니다.

의미 체계 커널은 기본 인터페이스 Microsoft.SemanticKernel.Memory.IMemoryStore가 있는 메모리 저장소 추상화 집합을 제공합니다.

메모리 저장소 및 벡터 저장소 추상화

의미 체계 커널의 벡터 스토리지 및 검색 기능을 발전시키고 확장하기 위한 노력의 일환으로 메모리 저장소 추상화 대신 새로운 추상화 집합을 릴리스했습니다. 대체 추상화 벡터 저장소 추상화라고 합니다. 둘 다의 용도는 비슷하지만 인터페이스는 다르며 벡터 저장소 추상화는 확장된 기능을 제공합니다.

특성 레거시 메모리 저장소 벡터 저장소
기본 인터페이스 IMemoryStore VectorStore
추상화 NuGet 패키지 Microsoft.SemanticKernel.Abstractions Microsoft.Extensions.VectorData.Abstractions
명명 규칙 {Provider}MemoryStore( 예: RedisMemoryStore) {Provider}VectorStore( 예: RedisVectorStore)
레코드 추가/수정(upsert), 가져오기 및 삭제 지원
컬렉션 만들기 및 삭제 지원
벡터 검색 지원
기본 벡터 검색 인덱스 및 거리 함수 선택을 지원합니다. 아니요
레코드당 여러 벡터 지원 아니요
사용자 지정 스키마 지원 아니요
여러 벡터 형식 지원 아니요
벡터 검색에 대한 메타데이터 사전 필터링 지원 아니요
전체 데이터 세트를 클라이언트에 다운로드하고 로컬 벡터 검색을 수행하여 비벡터 데이터베이스에서 벡터 검색을 지원합니다. 아니요

사용 가능한 메모리 저장소 커넥터

의미 체계 커널은 정보를 저장하고 검색하는 데 사용할 수 있는 벡터 데이터베이스에 대한 여러 메모리 저장소 커넥터를 제공합니다. 여기에는 다음이 포함됩니다.

서비스 C# (프로그래밍 언어) 파이썬
Azure Cosmos DB for NoSQL의 벡터 데이터베이스 C# 파이썬
vCore 기반 Azure Cosmos DB for MongoDB의 벡터 데이터베이스 C# 파이썬
Azure AI 검색 C# 파이썬
Azure PostgreSQL 서버 C#
Azure SQL 데이터베이스 C#
크로마 C# 파이썬
DuckDB C#
밀부스 주 C# 파이썬
MongoDB Atlas 벡터 검색 C# 파이썬
파인콘(Pinecone) C# 파이썬
Postgres C# 파이썬
Qdrant C# 파이썬
Redis C# 파이썬
Sqlite C#
Weaviate C# 파이썬

메모리 저장소에서 벡터 저장소로 마이그레이션

메모리 저장소 추상화 사용에서 벡터 저장소 추상화로 마이그레이션하려는 경우 다양한 방법으로 이 작업을 수행할 수 있습니다.

벡터 저장소 추상화와 함께 기존 컬렉션 사용

대부분의 경우 가장 간단한 방법은 벡터 저장소 추상화만 사용하여 메모리 저장소 추상화로 만든 컬렉션에 액세스하는 것입니다. 대부분의 경우 벡터 저장소 추상화에서 사용하려는 스키마를 선택할 수 있기 때문에 가능합니다. 주요 요구 사항은 레거시 메모리 저장소 구현에서 사용한 스키마와 일치하는 데이터 모델을 만드는 것입니다.

예를 들어 Azure AI Search 메모리 저장소에서 만든 컬렉션에 액세스하려면 다음 벡터 저장소 데이터 모델을 사용할 수 있습니다.

using Microsoft.Extensions.VectorData;

class VectorStoreRecord
{
    [VectorStoreKey]
    public string Id { get; set; }

    [VectorStoreData]
    public string Description { get; set; }

    [VectorStoreData]
    public string Text { get; set; }

    [VectorStoreData]
    public bool IsReference { get; set; }

    [VectorStoreData]
    public string ExternalSourceName { get; set; }

    [VectorStoreData]
    public string AdditionalMetadata { get; set; }

    [VectorStoreVector(VectorSize)]
    public ReadOnlyMemory<float> Embedding { get; set; }
}

벡터 저장소 추상화로 메모리 저장소를 사용하여 만든 컬렉션에 액세스하는 방법에 대한 자세한 예제는 여기를 참조 하세요.

새 컬렉션 만들기

경우에 따라 새 컬렉션으로 마이그레이션하는 것이 기존 컬렉션을 직접 사용하는 것보다 바람직할 수 있습니다. 메모리 저장소에서 선택한 스키마는 특히 필터링과 관련하여 요구 사항과 일치하지 않을 수 있습니다.

예를 들어 Redis Memory 저장소는 세 개의 필드가 있는 스키마를 사용합니다.

  • 문자열 메타데이터
  • 긴 타임스탬프
  • float[] 임베딩

포함 또는 타임스탬프 이외의 모든 데이터는 메타데이터 필드에 직렬화된 json 문자열로 저장됩니다. 즉, 개별 값을 인덱싱하고 필터링할 수 없습니다. 예를 들어 ExternalSourceName을 사용하여 필터링할 수 있지만 json 문자열 내에 있는 동안에는 이 작업을 수행할 수 없습니다.

이 경우 플랫 스키마를 사용하여 데이터를 새 컬렉션으로 마이그레이션하는 것이 더 좋을 수 있습니다. 여기에는 두 가지 옵션이 있습니다. 원본 데이터에서 새 컬렉션을 만들거나 이전 데이터에서 새 컬렉션으로 데이터를 매핑하고 복사하기만 하면 됩니다. 첫 번째 옵션은 원본 데이터에서 포함을 다시 생성해야 하므로 비용이 더 많이 들 수 있습니다.

메모리 저장소 추상화로 만든 컬렉션에서 벡터 저장소 추상화로 만든 컬렉션으로 데이터를 복사하는 방법을 보여 주는 Redis를 사용하는 예제는 여기를 참조 하세요.