? SIFTS - это простой, но мощный пакет Python для управления и запроса коллекций документов с поддержкой баз данных SQLite и PostgreSQL.
Он предназначен для эффективного обработки полнотекстового поиска и поиска в вектор, что делает его идеальным для приложений, которые включают в себя крупномасштабные текстовые данные.
Основная идея SIFTS состоит в том, чтобы использовать встроенные полнотекстовые возможности поиска в SQLite и PostgreSQL и сделать их доступными через унифицированный Pythonic API. Вы можете использовать SQLite для небольших проектов или разработки и тривиально переключиться на PostgreSQL для масштабирования вашего приложения.
Для поиска вектора сходство косинуса вычисляется в PostgreSQL через расширение PGVector, в то время как с сходством SQLite рассчитывается в памяти.
SIFTS не поставляется с режимом сервера, так как он предназначен как библиотека, которая будет импортирована другими приложениями. Первоначальная мотивация для его разработки заключалась в том, чтобы заменить свисей в качестве бэкэнда поиска в Gramps Web, которая основана на колбе.
Вы можете установить SIFTS через 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 поддерживает следующий синтаксис поиска:
and операторor оператор* Подстановка (в SQLite, поддерживается в любом месте поискового термина, в PostgreSQL только в конце поискового термина)Синтаксис поиска одинаково независимо от бэкэнда.
SIFTS также можно использовать в качестве векторного хранилища, используемого для семантических поисковых систем или поколения, выявленного в поисках (RAG) с большими языковыми моделями (LLMS).
Просто передайте embedding_function на завод Collection , чтобы включить векторное хранилище и установить vector_search=True в методе запроса. Например, используя библиотеку трансформаторов предложений,
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 лицензируется по лицензии MIT. Смотрите файл лицензии для получения подробной информации.
Счастливого просеивания!