다음을 통해 공유


Faiss 커넥터 사용(미리 보기)

경고

시맨틱 커널 벡터 저장소 기능은 프리뷰 상태이며, 릴리스 전에 제한된 상황에서도 비호환적인 변경이 필요한 개선이 발생할 수 있습니다.

현재 지원되지 않음

개요

Faiss Vector Store 커넥터는 외부 데이터베이스를 사용하지 않고 메모리 및 벡터의 데이터를 Faiss 인덱스에 저장하는 의미 체계 커널에서 제공하는 벡터 저장소 구현입니다. 다른 레코드 부분에는 InMemoryVectorCollection을 사용하고 검색에는 Faiss 인덱스를 사용합니다. 이 벡터 저장소는 프로토타입 시나리오 또는 고속 메모리 내 작업이 필요한 경우에 유용합니다.

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

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

시작

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

pip install semantic-kernel[faiss]

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

from semantic_kernel.connectors.faiss import FaissStore

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

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

from semantic_kernel.connectors.faiss import FaissCollection

vector_collection = FaissCollection(DataModel, collection_name="collection_name")

사용자 지정 인덱스

Faiss 커넥터는 플랫 인덱스 유형으로 제한됩니다.

Faiss 인덱스의 복잡성을 감안할 때 faiss-gpu 패키지 빌드 및 해당 인덱스 사용을 포함하여 사용자 고유의 인덱스를 자유롭게 만들 수 있습니다. 이렇게 하면 벡터 필드에 정의된 모든 메트릭이 무시됩니다. datamodel에 여러 벡터가 있는 경우 원하는 인덱스에 대해서만 사용자 지정 인덱스를 전달하고 기본 제공 인덱스를 만들 수 있으며 플랫 인덱스와 모델에 정의된 메트릭을 사용할 수 있습니다.

주목할 점은, 인덱스에 학습이 필요한 경우에는 꼭 그렇게 하십시오. 인덱스를 사용할 때마다 인덱스의 is_trained 특성에 대한 검사가 수행됩니다.

인덱스는 컬렉션의 indexes 속성에서 항상 사용할 수 있습니다(사용자 지정 또는 기본 제공). 이를 사용하여 인덱스를 가져와 원하는 작업을 수행할 수 있으므로 나중에 학습을 수행할 수 있습니다. 이에 대해 CRUD를 사용하기 전에 이 작업을 수행해야 합니다.

사용자 지정 인덱스를 넘기려면 다음 중 하나를 사용하세요.


import faiss

from semantic_kernel.connectors.faiss import FaissCollection

index = faiss.IndexHNSW(d=768, M=16, efConstruction=200) # or some other index
vector_collection = FaissCollection(
    record_type=DataModel, 
    collection_name="collection_name", 
    indexes={"vector_field_name": index}
)

또는:


import faiss

from semantic_kernel.connectors.faiss import FaissCollection

index = faiss.IndexHNSW(d=768, M=16, efConstruction=200) # or some other index
vector_collection = FaissCollection(
    record_type=DataModel,
    collection_name="collection_name", 
)
await vector_collection.ensure_collection_exists(
    indexes={"vector_field_name": index}
)
# or when you have only one vector field:
await vector_collection.ensure_collection_exists(
    index=index
)

현재 지원되지 않음