? Sifts adalah paket Python yang sederhana namun kuat untuk mengelola dan meminta koleksi dokumen dengan dukungan untuk database SQLite dan PostgreSQL.
Ini dirancang untuk secara efisien menangani pencarian teks lengkap dan pencarian vektor, menjadikannya ideal untuk aplikasi yang melibatkan pengambilan data teks skala besar.
Gagasan utama SIFT adalah untuk memanfaatkan kemampuan pencarian teks lengkap bawaan di SQLite dan PostgreSQL dan membuatnya tersedia melalui API Pythonic yang terpadu. Anda dapat menggunakan SQLite untuk proyek -proyek kecil atau pengembangan dan berpaling sepele ke PostgreSQL untuk skala aplikasi Anda.
Untuk pencarian vektor, kesamaan kosinus dihitung di PostgreSQL melalui ekstensi pgvektor, sedangkan dengan kesamaan SQLite dihitung dalam memori.
Sifts tidak datang dengan mode server karena dimaksudkan sebagai perpustakaan untuk diimpor oleh aplikasi lain. Motivasi asli untuk pengembangannya adalah menggantikan whoosh sebagai pencarian backend di gramps web, yang didasarkan pada flask.
Anda dapat menginstal SIFTS melalui 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 terinspirasi oleh Chroma.
Sifts mendukung sintaks pencarian berikut:
and operatoror operator* Wildcard (di SQLite, didukung di mana saja dalam istilah pencarian, di PostgreSQL hanya di akhir istilah pencarian)Sintaks pencarian adalah sama terlepas dari backend.
Sifts juga dapat digunakan sebagai toko vektor, digunakan untuk mesin pencari semantik atau generasi pengambilan-pengambilan (RAG) dengan model bahasa besar (LLM).
Cukup lulus embedding_function ke pabrik Collection untuk memungkinkan penyimpanan vektor dan atur vector_search=True dalam metode kueri. Misalnya, menggunakan perpustakaan Transformers Kalimat,
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 ) Koleksi PostgreSQL memerlukan pemasangan dan mengaktifkan ekstensi pgvector .
Dokumen dapat diperbarui atau dihapus menggunakan ID mereka.
# Update a document
collection . update ( ids = [ "document_id" ], contents = [ "Updated content" ])
# Delete a document
collection . delete ( ids = [ "document_id" ])Kontribusi dipersilakan! Jangan ragu untuk membuat masalah jika Anda mengalami masalah atau memiliki saran peningkatan, dan bahkan lebih baik mengirimkan PR bersama dengan itu!
Sifts dilisensikan di bawah lisensi MIT. Lihat file lisensi untuk detailnya.
Selamat menyaring!