~/VibeHandbook
PDF бесплатно

Базы данных

github.com

Vector Databases

Что это такое

Векторная база данных превращает каждый фрагмент текста, изображение или другие данные в длинный список чисел, который улавливает их смысл. Такие списки чисел называются многомерными векторами (эмбеддингами). Когда вы ищете, она находит элементы, чей смысл ближе всего к вашему запросу. Представьте библиотекаря, который подаёт вам книги на ту же тему, даже если в них использованы совсем другие слова. Вместо сопоставления точных ключевых слов она ранжирует результаты по тому, насколько близок их смысл (семантической близости), измеряя это метриками расстояния вроде косинусного сходства. Они лежат в основе семантического поиска, рекомендаций и генерации с дополнением через поиск (retrieval-augmented generation, RAG) для ИИ-приложений.

Сильные стороны

  • Быстрый поиск по сходству среди миллионов эмбеддингов через ANN-индексы (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;