Семантический поиск, RAG-пайплайны и рекомендательные системы требуют эффективного хранения и поиска векторных представлений данных. Вместо простого совпадения строк эти технологии работают с векторными эмбеддингами — числовыми представлениями текста, изображений или других данных в многомерном пространстве.
Как работают векторные базы данных
Традиционные базы данных ищут точные совпадения, тогда как векторные базы данных вычисляют семантическую близость. Когда вы задаете запрос "Как настроить аутентификацию?", система преобразует его в вектор (например, массив из 1536 чисел: [0.23, -0.41, 0.87, ...]), а затем находит наиболее близкие векторы в базе данных, соответствующие таким темам, как "Руководство по настройке аутентификации", "Управление JWT-токенами" или "Реализация OAuth2".
Ключевой метрикой является "расстояние" между векторами — чем оно меньше, тем семантически ближе документы. Основные алгоритмы поиска включают HNSW (Иерархические навигируемые малые миры) и IVF (Инвертированные файловые индексы), которые обеспечивают баланс между скоростью и точностью.
pgvector: векторные возможности для PostgreSQL
pgvector — это расширение для PostgreSQL, которое добавляет поддержку векторных операций. Это идеальный выбор для команд, уже использующих PostgreSQL в своих проектах.
Установка проста:
CREATE EXTENSION vector;
Добавление векторного столбца к существующей таблице:
ALTER TABLE documents ADD COLUMN embedding vector(1536);
Для ускорения поиска создается специальный индекс:
CREATE INDEX documents_embedding_idx ON documents
USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);
Пример поиска с использованием Node.js и OpenAI:
async function searchDocuments(query, limit = 5) {
const { data } = await openai.embeddings.create({
model: 'text-embedding-3-small',
input: query,
});
const queryEmbedding = data[0].embedding;
const results = await db.$queryRaw`
SELECT id, title, content,
1 - (embedding <=> ${queryEmbedding}::vector) AS similarity
FROM documents
ORDER BY embedding <=> ${queryEmbedding}::vector
LIMIT ${limit}
`;
return results;
}
Преимущества pgvector: отсутствие дополнительной инфраструктуры, транзакционная согласованность, возможность хранения векторов вместе с остальными данными. Ограничения: производительность на очень больших наборах данных (более 1-10 миллионов векторов), необходимость самостоятельной настройки и оптимизации.
Pinecone: полностью управляемое решение
Pinecone предлагает облачную векторную базу данных как сервис. Это избавляет разработчиков от необходимости управлять инфраструктурой и масштабировать систему.
Настройка клиента:
import { Pinecone } from '@pinecone-database/pinecone';
const pc = new Pinecone({
apiKey: process.env.PINECONE_API_KEY
});
const index = pc.index('my-index');
Загрузка векторов:
await index.upsert([
{
id: 'doc-1',
values: embedding, // массив чисел
metadata: { title: 'Authentication Guide', category: 'security' }
}
]);
Поиск выполняется через простой API:
const results = await index.query({
vector: queryEmbedding,
topK: 5,
includeMetadata: true
});
Сильные стороны Pinecone: автоматическое масштабирование, высокая производительность на больших объемах данных, встроенные функции фильтрации по метаданным, простота интеграции. Недостатки: стоимость (особенно при больших объемах), зависимость от внешнего сервиса.
Weaviate: гибридный подход с поддержкой GraphQL
Weaviate — это open-source векторная база данных с поддержкой как векторного, так и традиционного поиска. Она предлагает GraphQL API и возможность работы с различными модулями векторного преобразования.
Конфигурация схемы в Weaviate определяет структуру данных:
{
"classes": [{
"class": "Document",
"vectorizer": "text2vec-openai",
"moduleConfig": {
"text2vec-openai": {
"model": "text-embedding-3-small"
}
},
"properties": [{
"name": "title",
"dataType": ["text"]
}, {
"name": "content",
"dataType": ["text"]
}]
}]
}
Гибридный поиск объединяет векторную и текстовую релевантность:
{
Get {
Document(
hybrid: {
query: "authentication setup",
alpha: 0.5
}
limit: 5
) {
title
content
_additional {
score
}
}
}
}
Особенности Weaviate: гибридный поиск, расширяемость через модули, возможность локального развертывания или использования облачной версии. Сложности: более крутая кривая обучения по сравнению с другими решениями, необходимость управления инфраструктурой при self-hosted варианте.
Критерии выбора
Для существующих проектов на PostgreSQL с умеренными объемами данных (до 1 миллиона векторов) pgvector представляет наиболее практичное решение. Оно минимизирует сложность архитектуры и использует уже знакомые инструменты.
Приложения, требующие обработки десятков или сотен миллионов векторов с минимальными задержками, выигрывают от использования Pinecone. Особенно это актуально для стартапов и команд, которые хотят сфокусироваться на разработке функциональности, а не на управлении инфраструктурой.
Weaviate оптимален для сценариев, где требуется гибридный поиск — сочетание семантического понимания с традиционными методами фильтрации. Его модульная архитектура также позволяет интегрировать различные модели эмбеддингов и дополнительные функции обработки.
Стоимость становится ключевым фактором при масштабировании. В то время как pgvector работает на существующей инфраструктуре PostgreSQL, Pinecone и облачная версия Weaviate взимают плату за хранение и операции. Для крупных проектов стоит оценивать как первоначальные затраты на разработку, так и долгосрочные расходы на эксплуатацию.