Обзор решений: Pinecone, Chroma, FAISS, pgvector, Qdrant

Чем отличаются ходовые векторные хранилища и как выбрать под свой проект.

Векторные хранилища бывают трёх видов: библиотека (FAISS), расширение существующей БД (pgvector) и специализированная векторная БД (Chroma, Qdrant, Pinecone).

Краткая карта решений

РешениеТипКогда брать
FAISSбиблиотека (Meta)максимум контроля и скорости, всё в своём коде
Chromaembedded БДпрототипы и локальная разработка, минимум настройки
pgvectorрасширение Postgresуже есть Postgres — не хочется новой системы
Qdrantотдельная БД (Rust)прод с фильтрами по метаданным, self-host или облако
Pineconeоблачный сервисне хочется управлять инфраструктурой

FAISS — это не база, а движок

FAISS даёт быстрые ANN-индексы, но не хранит метаданные и не имеет сервера — это библиотека внутри вашего процесса. Реальные вызовы (не запускаются в браузере):

import faiss
import numpy as np

index = faiss.IndexFlatIP(768)        # косинус на нормализованных векторах
index.add(np.array(doc_vectors))      # добавили эмбеддинги документов
scores, ids = index.search(query_vec, k=5)  # top-5 ближайших

pgvector — векторы прямо в Postgres

Если данные уже в Postgres, можно не заводить новую систему: pgvector добавляет тип vector и оператор близости. Это PostgreSQL-специфичный SQL, поэтому помечаем как pgsql:

CREATE EXTENSION vector;
CREATE TABLE chunks (
    id bigserial PRIMARY KEY,
    content text,
    embedding vector(768)
);
-- <=> это оператор косинусного расстояния
SELECT content
FROM chunks
ORDER BY embedding <=> '[0.1, 0.2, ...]'
LIMIT 5;

Chroma — для быстрого старта

Chroma встраивается в Python-процесс и берёт на себя эмбеддинг, хранение и поиск — отлично для прототипа:

import chromadb
client = chromadb.Client()
col = client.create_collection("docs")
col.add(documents=["текст чанка"], ids=["1"])
res = col.query(query_texts=["вопрос"], n_results=3)

Как выбирать

  • Прототип / учёба — Chroma или FAISS: подняли за минуты.
  • Уже есть Postgres — pgvector: одно меньше систем в проде.
  • Прод, миллионы векторов, фильтры — Qdrant, Weaviate, Milvus.
  • Не хотим DevOps — управляемый Pinecone.

Все они под капотом делают одно и то же — хранят эмбеддинги и ищут ближайших через ANN. Разница в управлении, фильтрах, масштабе и цене.

Итог

  • FAISS — быстрая библиотека-движок без сервера и метаданных.
  • pgvector — векторы внутри уже знакомого Postgres.
  • Chroma — для прототипов; Qdrant/Pinecone — для прода и масштаба.
Проверьте себя
1. Чем FAISS отличается от полноценной векторной БД?
AЭто облачный сервис
BЭто библиотека-движок: даёт ANN-индексы, но без сервера и хранения метаданных
CЭто расширение Postgres
DЭто модель эмбеддингов
2. Когда разумнее всего выбрать pgvector?
AКогда нужен полностью managed-сервис
BКогда данные уже в Postgres и не хочется новой системы
CКогда нужен максимум скорости на GPU
DКогда нет вообще никакой БД
3. Что общего у Pinecone, Chroma, FAISS, pgvector и Qdrant?
AВсе они облачные
BВсе хранят эмбеддинги и ищут ближайших соседей через ANN
CВсе написаны на Python
DВсе требуют GPU
Поддержать проект