다음을 통해 공유


메모리 내 커넥터 사용(미리 보기)

Warning

의미 체계 커널 벡터 저장소 기능은 미리 보기 상태이며 릴리스 전에 제한된 상황에서도 호환성이 손상되는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.

개요

메모리 내 벡터 저장소 커넥터는 외부 데이터베이스를 사용하지 않고 메모리에 데이터를 저장하는 의미 체계 커널에서 제공하는 벡터 저장소 구현입니다. 이 벡터 저장소는 프로토타입 시나리오 또는 고속 메모리 내 작업이 필요한 경우에 유용합니다.

커넥터의 특징은 다음과 같습니다.

기능 영역 지원
컬렉션이 다음으로 매핑됩니다. 메모리 내 사전
지원되는 키 속성 형식 비교할 수 있는 모든 형식
지원되는 데이터 속성 형식 모든 형식
지원되는 벡터 속성 형식 ReadOnlyMemory<float>
지원되는 인덱스 형식 플랫
지원되는 거리 함수
  • 코사인 유사도
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
지원되는 필터 조건
  • AnyTagEqualTo
  • EqualTo
레코드에서 여러 벡터를 지원합니다.
IsFilterable이 지원되는가요?
IsFullTextSearchable이 지원되나요?
StoragePropertyName이 지원되는가요? 아니요, 스토리지가 메모리 내이고 데이터 재사용이 불가능하므로 사용자 지정 이름을 적용할 수 없습니다.

시작

의미 체계 커널 코어 nuget 패키지를 프로젝트에 추가합니다.

dotnet add package Microsoft.SemanticKernel.Connectors.InMemory --prerelease

의미 체계 커널에서 제공하는 확장 메서드를 사용하여 종속성 주입 컨테이너 또는 KernelBuilder 종속성 주입 컨테이너에 IServiceCollection 사용할 수 있는 종속성 주입 컨테이너에 벡터 저장소를 추가할 수 있습니다.

using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder()
    .AddInMemoryVectorStore();
using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddInMemoryVectorStore();

InMemory Vector Store 인스턴스를 직접 생성할 수 있습니다.

using Microsoft.SemanticKernel.Connectors.InMemory;

var vectorStore = new InMemoryVectorStore();

명명된 컬렉션에 대한 직접 참조를 생성할 수 있습니다.

using Microsoft.SemanticKernel.Connectors.InMemory;

var collection = new InMemoryVectorStoreRecordCollection<string, Hotel>("skhotels");

키 및 벡터 속성 조회

기본적으로 In-Memory 벡터 저장소 커넥터는 리플렉션을 사용하여 키 및 벡터의 값을 읽습니다. 키와 벡터는 데이터 모델의 직접 속성으로 간주됩니다.

키와 벡터가 데이터 모델의 직접 속성이 아닌 구조가 있는 데이터 모델이 필요한 경우 함수를 제공하여 이러한 값을 읽을 수 있습니다.

이 기능을 사용하는 경우 벡터 차원 크기 및 거리 함수에 대한 정보를 In-Memory 벡터 저장소에 전달할 수 있도록 VectorStoreRecordDefinition 제공해야 합니다.

var collection = new InMemoryVectorStoreRecordCollection<string, MyDataModel>(
    "mydata",
    new()
    {
        VectorStoreRecordDefinition = vectorStoreRecordDefinition,
        KeyResolver = (record) => record.Key,
        VectorResolver = (vectorName, record) => record.Vectors[vectorName]
    });

private class MyDataModel
{
    public string Key { get; set; }
    public Dictionary<string, ReadOnlyMemory<float>> Vectors { get; set; }
}

개요

메모리 내 벡터 저장소 커넥터는 외부 데이터베이스를 사용하지 않고 메모리에 데이터를 저장하는 의미 체계 커널에서 제공하는 벡터 저장소 구현입니다. 이 벡터 저장소는 프로토타입 시나리오 또는 고속 메모리 내 작업이 필요한 경우에 유용합니다.

커넥터의 특징은 다음과 같습니다.

기능 영역 지원
컬렉션이 다음으로 매핑됩니다. 메모리 내 사전
지원되는 키 속성 형식 딕셔너리 키로 허용되는 모든 항목은 Python 설명서를 참조하십시오. 자세한 내용은 여기에서 확인하십시오.
지원되는 데이터 속성 형식 모든 형식
지원되는 벡터 속성 형식 list[float | int] | numpy 배열
지원되는 인덱스 형식 플랫
지원되는 거리 함수
  • 코사인 유사성
  • 코사인 거리
  • 점 제품 유사성
  • 유클리드 거리
  • 유클리드 제곱 거리
  • 맨해튼 거리
  • 해밍 거리
레코드에서 여러 벡터를 지원합니다.
is_filterable이 지원되나요?
is_full_text_searchable가 지원됩니까?

시작

의미 체계 커널 패키지를 프로젝트에 추가합니다.

pip install semantic-kernel

여기에서 저장소 및 컬렉션을 만들거나 컬렉션을 직접 만들 수 있습니다.

아래 코드 조각에서는 'DataModel'이라는 데이터 모델 클래스가 정의되어 있다고 가정합니다.

from semantic_kernel.connectors.memory.in_memory import InMemoryVectorStore

vector_store = InMemoryVectorStore()
vector_collection = vector_store.get_collection("collection_name", DataModel)

명명된 컬렉션에 대한 직접 참조를 생성할 수 있습니다.

from semantic_kernel.connectors.memory.in_memory import InMemoryCollection

vector_collection = InMemoryCollection("collection_name", DataModel)

서비스 예정

추가 정보는 곧 제공될 예정입니다.