vectordb
— это векторная база данных Pythonic, предлагающая полный набор операций CRUD (создание, чтение, обновление, удаление) и надежные возможности масштабирования, включая сегментирование и репликацию. Его легко развернуть в различных средах: от локальных до локальных и облачных. vectordb
предоставляет именно то, что вам нужно — ни больше, ни меньше. Это свидетельство эффективного Pythonic-дизайна без чрезмерного проектирования, что делает его экономичным, но мощным решением для всех ваших потребностей.
vectordb
использует мощные возможности поиска DocArray, а также масштабируемость, надежность и возможности обслуживания Jina. Вот в чем волшебство: DocArray служит движком, управляющим логикой векторного поиска, а Jina гарантирует эффективное и масштабируемое обслуживание индексов. Эта синергия завершается надежной, но удобной для пользователя базой данных векторов — это vectordb
для вас.
pip установить векторную базу данных
vectordb
локальноНачните с определения схемы документа с помощью синтаксиса класса данных DocArray:
из docarray import BaseDocfrom docarray.typing import NdArrayclass ToyDoc(BaseDoc): text: str = '' встраивание: NdArray[128]
Выберите предварительно созданную базу данных (например, InMemoryExactNNVectorDB
или HNSWVectorDB
) и примените схему:
from docarray import DocListimport numpy as npfrom Vectordb import InMemoryExactNNVectorDB, HNSWVectorDB# Укажите путь к вашей рабочей областиdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./workspace_path')# Индексируйте список документов со случайными встраиваниямиdoc_list = [ToyDoc(text=f'toy doc) {я}', embedding=np.random.rand(128)) for i in range(1000)]db.index(inputs=DocList[ToyDoc](doc_list))# Выполните поисковый запросquery = ToyDoc(text='query', embedding=np .random.rand(128))результаты = db.search(inputs=DocList[ToyDoc]([query]), limit=10)# Распечатываем совпадения для m в результатах[0].matches: print(m)
Поскольку мы выполнили один запрос, results
содержат только один элемент. Результаты поиска ближайших соседей удобно хранить в атрибуте .matches
.
vectordb
как с услугой vectordb
спроектирован так, чтобы его можно было легко использовать в качестве службы, поддерживающей протоколы связи gRPC
, HTTP
и Websocket
.
На стороне сервера вы можете запустить службу следующим образом:
с db.serve(protocol='grpc', порт=12345, реплики=1, осколки=1) в качестве сервиса: service.block()
Эта команда запускает vectordb
как службу на порту 12345
, используя протокол gRPC
с 1
репликой и 1
сегментом.
На стороне клиента вы можете получить доступ к сервису с помощью следующих команд:
из векторной базы данных import Client# Создайте экземпляр клиента, подключенного к серверу. На практике замените 0.0.0.0 на IP-адрес сервера.client = Client[ToyDoc](address='grpc://0.0.0.0:12345')# Выполните поисковый запросresults = client.search(inputs=DocList[ToyDoc] ([запрос]), лимит=10)
Это позволяет выполнять поисковый запрос, получая результаты непосредственно от удаленного сервиса vectordb
.
vectordb
в облаке Jina AI Cloud Вы можете легко развернуть свой экземпляр vectordb
в Jina AI Cloud, что обеспечит доступ к вашей базе данных из любого места.
Начните с внедрения экземпляра или класса базы данных в файл Python:
# example.pyfrom docarray import BaseDocfrom Vectordb import InMemoryExactNNVectorDBdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./vectordb') # обратите внимание, что `db` — это экземпляр, который мы хотим обслуживать, если __name__ == '__main__':# ВАЖНО: убедитесь, что чтобы защитить эту часть кода, используйте __main__ Guardwith db.serve() как сервис:service.block()
Затем выполните следующие действия для развертывания вашего экземпляра:
Если вы еще этого не сделали, зарегистрируйте учетную запись Jina AI Cloud.
Используйте командную строку jc
для входа в свою учетную запись Jina AI Cloud:
jc вход в систему
Разверните свой экземпляр:
Vectordb развертывание --db пример:db
После развертывания используйте клиент vectordb
для доступа к назначенной конечной точке:
из векторного импорта Client# замените идентификатор на идентификатор развернутой БД, как показано на снимке экрана вышеc = Client(address='grpcs://ID.wolf.jina.ai')
Затем вы можете просмотреть, приостановить, возобновить или удалить развернутые базы данных с помощью команды jc
:
jcloud list ID
jcloud pause ID
или jcloud resume ID
jcloud remove ID
Векторные базы данных служат сложными хранилищами для вложений, отражающими суть семантического сходства между разнородными объектами. Эти базы данных облегчают поиск сходства среди множества мультимодальных типов данных, открывая путь к новой эре поиска информации. Обеспечивая контекстуальное понимание и обогащая результаты генерации, векторные базы данных значительно повышают производительность и полезность моделей изучения языка (LLM). Это подчеркивает их ключевую роль в развитии приложений для науки о данных и машинного обучения.
И использование локальной библиотеки, и взаимодействие клиент-сервер в vectordb
используют один и тот же API. Это обеспечивает функции index
, search
, update
и delete
:
index
: принимает DocList
для индексации.
search
: принимает DocList
пакетных запросов или один BaseDoc
как один запрос. Он возвращает один или несколько результатов, каждый из которых имеет атрибуты matches
и scores
отсортированные по relevance
.
delete
: принимает DocList
документов для удаления из индекса. Обязателен только атрибут id
, поэтому обязательно отслеживайте indexed
IDs
, если вам нужно удалить документы.
update
: принимает DocList
документов для обновления в индексе. Операция update
заменит indexed
документ тем же индексом с атрибутами и полезной нагрузкой из входных документов.
Вы можете обслуживать vectordb
и получать к ней доступ с клиента со следующими параметрами:
протокол: протокол обслуживания. Это может быть gRPC
, HTTP
, websocket
или их комбинация, представленная в виде списка. По умолчанию — gRPC
.
порт: порт доступа к службе. Может быть списком портов для каждого предоставленного протокола. По умолчанию — 8081.
Рабочая область: путь, по которому в VectorDB сохраняются необходимые данные. По умолчанию — «.». (текущий каталог).
Вы можете установить два параметра масштабирования при обслуживании или развертывании баз данных векторов с помощью vectordb
:
Шарды: количество осколков данных. Это уменьшает задержку, поскольку vectordb
гарантирует, что документы индексируются только в одном из сегментов. Поисковые запросы отправляются во все шарды, а результаты объединяются.
Реплики: количество реплик БД. vectordb
использует алгоритм RAFT для синхронизации индекса между репликами каждого сегмента. Это повышает доступность сервиса и пропускную способность поиска, поскольку несколько реплик могут параллельно отвечать на большее количество поисковых запросов, позволяя при этом выполнять операции CRUD. Примечание. В развертываниях JCloud количество реплик установлено равным 1. Мы работаем над включением репликации в облаке.
Вот параметры для каждого типа VectorDB
:
Эта база данных выполняет исчерпывающий поиск по встраиваниям и имеет ограниченные параметры конфигурации:
workspace
: папка, в которой сохраняются необходимые данные.
InMemoryExactNNVectorDB[MyDoc](workspace='./vectordb')InMemoryExactNNVectorDB[MyDoc].serve(workspace='./vectordb')
В этой базе данных используется алгоритм HNSW (Hierarchical Navigable Small World) из HNSWLib для приблизительного поиска ближайших соседей. Он предоставляет несколько вариантов конфигурации:
workspace
: указывает каталог, в котором хранятся и сохраняются необходимые данные.
Кроме того, HNSWVectorDB предлагает набор конфигураций, которые позволяют настраивать производительность и точность алгоритма поиска ближайшего соседа. Подробное описание этих конфигураций можно найти в README HNSWLib:
space
: указывает метрику сходства, используемую для пространства (варианты: «l2», «ip» или «cosine»). По умолчанию — «l2».
max_elements
: устанавливает начальную емкость индекса, которую можно динамически увеличивать. По умолчанию — 1024.
ef_construction
: этот параметр управляет соотношением скорости и точности во время построения индекса. По умолчанию — 200.
ef
: этот параметр управляет соотношением времени и точности запроса. По умолчанию — 10.
M
: Этот параметр определяет максимальное количество исходящих соединений в графе. По умолчанию — 16.
allow_replace_deleted
: если установлено значение True
, это позволяет заменять удаленные элементы вновь добавленными. По умолчанию установлено значение False
.
num_threads
: устанавливает количество потоков по умолчанию, которые будут использоваться во время операций index
и search
. Значение по умолчанию — 1.
vectordb
включает простой интерфейс командной строки для обслуживания и развертывания вашей базы данных:
Описание | Команда |
---|---|
Обслуживайте свою БД локально | vectordb serve --db example:db |
Разверните свою БД в Jina AI Cloud | vectordb deploy --db example:db |
Удобный интерфейс: в vectordb
простота является ключевым моментом. Его интуитивно понятный интерфейс предназначен для пользователей разного уровня знаний.
Минималистичный дизайн: в vectordb
есть все необходимое, без лишней сложности. Это обеспечивает плавный переход от локального к серверному и облачному развертыванию.
Полная поддержка CRUD: от индексации и поиска до обновления и удаления, vectordb
охватывает весь спектр операций CRUD.
БД как услуга: используйте возможности протоколов gRPC, HTTP и Websocket с помощью vectordb
. Это позволяет вам обслуживать ваши базы данных и эффективно выполнять операции вставки или поиска.
Масштабируемость. Ощутите всю мощь возможностей развертывания vectordb
, включая надежные функции масштабируемости, такие как сегментирование и репликация. Уменьшите задержку обслуживания с помощью сегментирования, а репликация повысит доступность и пропускную способность.
Развертывание в облаке. С Jina AI Cloud развертывание вашего сервиса в облаке становится проще простого. Скоро появятся новые варианты развертывания!
Бессерверные возможности: vectordb
можно развернуть в бессерверном режиме в облаке, обеспечивая оптимальное использование ресурсов и доступность данных в соответствии с вашими потребностями.
Несколько алгоритмов ANN: vectordb
предлагает разнообразные реализации алгоритмов приближенного ближайшего соседа (ANN). Вот текущие предложения и новые интеграции на горизонте:
InMemoryExactNNVectorDB (точный поиск NN): реализует простой алгоритм поиска ближайшего соседа.
HNSWVectorDB (на основе HNSW): использует HNSWLib.
Будущее Vector Database выглядит светлым, и у нас амбициозные планы! Вот краткий обзор функций, которые мы сейчас разрабатываем:
Дополнительные алгоритмы поиска ИНС. Наша цель — поддерживать еще более широкий спектр алгоритмов поиска ИНС.
Расширенные возможности фильтрации. Мы работаем над улучшением наших решений поиска ANN для поддержки расширенной фильтрации.
Настраиваемость: мы стремимся сделать vectordb
легко настраиваемой, что позволит разработчикам Python легко адаптировать ее поведение к своим конкретным потребностям.
Расширение бессерверных возможностей: мы стремимся расширить бессерверные возможности vectordb
в облаке. Хотя в настоящее время мы поддерживаем масштабирование от 0 до 1 реплики, наша цель — расширить это число до реплик от 0 до N.
Расширенные возможности развертывания. Мы активно работаем над упрощением развертывания vectordb
на различных облачных платформах с широким спектром возможностей.
Нужна помощь с vectordb
? Заинтересованы в его использовании, но вам нужны определенные функции для удовлетворения ваших уникальных потребностей? Не стесняйтесь обращаться к нам. Присоединяйтесь к нашему сообществу Discord, чтобы общаться с нами и другими участниками сообщества.
Проект VectorDB поддерживается Jina AI и лицензируется Apache-2.0. Вклад сообщества приветствуется! Если у вас есть идея относительно новой функции или улучшения, мы будем рады услышать ваше мнение. Мы всегда ищем способы сделать vectordb
более удобной и эффективной.