Обзор решений: Pinecone, Chroma, FAISS, pgvector, Qdrant
Чем отличаются ходовые векторные хранилища и как выбрать под свой проект.
Векторные хранилища бывают трёх видов: библиотека (FAISS), расширение существующей БД (pgvector) и специализированная векторная БД (Chroma, Qdrant, Pinecone).
Краткая карта решений
| Решение | Тип | Когда брать |
| FAISS | библиотека (Meta) | максимум контроля и скорости, всё в своём коде |
| Chroma | embedded БД | прототипы и локальная разработка, минимум настройки |
| 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