Affine은 다양한 백킹 벡터 데이터베이스에 균일하고 구조화 된 인터페이스를 제공하고 가장 가까운 이웃 라이브러리에 대략적인 파이썬 라이브러리입니다. 간단한 Dataclass와 같은 객체가 필터링 된 벡터 검색을위한 고급 쿼리 구문과 함께 수집을 설명 할 수 있습니다.
벡터 데이터베이스의 경우 현재 지원합니다.
로컬 모드의 경우 다음과 같은 대략적인 가장 가까운 이웃 라이브러리가 지원됩니다.
참고 :이 프로젝트는 더 이상 유지되지 않는 Vectordb-Orm과 매우 유사합니다.
pip install affine-vectordb
# or `pip install "affine-vectordb[qdrant]"` for qdrant support
# `pip install "affine-vectordb[weaviate]"` for weaviate support
# `pip install "affine-vectordb[pinecone]"` for pinecone support from affine import Collection , Vector , Filter , Query
# Define a collection
class MyCollection ( Collection ):
vec : Vector [ 3 ] # declare a 3-dimensional vector
# support for additional fields for filtering
a : int
b : str
db = LocalEngine ()
# Insert vectors
db . insert ( MyCollection ( vec = [ 0.1 , 0.0 , - 0.5 ], a = 1 , b = "foo" ))
db . insert ( MyCollection ( vec = [ 1.3 , 2.1 , 3.6 ], a = 2 , b = "bar" ))
db . insert ( MyCollection ( vec = [ - 0.1 , 0.2 , 0.3 ], a = 3 , b = "foo" ))
# Query vectors
result : list [ MyCollection ] = (
db . query ( MyCollection )
. filter ( MyCollection . b == "foo" )
. similarity ([ 2.8 , 1.8 , - 4.5 ])
. limit ( 1 )
) 아핀 의 기본 개념은 Engine 클래스입니다. 그러한 모든 클래스는 교환에 대한 동일한 API를 준수합니다 (아래에 언급 된 몇 가지 엔진 별 제한을 제외하고). 두 가지 유형의 엔진이 있습니다
LocalEngine : 이것은 실행 기계에서 가장 가까운 이웃 검색을 수행하며 가장 가까운 이웃 검색을위한 다양한 라이브러리를 지원합니다 (이는 로컬 엔진의 백엔드 라고합니다).
벡터 데이터베이스 엔진 : Qdrant, Weaviate 또는 Pinecone과 같은 벡터 데이터베이스 서비스에 연결되는 엔진입니다.
현재 지원되는 벡터 데이터베이스는 다음과 같습니다.
| 데이터 베이스 | 수업 | 생성자 인수 | 메모 |
|---|---|---|---|
| qdrant | affine.engine.QdrantEngine | host: str hostnameport: int 포트를 사용할 수 있습니다 | - |
| 직조 | affine.engine.WeaviateEngine | host: str hostnameport: int 포트를 사용할 수 있습니다 | - |
| 피네콘 | affine.engine.PineconeEngine | api_key: Union[str, None] PENECONE API 키. 제공되지 않으면 환경 변수 PENECONE_API_KEY에서 읽습니다.spec: Union[ServerlessSpec, PodSpec, None] PODSPEC 또는 ServerlessSpec 객체. 제공되지 않으면 환경 변수에서 ServerlessSpec 생성됩니다. | Pinecone 엔진에는 모든 컬렉션에 정확히 하나의 벡터 속성이 포함되어야한다는 제한이 있습니다. |
LocalEngine 클래스는 실행 기계에서 가장 가까운 이웃 검색을위한 인터페이스를 제공하여 가장 가까운 이웃 검색을위한 다양한 라이브러리를 지원합니다. 어느 것이 생성자에 대한 backend 인수에 의해 지정됩니다. 예를 들어, annoy 사용 :
from affine . engine . local import LocalEngine , AnnoyBackend
db = LocalEngine ( backend = AnnoyBackend ( n_tress = 10 ))다양한 지원되는 백엔드의 옵션 및 설정은 다음과 같습니다.
| 도서관 | 수업 | 생성자 인수 | 메모 |
|---|---|---|---|
| 순진한/numpy | affine.engine.local.NumPyBackend | - | - |
| Scikit-Learn Kdtree | affine.engine.local.KDTreeBackend | sklearn.neighbors.KDTree 로 직접 전달되는 키워드 인수 | - |
| 짜증나게 하다 | affine.engine.local.AnnoyBackend | n_trees: int int trees를 사용할 나무 수n_jobs: int 기본값 -1 | - |
| Faiss | affine.engine.local.FAISSBackend | index_factory_str: str | - |
| 핀 디스크 | affine.engine.local.PyNNDescentBackend | pynndescent.NNDescent 에 직접 전달되는 키워드 인수 | - |