A Affine é uma biblioteca Python para fornecer uma interface uniforme e estruturada para vários bancos de dados de vetores de apoio e aproximar as bibliotecas de vizinhas mais próximas. Ele permite que objetos simples do tipo dataclass descrevam coleções juntamente com uma sintaxe de consulta de alto nível para fazer pesquisa de vetor filtrada.
Para bancos de dados vetoriais, atualmente suporta:
Para o modo local, as seguintes bibliotecas aproximadas mais próximas são suportadas:
Nota: Este projeto é muito semelhante ao VectordB-ATM, que parece não ser mais mantido.
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 )
) Uma noção fundamental de afins são as classes Engine . Todas essas classes estão em conformidade com a mesma API para intercambiplas (com exceção de algumas restrições específicas do motor que são mencionadas abaixo). Existem dois tipos amplos de motores
LocalEngine : isso faz pesquisas mais próximas na máquina de execução e suporta uma variedade de bibliotecas para o backing mais próximo do vizinho (elas são chamadas de back -end do mecanismo local).
Motores de banco de dados vetoriais: são motores que se conectam a um serviço de banco de dados vetorial, como QDRANT, teatro ou pinecone.
Os bancos de dados vetoriais atualmente suportados são:
| Banco de dados | Aula | Argumentos construtores | Notas |
|---|---|---|---|
| QDRANT | affine.engine.QdrantEngine | host: str HostName para usarport: int porta para usar | - |
| Tecelava | affine.engine.WeaviateEngine | host: str HostName para usarport: int porta para usar | - |
| Pinecone | affine.engine.PineconeEngine | api_key: Union[str, None] chave da API do Pinecone. Se não for fornecido, ele será lido da variável de ambiente Pinecone_API_KEY.spec: Union[ServerlessSpec, PodSpec, None] o objeto PodSpec ou ServerlessSpec. Se não for fornecido, um ServerlessSpec será criado a partir das variáveis de ambiente Pinecone_cloud e Pinecone_region. | O motor Pinecone tem a restrição de que toda coleção deve conter exatamente um atributo vetorial. |
A aula LocalEngine fornece uma interface para fazer a pesquisa de vizinhos mais próxima na máquina de execução, suportando uma variedade de bibliotecas para o backing mais próximo do vizinho. Qual é especificado pelo argumento backend ao construtor. Por exemplo, para usar annoy :
from affine . engine . local import LocalEngine , AnnoyBackend
db = LocalEngine ( backend = AnnoyBackend ( n_tress = 10 ))As opções e configurações para os vários back -ends suportados são os seguintes:
| Biblioteca | Aula | Argumentos construtores | Notas |
|---|---|---|---|
| Ingênuo/Numpy | affine.engine.local.NumPyBackend | - | - |
| Scikit-Learn Kdtree | affine.engine.local.KDTreeBackend | Argumentos de palavra -chave que são passados diretamente para sklearn.neighbors.KDTree | - |
| irritar | affine.engine.local.AnnoyBackend | n_trees: int número de árvores para usarn_jobs: int padrão para -1 | - |
| FAISS | affine.engine.local.FAISSBackend | index_factory_str: str | - |
| PynNDescent | affine.engine.local.PyNNDescentBackend | Argumentos de palavra -chave que são passados diretamente para pynndescent.NNDescent | - |