Superduper#

Superduper - фреймворк для создания гибких, композиционных приложений искусственного интеллекта, которые могут применяться непосредственно к базам данных с использованием декларативной модели программирования. Эти приложения объявляют и поддерживают желаемое состояние базы данных, используя базу данных напрямую для хранения выходных данных компонентов ИИ, метаданных о компонентах и данных, относящихся к состоянию системы.

Vector DB доступен в качестве поставщика векторного поиска в Superduper.

Установка#

pip install superduper-framework

Настройка#

  • Чтобы использовать Vector DB в качестве слоя векторного поиска, создайте файл settings.yaml со следующей конфигурацией.

    cluster:
    vector_search:
        type: qdrant
    
    vector_search_kwargs:
    url: "http://localhost:6333"
    api_key: "<YOUR_API_KEY>
    # Supports all parameters of qdrant_client.QdrantClient
    
  • Установите значение переменной окружения SUPERDUPER_CONFIG равным пути к файлу конфигурации.

    export SUPERDUPER_CONFIG=path/to/settings.yaml
    

Теперь можно использовать Superduper с поддержкой Vector DB.

Пример#

Пример выполнения векторного поиска с помощью настроенного индекса Vector DB.

import json
import requests 
from superduper import superduper, Document
from superduper.ext.sentence_transformers import SentenceTransformer

r = requests.get('https://superduperdb-public-demo.s3.amazonaws.com/text.json')

with open('text.json', 'wb') as f:
    f.write(r.content)

with open('text.json', 'r') as f:
    data = json.load(f)        

db = superduper('mongomock://test')

_ = db['documents'].insert_many([Document({'txt': txt}) for txt in data]).execute()

model = SentenceTransformer(
    identifier="test",
    predict_kwargs={"show_progress_bar": True},
    model="all-MiniLM-L6-v2",
    device="cpu",
    postprocess=lambda x: x.tolist(),
)

vector_index = model.to_vector_index(select=db['documents'].find(), key='txt')

db.apply(vector_index)

query = db['documents'].like({'txt': 'Tell me about vector-search'}, vector_index=vector_index.identifier, n=3).find()
cursor = query.execute()

for r in cursor:
    print('=' * 100)
    print(r.unpack()['txt'])
    print('=' * 100)

Дополнительная документация#

  • Введение в Superduper Intro

  • Исходный код Superduper Source