경고
In-Memory 벡터 저장소 기능은 미리 보기 상태이며, 릴리스 전에 제한된 경우에도 호환성을 깨는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.
경고
의미 체계 커널 벡터 저장소 기능은 미리 보기 상태이며 릴리스 전에 제한된 상황에서도 호환성이 손상되는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.
경고
의미 체계 커널 벡터 저장소 기능은 미리 보기 상태이며 릴리스 전에 제한된 상황에서도 호환성이 손상되는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.
개요
메모리 내 벡터 저장소 커넥터는 외부 데이터베이스를 사용하지 않고 메모리에 데이터를 저장하는 의미 체계 커널에서 제공하는 벡터 저장소 구현입니다. 이 벡터 저장소는 프로토타입 시나리오 또는 고속 메모리 내 작업이 필요한 경우에 유용합니다.
커넥터의 특징은 다음과 같습니다.
| 기능 영역 | 지원 |
|---|---|
| 컬렉션이 다음으로 매핑됩니다. | 메모리 내 사전 |
| 지원되는 키 속성 형식 | 비교할 수 있는 모든 형식 |
| 지원되는 데이터 속성 형식 | 모든 형식 |
| 지원되는 벡터 속성 형식 |
|
| 지원되는 인덱스 형식 | 플랫 |
| 지원되는 거리 함수 |
|
| 지원되는 필터 조건 |
|
| 레코드에서 여러 벡터를 지원합니다. | 예 |
| 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']")
서비스 예정
추가 정보는 곧 제공될 예정입니다.