다음을 통해 공유


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

경고

In-Memory 벡터 저장소 기능은 미리 보기 상태이며, 릴리스 전에 제한된 경우에도 호환성을 깨는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.

경고

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

경고

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

개요

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

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

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

시작

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

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

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

using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder();
kernelBuilder.Services
    .AddInMemoryVectorStore();
using Microsoft.Extensions.DependencyInjection;
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 InMemoryCollection<string, Hotel>("skhotels");

개요

경고

In-Memory 벡터 저장소는 Python 람다 함수로 표현할 수 있는 사용자 지정 필터를 지원하며, 이러한 함수는 주 애플리케이션과 동일한 프로세스에서 실행되므로 임의의 코드를 실행할 수 있습니다. 허용되는 특정 작업을 필터링하지만 LLM 입력을 포함하여 신뢰할 수 없는 원본에 의해 필터를 설정해서는 안 됩니다. 자세한 내용은 필터링 섹션을 참조하세요.

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

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

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

시작

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

pip install semantic-kernel

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

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

from semantic_kernel.connectors.in_memory import InMemoryVectorStore

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

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

from semantic_kernel.connectors.in_memory import InMemoryCollection

vector_collection = InMemoryCollection(record_type=DataModel, collection_name="collection_name")

Filtering

경고

In-Memory 벡터 저장소는 Python 람다 함수로 표현할 수 있는 사용자 지정 필터를 지원하며, 이러한 함수는 주 애플리케이션과 동일한 프로세스에서 실행되므로 임의의 코드를 실행할 수 있습니다. 허용되는 특정 작업을 필터링하지만 LLM 입력을 포함하여 신뢰할 수 없는 원본에 의해 필터를 설정해서는 안 됩니다.

In-Memory 커넥터는 필터 보안을 위해 허용 목록 접근 방식을 사용합니다. 필터 식에는 다음 작업만 허용됩니다.

허용되는 작업

카테고리 허용되는 작업
비교 ==, !=, <, <=, >, >=, innot in, isis not
부울 연산 and, ornot
데이터 접근 특성 액세스(예: x.field), 첨자 액세스(예: x['field']), 슬라이싱
리터럴 상수, 목록, 튜플, 집합, 사전
기본 산술 연산 +, -, *, /, %//

허용되는 함수

필터 식에는 다음과 같은 기본 제공 함수 및 메서드를 사용할 수 있습니다.

  • 형식 변환: str, int, floatbool
  • 집계: len, abs, min, max, sum, any, all
  • 문자열 메서드: lower, upper, stripstartswith, endswithcontains
  • Dictionary 메서드: get, keys, values, items

예시

# Simple equality filter
results = await collection.search(vector, filter="lambda x: x.category == 'electronics'")

# Numeric comparison
results = await collection.search(vector, filter="lambda x: x.price < 100")

# Boolean combination
results = await collection.search(vector, filter="lambda x: x.in_stock and x.rating >= 4.0")

# String method
results = await collection.search(vector, filter="lambda x: x.name.startswith('A')")

# Membership test
results = await collection.search(vector, filter="lambda x: x.status in ['active', 'pending']")

서비스 예정

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