~/VibeHandbook

Базы данных

github.com

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;