Векторная база данных: что это и зачем она нужна в RAG
Векторная база данных — это хранилище фрагментов текста с их векторами, которое быстро находит ближайшие к вопросу по смыслу. В RAG она отбирает куски документов для ответа модели. Базу выбирают по четырем признакам: где она стоит, сколько данных выдержит, как фильтрует по правам и какая лицензия.
Что такое векторная база данных?
Векторная база хранит записи из трех частей: идентификатор, вектор и метаданные. Вектор описывает смысл фрагмента набором чисел, его считает модель эмбеддингов. Как она это делает, я объяснил в статье «Эмбеддинг простыми словами: как ИИ находит смысл в тексте».
Обычная база вроде PostgreSQL или MySQL ищет по точному условию, например по номеру договора или фамилии сотрудника в карточке. Векторная получает вектор вопроса и возвращает несколько записей с ближайшими векторами. Слова в вопросе и во фрагменте могут не совпадать: важен смысл.
Метаданные нужны для фильтров и ссылок, поэтому в них пишут отдел, дату документа, уровень доступа и адрес исходного файла в хранилище компании. В Qdrant это поле называется payload, в Chroma его называют metadata.
Записи одного назначения собирают в коллекцию. Так набор записей называется в Qdrant, Chroma и Milvus, а в pgvector ту же роль играет обычная таблица PostgreSQL с колонкой типа vector.
Зачем векторная база нужна в RAG?
RAG сначала ищет фрагменты документов и потом передает их модели вместе с вопросом. Всю цепочку я описал в статье «RAG простыми словами: как ИИ отвечает по документам компании».
На векторной базе держится шаг поиска. Она хранит векторы всех фрагментов, получает вектор вопроса и отдает ближайшие фрагменты с метаданными. Из метаданных модель берет ссылку на документ и пункт.
Свою базу ставят, когда документы должны остаться на серверах компании или нужны свои фильтры по правам. Если облако подходит, поиск берут готовым у поставщика модели, например в Yandex AI Studio.
Восемь частей RAG-системы и место индекса среди них я разобрал в статье «RAG-система: из каких частей состоит и как ее собрать для компании». Там же есть пределы pgvector по длине вектора, здесь я их не повторяю.
Какие векторные базы данных бывают?
Код всех пяти баз открыт, часть функций Weaviate требует корпоративной лицензии. Их ставят на собственный сервер компании, а различаются они устройством, способом установки и тем, кто обслуживает базу после запуска.
- pgvector. Расширение PostgreSQL с типами vector, halfvec, bit и sparsevec, векторы лежат рядом с остальными данными. Агенту базу открывает Postgres MCP Pro, у него есть режим только чтения.
- Qdrant. Отдельная база на языке Rust, запускается одним контейнером Docker. Кроме своего сервера есть облако Qdrant Cloud и встраиваемая версия Qdrant Edge. Для агента есть Qdrant MCP Server.
- Chroma. Работает на компьютере разработчика, на своем сервере или в облаке Chroma Cloud. К ней подключается Chroma MCP Server.
- Milvus. Выходит в трех вариантах: библиотека Python Milvus Lite, один образ Docker Standalone и кластер Distributed на Kubernetes. Агенту базу открывает MCP-сервер для Milvus.
- Weaviate. Отдельная база, у которой каждый арендатор хранится в своем шарде. Часть ее функций работает только с корпоративным ключом.
Для прототипа на ноутбуке разработчика хватит Chroma или Milvus Lite, а для рабочей системы отдела я бы сравнивал pgvector, Qdrant и Milvus Standalone. Это выбор по документации. Замеров на ваших данных он не заменяет.
Чем отличаются Qdrant, Chroma, pgvector, Milvus и Weaviate?
В таблице пять баз по четырем признакам из задачи компании. Скорость поиска в таблицу не попала. Цифры скорости публикуют сами разработчики, и мерить ее нужно на своих данных.
База | Свой сервер и Россия | Объем по документации | Фильтры | Права доступа | Лицензия |
|---|---|---|---|---|---|
pgvector | своя PostgreSQL или Yandex Managed Service for PostgreSQL, расширение vector 0.8.2 | отдельной оценки нет, предел задает сервер PostgreSQL | WHERE, частичные индексы, секционирование таблицы | роли PostgreSQL и политики строк RLS | PostgreSQL License |
Qdrant | Docker на своем сервере или ВМ в российском облаке | память считают по формуле разработчика | совпадение, диапазоны, гео, полнотекст | ключ только на чтение, ключи JWT с правами на коллекцию | Apache 2.0 |
Chroma | внутри приложения или отдельный сервер | один узел, до десятков миллионов векторов при достаточной памяти | metadata и вхождение слова в текст | с версии 1.0.0 встроенной аутентификации нет | Apache 2.0 |
Milvus | Lite, Standalone или Distributed на своем железе | Standalone до 100 млн векторов, Distributed до десятков млрд | скалярные поля | пользователи, роли, группы привилегий | Apache 2.0 |
Weaviate | свой сервер | оценки в документации я не нашел | фильтр строится до векторного поиска | роли с ограничением по коллекции и арендатору | BSD-3-Clause, часть функций по корпоративной лицензии |
Для размещения в России pgvector удобнее остальных. Расширение vector входит в управляемый сервис Yandex Managed Service for PostgreSQL. Остальные четыре базы я сверял в варианте установки на свой сервер или виртуальную машину.
Версия расширения в Yandex Cloud отстает от последней, поэтому перед проектом проверьте, есть ли в ней нужная вам функция из свежего README pgvector. Параметры всех баз я сверил с официальной документацией 23 октября 2026 года.
Как разграничить доступ по отделам?
Права в векторной базе работают на двух уровнях. Первый решает, кто подключается к базе и к какой коллекции. Второй отсекает чужие фрагменты внутри коллекции фильтром по метаданным.
Qdrant
С версии 1.7.0 в Qdrant есть ключ только на чтение. С версии 1.9.0 появились ключи JWT с доступом на чтение или запись к отдельной коллекции. Агенту поиска я бы выдавал ключ только на чтение, а загрузку документов оставил отдельному процессу.
Отделы внутри одной коллекции Qdrant предлагает различать полем арендатора, например group_id. По нему строят индекс с признаком is_tenant, и каждый запрос фильтруют по этому полю.
pgvector
В pgvector права дает сам PostgreSQL. Роли ограничивают доступ к таблицам, политики защиты строк скрывают строки чужого отдела. Для изоляции арендаторов README pgvector советует секционирование по списку или отдельные таблицы.
Chroma, Milvus и Weaviate
Chroma с версии 1.0.0 встроенную аутентификацию не поставляет. Защиту ставят снаружи. Сервер Chroma я бы держал во внутренней сети за обратным прокси с TLS и проверкой доступа.
Milvus отделяет арендаторов на уровне базы, коллекции, раздела или ключа раздела. Ключ раздела по документации выдерживает миллионы арендаторов, а баз по умолчанию можно создать 64. В Weaviate права ролей сужаются до коллекции и арендатора.
Если во фрагментах есть персональные данные и база стоит в облаке, проверьте две нормы закона 152-ФЗ. Статья 12 регулирует передачу данных за рубеж, часть 5 статьи 18 требует вести первичную базу в России. Как собрать поиск целиком внутри компании, я описал в статье «Локальная LLM и RAG в компании: когда данные нельзя отдавать в облако».
Как создать векторную базу данных?
Шаги ниже даны на примере Qdrant. Для pgvector и Milvus порядок тот же, меняются только команды.
- Выберите модель эмбеддингов и запишите длину ее вектора. Коллекцию создают под эту длину, векторы другой модели в нее не загрузить.
- Запустите базу. Qdrant стартует командой
docker run -p 6333:6333 qdrant/qdrant, и документация называет такой запуск незащищенным. Ключ API и TLS включают до загрузки документов. - Создайте коллекцию с длиной вектора и мерой близости, для текста подходит косинусная.
- Постройте индексы по полям фильтра: отдел, уровень доступа, дата документа.
- Загрузите фрагменты с вектором, ссылкой на документ и метками. Текст из PDF и DOCX достает библиотека Docling, для агента у нее есть Docling MCP.
- Проверьте поиск на реальных вопросах отдела с фильтром по правам сотрудника.
В Chroma шагов меньше, потому что коллекция сама считает векторы встроенной функцией. По умолчанию это модель all-MiniLM-L6-v2, обученная на английском. Длина ее вектора 384 числа, а текст длиннее 256 словесных частей она обрезает. Для русских регламентов я бы сразу взял другую модель эмбеддингов с поддержкой русского языка.
Первую коллекцию удобно собрать на документах одного отдела, а остальные отделы подключать после того, как поиск с фильтром по правам прошел проверку на их вопросах.
Где граница между базой и человеком?
Векторная база хранит фрагменты и отдает ближайшие к вопросу. Ответов она не пишет. Смысл документов она не проверяет и о версиях не знает.
Агент через MCP-сервер видит только коллекции, на которые у его ключа есть права. Из них он получает лишь найденные фрагменты с метаданными.
Человек решает, какие документы попадут в коллекцию и какой меткой доступа пометить каждый фрагмент. Ответственный за тему удаляет старые версии, иначе поиск найдет обе. Ошибка в метке покажет сотруднику фрагмент чужого отдела, поэтому метки сверяют на выборке до запуска.
С перечнем документов и схемой прав по отделам можно прийти на разбор ИИ-базы знаний компании.
Частые вопросы
Сколько памяти нужно векторной базе?
В документации Qdrant есть пример расчета. Миллион векторов длиной 768 чисел в двух копиях займет около 6,1 ГБ оперативной памяти, с запасом 20% около 7,3 ГБ. Квантование сжимает векторы и уменьшает эту цифру, но точность после него проверяют на своих вопросах. Для Chroma документация дает правило: около 0,245 млн векторов длиной 1024 с небольшими метаданными на гигабайт памяти.
Можно ли потом перейти на другую векторную базу?
Да. Векторы зависят от модели. База их только хранит. Тексты, векторы и метаданные выгружают и загружают в новую коллекцию той же длины. Переписывать придется фильтры, права и код поиска, потому что у каждой базы свой язык запросов. При смене модели эмбеддингов пересчитывают все векторы заново.
Чем своя векторная база отличается от поискового индекса Yandex AI Studio?
Индекс Yandex AI Studio работает как сервис. После загрузки он сам режет документы на фрагменты, считает векторы и по умолчанию соединяет векторный поиск с поиском по словам. Сервер компании для этого не нужен. Своя база нужна, когда документы должны остаться на ваших серверах или фильтры по правам сложнее, чем умеет сервис.
Векторная база данных и векторный индекс — одно и то же?
Индекс входит в базу. Это структура вроде графа HNSW, которая ускоряет поиск ближайших векторов. База кроме индекса хранит сами векторы, тексты, метаданные, права и резервные копии. В pgvector индекс создают отдельной командой на таблице, а без него расширение ищет перебором всех строк.
Источники
- Qdrant. Репозиторий и лицензия Apache 2.0 (откроется в новой вкладке)
- Qdrant. Security: API key, read-only key, JWT RBAC, TLS (откроется в новой вкладке)
- Qdrant. Filtering (откроется в новой вкладке)
- Qdrant. Multitenancy (откроется в новой вкладке)
- Qdrant. Capacity planning (откроется в новой вкладке)
- Chroma. Introduction (откроется в новой вкладке)
- Chroma. Server environment variables (аутентификация в v1.0.0) (откроется в новой вкладке)
- Chroma. Single-node performance (откроется в новой вкладке)
- Chroma. Metadata filtering (откроется в новой вкладке)
- Chroma. Embedding functions (откроется в новой вкладке)
- Sentence Transformers. all-MiniLM-L6-v2 (откроется в новой вкладке)
- pgvector. README и лицензия (откроется в новой вкладке)
- PostgreSQL. Row Security Policies (откроется в новой вкладке)
- Yandex Managed Service for PostgreSQL. Расширения PostgreSQL (откроется в новой вкладке)
- Milvus. Overview of deployment options (откроется в новой вкладке)
- Milvus. RBAC (откроется в новой вкладке)
- Milvus. Multi-tenancy (откроется в новой вкладке)
- Weaviate. Лицензия репозитория (откроется в новой вкладке)
- Weaviate. Multi-tenancy (откроется в новой вкладке)
- Weaviate. Filtering (откроется в новой вкладке)
- Weaviate. RBAC (откроется в новой вкладке)
- Postgres MCP Pro (режим --access-mode=restricted) (откроется в новой вкладке)
- Yandex AI Studio. Поисковый индекс Vector Store (откроется в новой вкладке)
- Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных» (откроется в новой вкладке)
Разберем вашу задачу
Опишите процесс, который отнимает время у отдела. Первая консультация бесплатная: отвечу, подходит ли задача для агента и с чего начать.
