Affine - это библиотека Python для предоставления равномерного и структурированного интерфейса для различных векторных баз данных поддержки и приблизительных библиотек ближайшего соседа. Это позволяет простым данным, похожим на DataClass, описывать коллекции вместе с синтаксисом запросов высокого уровня для поиска фильтрованного векторного поиска.
Для векторных баз данных он в настоящее время поддерживает:
Для локального режима поддерживаются следующие приблизительные библиотеки ближайшего соседа:
Примечание. Этот проект очень похож на Vectb-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 для Interchangeabillity (за исключением нескольких специфических для двигателя ограничений, которые упоминаются ниже). Есть два широких типа двигателей
LocalEngine : Это делает ближайший соседский поиск на выполняющей машине и поддерживает различные библиотеки для ближайшего соседнего исследования (они называются бэкэнд местного двигателя).
Двигатели векторной базы данных: это двигатели, которые подключаются к службе векторной базы данных, такие как Qdrant, Weaviate или Pinecone.
В настоящее время поддерживаемые векторные базы данных:
| База данных | Сорт | Аргументы конструктора | Примечания |
|---|---|---|---|
| Qdrant | affine.engine.QdrantEngine | host: str HostName для использованияport: int port для использования | - |
| Укоренившись | affine.engine.WeaviateEngine | host: str HostName для использованияport: int port для использования | - |
| Pinecone | affine.engine.PineconeEngine | api_key: Union[str, None] api -ключ Pinecone. Если не предоставлено, он будет прочитан из переменной среды pinecone_api_key.spec: Union[ServerlessSpec, PodSpec, None] объект PodSpec или ServerlessSpec. Если не будет предоставлено, ServerlessSpec будет создан из переменных среды pinecone_cloud и pinecone_region. | Двигатель 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 количество деревьев для использованияn_jobs: int по умолчанию на -1 | - |
| Файсс | affine.engine.local.FAISSBackend | index_factory_str: str | - |
| Pynndescent | affine.engine.local.PyNNDescentBackend | Ключевые аргументы, которые передаются непосредственно в pynndescent.NNDescent | - |