Vector Databases
Что это такое
Векторная база данных хранит многомерные векторы (эмбеддинги), которые представляют смысл текста, изображений или других данных, и находит элементы, наиболее похожие на вектор запроса. Вместо сопоставления точных ключевых слов она ранжирует результаты по семантической близости, используя метрики расстояния вроде косинусного сходства. Они лежат в основе семантического поиска, рекомендаций и генерации с дополнением через поиск (RAG) для ИИ-приложений.
Сильные стороны
- Быстрый поиск по сходству среди миллионов эмбеддингов через ANN-индексы.
- Обеспечивают семантический поиск и RAG, которые понимают смысл, а не только ключевые слова.
- Множество вариантов: pgvector, Pinecone, Qdrant, Weaviate, Milvus, Chroma.
- Фильтрация по метаданным сочетает семантический поиск со структурированными ограничениями.
- Масштабируются на большие корпуса с помощью алгоритмов приближённого поиска ближайших соседей.
Компромиссы
- Результаты приближённые; настройка балансирует полноту против скорости.
- Качество эмбеддингов полностью зависит от модели, которая произвела векторы.
- Повторное эмбеддирование всего корпуса требуется при смене моделей.
- Хранилище и память растут с числом измерений и размером набора данных.
Когда использовать
Используйте векторную базу данных для семантического поиска, ответов на вопросы по документам, рекомендаций, дедупликации и RAG-конвейеров, которые подают релевантный контекст в LLM. При скромном масштабе расширение pgvector позволяет держать векторы рядом с реляционными данными в PostgreSQL.
Подходит для вайб-кодинга
Направляя ИИ, чётко обозначьте три вещи: какую модель эмбеддингов вы используете (чтобы размерности векторов совпадали с индексом), метрику расстояния (косинусная типична для текста) и как вы разбиваете исходные документы на чанки перед эмбеддированием. Попросите ИИ хранить полезные метаданные рядом с каждым вектором, чтобы можно было фильтровать (например, по user_id или doc_type), и держать код эмбеддинга и запроса на одной и той же модели. Хороший совет: пусть ИИ построит шаг извлечения RAG, который возвращает топ-k чанков плюс их исходные id, чтобы ответы оставались отслеживаемыми и вы могли проверить, какой контекст модель на самом деле использовала.
-- PostgreSQL с расширением pgvector
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE documents (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
content TEXT NOT NULL,
doc_type TEXT,
embedding VECTOR(1536) -- должно совпадать с вашей моделью эмбеддингов
);
-- Индекс приближённого поиска ближайших соседей для косинусного расстояния
CREATE INDEX ON documents
USING hnsw (embedding vector_cosine_ops);
-- Топ-5 наиболее похожих чанков к вектору запроса ($1)
SELECT id, content
FROM documents
WHERE doc_type = 'manual'
ORDER BY embedding <=> $1
LIMIT 5;