Содержание
Векторная база данных хранит эмбеддинги — числовые представления смысла текста, изображений или товаров — и быстро находит ближайшие к запросу. Она нужна для семантического поиска, рекомендаций и AI-ассистентов, которые отвечают по вашим документам. Если проект уже работает на PostgreSQL, в большинстве случаев хватает расширения pgvector, а отдельная векторная база оправдана на очень больших объёмах.
Разберём, как работает векторный поиск, когда хватит pgvector, когда нужно отдельное решение и как сделать поиск точнее.
Что такое эмбеддинги и векторный поиск?
Эмбеддинг — это вектор из сотен или тысяч чисел, который модель строит по тексту так, что близкие по смыслу тексты получают близкие векторы. Векторный поиск находит записи, чьи векторы ближе всего к вектору запроса, — поэтому он понимает «как вернуть деньги» и «оформить возврат» как один вопрос.
Где применяют векторный поиск:
- AI-ассистенты по документам — поиск нужных фрагментов перед ответом модели;
- семантический поиск на сайте и в базе знаний;
- рекомендации — похожие товары, статьи, вакансии;
- поиск дублей — одинаковые обращения в поддержку или карточки товаров;
- классификация — распределение заявок по темам.
Как построить ассистента по своим документам, мы разбирали в статье RAG: AI-ассистент по своим документам.
Когда хватит pgvector?
pgvector хватает, если у вас уже есть PostgreSQL, векторов до нескольких миллионов и нужно совмещать векторный поиск с обычными фильтрами — по правам доступа, категории, дате. Главное преимущество — данные, права и векторы живут в одной базе и одной транзакции.
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE document_chunks (
id bigserial PRIMARY KEY,
document_id bigint NOT NULL,
content text NOT NULL,
embedding vector(1536) NOT NULL
);
CREATE INDEX ON document_chunks USING hnsw (embedding vector_cosine_ops);
SELECT id, content
FROM document_chunks
WHERE document_id IN (SELECT id FROM documents WHERE team_id = 42)
ORDER BY embedding <=> $1
LIMIT 5;
Подробнее о выборе и настройке базы — в статьях PostgreSQL или MySQL и индексы в PostgreSQL.
Фото: Unsplash
Когда нужна отдельная векторная база?
Отдельная векторная база нужна, когда векторов десятки и сотни миллионов, запросов очень много и важна задержка в единицы миллисекунд, либо когда нужны функции, которых нет в pgvector: распределённое хранение, встроенный гибридный поиск, многотенантность на уровне коллекций.
| Критерий | pgvector | Специализированная векторная база |
|---|---|---|
| Объём | До нескольких миллионов векторов | Сотни миллионов и больше |
| Инфраструктура | Уже есть | Отдельный сервис или облако |
| Фильтры по обычным данным | SQL, в той же транзакции | Метаданные, синхронизация с основной базой |
| Согласованность данных | Полная | Нужна синхронизация |
| Масштабирование | Вертикальное, реплики | Горизонтальное |
Как сделать векторный поиск точнее?
Точность векторного поиска зависит не столько от базы, сколько от подготовки данных: как документы нарезаны на фрагменты, какая модель строит эмбеддинги и совмещается ли векторный поиск с обычным полнотекстовым. Чаще всего лучший результат даёт гибридный подход.
- Нарезка. Фрагменты по смысловым блокам — разделам, абзацам — а не по фиксированному числу символов.
- Метаданные. Заголовок документа, раздел и дата рядом с фрагментом улучшают и поиск, и ответ.
- Гибридный поиск. Объединение результатов векторного и полнотекстового поиска помогает с артикулами, названиями и точными терминами — про полнотекстовый поиск статья поиск на сайте.
- Переранжирование. Отдельная модель пересортировывает найденные кандидаты по релевантности.
- Оценка качества. Набор контрольных вопросов с правильными ответами показывает, стало ли лучше после изменений.
Сколько стоит векторный поиск?
Основные расходы — построение эмбеддингов, хранение векторов в памяти и вызовы модели при каждом запросе. Построение эмбеддингов для базы знаний среднего размера стоит недорого и делается один раз, а вот память под индекс и переиндексация при смене модели заметны на больших объёмах.
- эмбеддинги строят один раз при загрузке и пересчитывают только изменённые документы;
- размер вектора влияет на память — модели с меньшей размерностью дешевле в хранении;
- кешируйте эмбеддинги частых запросов;
- закладывайте переиндексацию при смене модели.
Как оценить AI-функцию целиком — в статье сколько стоит AI-функция.
Коротко
- Эмбеддинги представляют смысл в виде векторов, векторный поиск находит ближайшие.
- Он нужен для AI-ассистентов, семантического поиска, рекомендаций и поиска дублей.
- Если есть PostgreSQL и векторов до нескольких миллионов — хватит pgvector.
- Отдельная база оправдана на сотнях миллионов векторов и при жёстких требованиях к задержке.
- Точность повышают нарезка, метаданные, гибридный поиск и переранжирование.
Частые вопросы
Сколько векторов выдержит pgvector?
Миллионы векторов на обычном сервере с достаточным объёмом памяти. Ограничением обычно становится память под индекс и скорость его построения, а не сама база.
Нужно ли пересчитывать эмбеддинги при смене модели?
Да. Векторы разных моделей несовместимы, поэтому при смене модели все документы нужно переиндексировать. Храните исходные тексты и название модели рядом с векторами, чтобы это было просто.
Можно ли хранить персональные данные в векторной базе?
Можно, но к векторам применяются те же требования, что к исходным данным: доступ по правам, удаление по запросу, хранение в нужной юрисдикции. Из эмбеддинга частично можно восстановить смысл текста.



