Affine هي مكتبة Python لتوفير واجهة موحدة ومنظمة لمختلف قواعد بيانات ناقلات الدعم وأقرب المكتبات الجارية. يتيح كائنات شبيهة بسيطة تشبه 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 )
) فكرة أساسية عن Affine هي فصول Engine . تتوافق جميع هذه الفئات مع نفس واجهة برمجة التطبيقات (API) لنفس API لـ InterchangeAbillity (باستثناء عدد قليل من القيود الخاصة بالمحرك والتي يتم ذكرها أدناه). هناك نوعان واسعان من المحركات
LocalEngine : هذا يقوم بأقرب بحث على الجوار على آلة التنفيذ ، ويدعم مجموعة متنوعة من المكتبات لأقرب الأبحاث الجيران (وتسمى هذه الواجهة الخلفية للمحرك المحلي).
محركات قاعدة بيانات Vector: هذه محركات تتصل بخدمة قاعدة بيانات المتجهات ، مثل QDrant أو Weaviate أو Pinecone.
قواعد بيانات المتجهات المدعومة حاليًا هي:
| قاعدة البيانات | فصل | حجج المنشئ | ملحوظات |
|---|---|---|---|
| Qdrant | affine.engine.QdrantEngine | host: str للاستخدامport: int للاستخدام | - |
| Weaviate | affine.engine.WeaviateEngine | host: str للاستخدامport: int للاستخدام | - |
| كوز الصنوبر | affine.engine.PineconeEngine | api_key: Union[str, None] Pinecone API Key. إذا لم يتم توفيرها ، فسيتم قراءتها من متغير البيئة 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 ))الخيارات والإعدادات للعديد من الخلفية المدعومة هي كما يلي:
| مكتبة | فصل | حجج المنشئ | ملحوظات |
|---|---|---|---|
| ساذج/نومبي | 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 | - |