Что такое клиент в ChromaDB

Давайте начнём знакомство с векторной базой данных ChromaDB. Первое понятие, с которым мы должны познакомиться — это понятие клиента ChromaDB. Когда мы начинаем работать с ChromaDB, всё начинается с клиента.

Что такое клиент в ChromaDB? ChromaDB Client — это не пользователь, а программный интерфейс либо SDK для работы с векторной базой. У ChromaDB есть некий движок. Для того чтобы ваш код на Python мог общаться с этим движком, существует клиент, с которым мы можем взаимодействовать.

Это посредник между вашим Python-кодом и движком ChromaDB. Клиент ChromaDB — это объект, через который вы управляете всем: создаёте коллекции, добавляете данные, ищете, удаляете и так далее. Клиент — это ваша точка входа во всю систему ChromaDB.

Если посмотреть в общей архитектуре, то ChromaDB-клиент общается с движком векторной базы данных. В него приходят эмбеддинги от модели искусственного интеллекта. Он эти эмбеддинги сравнивает и ищет в базе данных.

Когда мы рассматриваем RAG-систему, мы промпт, ChromaDB-клиент и Vector Store изображаем просто как векторная база данных, единым элементом. Но если погрузиться глубже, то мы увидим, что ChromaDB Client — это отдельная сущность, и Vector Store — это отдельная сущность.

На этом слайде вы можете видеть простой пример, как можно создать клиент ChromaDB. Мы импортируем библиотеку ChromaDB и создаём клиент. Сразу скажу, существует более одного способа создать клиент. Об этих способах мы остановимся немного позже.

Общий способ такой: ChromaDB Client создаёт и получает существующие коллекции. О коллекциях мы тоже поговорим позже. Через клиента и созданную коллекцию мы уже можем взаимодействовать с данными: добавлять их туда и так далее.

Клиент отвечает за:

  • соединение с базой данных ChromaDB
  • управление коллекциями
  • маршрутизацию операций — все запросы на добавление данных, поиск, удаление и обновление направляются через клиент к движку базы данных

Клиент инкапсулирует конфигурацию, то есть скрывает сложность настройки хранилища, представляя собой простой единый интерфейс. Через клиент мы конфигурируем, где ChromaDB будет хранить данные и как они будут обрабатываться.

Типы клиентов ChromaDB

Как я и говорил ранее, клиентов ChromaDB бывает несколько типов:

  • Client — хранит все данные в оперативной памяти
  • Persistent Client — хранит данные на диске
  • HTTP Client — клиент для работы с базой данных в облаке через HTTP-запросы

Первый клиент — это клиент, который хранит данные в памяти. Это самый простой и быстрый вариант, как вы можете запустить и начать взаимодействовать с ChromaDB. Идеален для экспериментов, юнит-тестов, работы на слабых ноутбуках.

Данные хранятся в оперативной памяти (RAM), и все данные и коллекции пропадают при перезапуске процесса. Это очень важный момент. Запустили Python-скрипт, данные создались, скрипт закончил выполнение — данные автоматически удалились из оперативной памяти.

Из этого вытекают все ограничения этого способа: вы напрямую не имеете доступа к этим данным, и каждый раз после запуска приложения их нужно будет пересоздавать. Мы уже смотрели пример, как можно создать этот клиент: chromadb.Client(), и данные хранятся в памяти этого процесса.

Второй тип клиента — Persistent Client. Он хранит данные на диске. Если вы снова будете перезапускать приложение или запускать Python-скрипт, база данных остаётся в прежнем состоянии на момент предыдущего запуска.

Persistent Client — это основной способ использования, если вы разрабатываете реальные базы данных, которые будут использоваться многократно. Всё, что нужно сделать — указать путь, где хранить данные. Этот способ подходит для локальных RAG-приложений, десктопных программ, которым нужна собственная векторная база.

В общем виде использование выглядит так: мы используем не просто Client, а Persistent Client. У него есть основной атрибут path, где мы указываем папку для хранения данных. Точка означает текущую папку, где находится Python-скрипт, и ChromaDB создаст отдельную директорию для хранения данных.

Третий тип клиента — HTTP Client. Это клиент-сервер, который подключается к отдельно запущенному серверу ChromaDB. Это решение подходит для продакшена, микросервисов, распределённых систем, когда векторная база данных хранится на удалённом сервере.

Такой способ позволяет нескольким сервисам или пользователям одновременно работать с одной базой данных. Мы получаем масштабируемость — сервер ChromaDB можно масштабировать независимо от ваших приложений. Для работы нужен запущенный ChromaDB-сервер.

Сравнение клиентов и выбор решения

Persistent Client рассчитан на использование одним процессом в один момент времени. Если на продакшене вы попытаетесь использовать Persistent Client при обращении к векторной базе данных множеством клиентов, будут проблемы: процессы будут зависать, вставать в очередь, и пользователи вашего приложения будут долго ждать ответа.

Для продакшена, как правило, используется HTTP Client, который позволяет обеспечить масштабируемость приложения и возможность одновременного использования большим количеством пользователей.

Итоговое сравнение клиентов:

  • Client — RAM, память, тесты, Jupyter-ноутбуки, быстрое прототипирование
  • Persistent Client — локальный RAG, деплоймент, продакшен без сервера
  • HTTP Client — серверный продакшен, микросервисы, SaaS, совместное использование несколькими сервисами

Выбирайте соответствующий клиент для вашей ситуации, чтобы обеспечить нужные требования к работе вашей векторной базы данных.