Pinecone (управляемый)
import os
from pinecone import Pinecone, ServerlessSpec
pc = Pinecone(api_key=os.environ["PINECONE_API_KEY"])
pc.create_index(
name="docs",
dimension=1536,
metric="cosine",
spec=ServerlessSpec(cloud="aws", region="us-east-1"),
)
index = pc.Index("docs")
index.upsert(vectors=[{"id": "d1", "values": vec, "metadata": {"src": "faq"}}])
Плюсы: ноль инфраструктуры, авто-масштаб. Минусы: цена, данные у вендора, vendor lock-in.
Qdrant (self-hosted в Docker)
docker run -p 6333:6333 qdrant/qdrant
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams
q = QdrantClient(url="http://localhost:6333")
q.recreate_collection(
collection_name="docs",
vectors_config=VectorParams(size=1536, distance=Distance.COSINE),
)
Открытый код, мощная фильтрация по payload, гибридный режим. Хорош, если данные нельзя отдавать наружу.
pgvector (расширение Postgres)
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE chunks (id bigserial PRIMARY KEY, body text, embedding vector(1536));
CREATE INDEX ON chunks USING hnsw (embedding vector_cosine_ops);
SELECT body FROM chunks ORDER BY embedding <=> '[...]'::vector LIMIT 5;
Идеален, когда у вас уже есть Postgres: транзакции, JOIN с бизнес-данными, один бэкап. Оператор <=> — cosine distance, <-> — L2, <#> — negative inner product.
ChromaDB и FAISS
- ChromaDB — лёгкая локальная база для прототипов и ноутбуков, embedded-режим без сервера.
- FAISS — библиотека Facebook, не база: только индекс в памяти/на диске, без метаданных, фильтров и сети. Максимальная скорость для офлайн-задач и бенчмарков.
Типы индексов
- HNSW (граф ближайших соседей) — высокий recall, быстрый поиск, дорогая память и построение. Дефолт почти везде. Параметры:
m (связность), ef_construction, ef_search (recall vs скорость на запросе).
- IVF (инвертированные списки + кластеры) — компактнее, поиск только в ближайших
nprobe кластерах; чуть ниже recall, лучше для очень больших наборов с ограничением по памяти.
Как выбирать
| Сценарий | Выбор |
|---|---|
| Не хочу инфраструктуру | Pinecone |
| Уже есть Postgres, до ~1–5M векторов | pgvector |
| Self-host, приватность, мощные фильтры | Qdrant |
| Ноутбук / прототип | ChromaDB |
| Офлайн-бенчмарк, максимум скорости | FAISS |