Содержание

Векторная база данных хранит эмбеддинги — числовые представления смысла текста, изображений или товаров — и быстро находит ближайшие к запросу. Она нужна для семантического поиска, рекомендаций и 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, в той же транзакции Метаданные, синхронизация с основной базой
Согласованность данных Полная Нужна синхронизация
Масштабирование Вертикальное, реплики Горизонтальное

Как сделать векторный поиск точнее?

Точность векторного поиска зависит не столько от базы, сколько от подготовки данных: как документы нарезаны на фрагменты, какая модель строит эмбеддинги и совмещается ли векторный поиск с обычным полнотекстовым. Чаще всего лучший результат даёт гибридный подход.

  1. Нарезка. Фрагменты по смысловым блокам — разделам, абзацам — а не по фиксированному числу символов.
  2. Метаданные. Заголовок документа, раздел и дата рядом с фрагментом улучшают и поиск, и ответ.
  3. Гибридный поиск. Объединение результатов векторного и полнотекстового поиска помогает с артикулами, названиями и точными терминами — про полнотекстовый поиск статья поиск на сайте.
  4. Переранжирование. Отдельная модель пересортировывает найденные кандидаты по релевантности.
  5. Оценка качества. Набор контрольных вопросов с правильными ответами показывает, стало ли лучше после изменений.

Сколько стоит векторный поиск?

Основные расходы — построение эмбеддингов, хранение векторов в памяти и вызовы модели при каждом запросе. Построение эмбеддингов для базы знаний среднего размера стоит недорого и делается один раз, а вот память под индекс и переиндексация при смене модели заметны на больших объёмах.

  • эмбеддинги строят один раз при загрузке и пересчитывают только изменённые документы;
  • размер вектора влияет на память — модели с меньшей размерностью дешевле в хранении;
  • кешируйте эмбеддинги частых запросов;
  • закладывайте переиндексацию при смене модели.

Как оценить AI-функцию целиком — в статье сколько стоит AI-функция.

Коротко

  • Эмбеддинги представляют смысл в виде векторов, векторный поиск находит ближайшие.
  • Он нужен для AI-ассистентов, семантического поиска, рекомендаций и поиска дублей.
  • Если есть PostgreSQL и векторов до нескольких миллионов — хватит pgvector.
  • Отдельная база оправдана на сотнях миллионов векторов и при жёстких требованиях к задержке.
  • Точность повышают нарезка, метаданные, гибридный поиск и переранжирование.

Частые вопросы

  • Сколько векторов выдержит pgvector?

    Миллионы векторов на обычном сервере с достаточным объёмом памяти. Ограничением обычно становится память под индекс и скорость его построения, а не сама база.

  • Нужно ли пересчитывать эмбеддинги при смене модели?

    Да. Векторы разных моделей несовместимы, поэтому при смене модели все документы нужно переиндексировать. Храните исходные тексты и название модели рядом с векторами, чтобы это было просто.

  • Можно ли хранить персональные данные в векторной базе?

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