؟ Sifts هي حزمة Python بسيطة ولكنها قوية لإدارة مجموعات المستندات والاستعلام عنها بدعم من قواعد بيانات SQLite و PostgreSQL.
تم تصميمه للتعامل مع البحث الكامل للنص والبحث عن المتجهات ، مما يجعله مثاليًا للتطبيقات التي تتضمن استرجاع بيانات نصية واسعة النطاق.
تتمثل الفكرة الرئيسية في SIFTs في الاستفادة من إمكانات البحث الكاملة في SQLite و PostgreSQL وإتاحةها عبر واجهة برمجة تطبيقات موحدة. يمكنك استخدام SQLite للمشاريع الصغيرة أو التطوير والتبديل بشكل تافهة إلى PostgreSQL لتوسيع نطاق التطبيق الخاص بك.
للبحث في المتجه ، يتم حساب تشابه جيب التمام في postgresql عبر امتداد PGVector ، بينما يتم حساب تشابه SQLite في الذاكرة.
لا تأتي SIFTS مع وضع الخادم كما هو مقصود كمكتبة يتم استيرادها بواسطة تطبيقات أخرى. كان الدافع الأصلي لتطويره هو استبدال Whoosh كبحث خلفي في شبكة Gramps ، والتي تستند إلى قارورة.
يمكنك تثبيت خبلات عبر PIP:
pip install sifts import sifts
# by default, creates a new SQLite database in the working directory
collection = sifts . Collection ( name = "my_collection" )
# Add docs to the index. Can also update and delete.
collection . add (
documents = [ "Lorem ipsum dolor" , "sit amet" ],
metadatas = [{ "foo" : "bar" }, { "foo" : "baz" }], # otpional, can filter on these
ids = [ "doc1" , "doc2" ], # unique for each doc. Uses UUIDs if omitted
)
results = collection . query (
"Lorem" ,
# limit=2, # optionally limit the number of results
# where={"foo": "bar"}, # optional filter
# order_by="foo", # sort by metadata key (rather than rank)
)API مستوحاة من Chroma.
تدعم SIFTS بناء جملة البحث التالي:
andor المشغل* Wildcard (في sqlite ، مدعوم في أي مكان في مصطلح البحث ، في postgreSQL فقط في نهاية مصطلح البحث)بناء جملة البحث هو نفسه بغض النظر عن الواجهة الخلفية.
يمكن أيضًا استخدام SIFTs كمتجر متجه ، وتستخدم في محركات البحث الدلالية أو توليد REVIVAL-AGENTED (RAG) مع نماذج لغة كبيرة (LLMS).
ما عليك سوى تمرير embedding_function إلى مصنع Collection لتمكين تخزين المتجه وضبط vector_search=True في طريقة الاستعلام. على سبيل المثال ، باستخدام مكتبة Transformers الجملة ،
from sentence_transformers import SentenceTransformer
model = SentenceTransformer ( "intfloat/multilingual-e5-small" )
def embedding_function ( queries : list [ str ]):
return model . encode ( queries )
collection = sifts . Collection (
db_url = "sqlite:///vector_store.db" ,
name = "my_vector_store" ,
embedding_function = embedding_function
)
# Adding vector data to the collection
collection . add ([ "This is a test sentence." , "Another example query." ])
# Querying the collection with semantic search
results = collection . query ( "Find similar sentences." , vector_search = True ) تتطلب مجموعات PostgreSQL تثبيت وتمكين امتداد pgvector .
يمكن تحديث المستندات أو حذفها باستخدام معرفاتها.
# Update a document
collection . update ( ids = [ "document_id" ], contents = [ "Updated content" ])
# Delete a document
collection . delete ( ids = [ "document_id" ])المساهمات مرحب بها! لا تتردد في إنشاء مشكلة إذا واجهت مشاكل أو لديك اقتراح تحسين ، وحتى أفضل تقديم العلاقات العامة معها!
SIFTS مرخصة بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. انظر ملف الترخيص للحصول على التفاصيل.
غربلة سعيدة!