Supabase + pgvector: семантический поиск без боли
Когда LIKE-поиск перестаёт работать
Обычный поиск ищет по словам. Пользователь вводит «автоматизация маркетинга» — и если в статье нет именно этих слов, результатов ноль. При этом у вас может лежать идеальная статья «Content Factory заменяет отдел из 20 человек», которая отвечает на этот запрос на 100%.
Семантический поиск понимает смысл. Он работает с embedding-векторами — математическими представлениями текста в многомерном пространстве. Похожие по смыслу тексты оказываются рядом, даже если не содержат одинаковых слов.
Мы внедрили семантический поиск в Atlas OS через Supabase pgvector. Вот подробный разбор — архитектура, код, грабли и результаты.
Почему Supabase + pgvector, а не Pinecone
Мы долго выбирали между тремя вариантами. Вот честное сравнение на февраль 2026.
Отдельные vector DB
Supabase pgvector
Главный аргумент
Мы уже используем Supabase для всех данных Atlas OS. Добавить pgvector = одна SQL-команда. Без нового сервиса, без нового API, без нового billing. JOIN между embeddings и бизнес-данными — бесплатно и мгновенно.
Настройка pgvector
SQL, который делает магию
Три шага. Пять минут. Готово.
-- Шаг 1: Включаем extension
create extension if not exists vector;
-- Шаг 2: Таблица для embeddings
create table content_embeddings (
id uuid primary key default gen_random_uuid(),
content_id text not null,
content_type text not null, -- 'article', 'product', 'persona'
embedding vector(1536), -- OpenAI text-embedding-3-small
metadata jsonb,
created_at timestamptz default now()
);
-- Шаг 3: Индекс для быстрого поиска
-- IVFFlat — для коллекций до 500K записей
create index on content_embeddings
using ivfflat (embedding vector_cosine_ops)
with (lists = 100);
-- Для 500K+ записей используйте HNSW:
-- create index on content_embeddings
-- using hnsw (embedding vector_cosine_ops)
-- with (m = 16, ef_construction = 64);
IVFFlat vs HNSW
IVFFlat быстрее строится, но HNSW даёт лучший recall при больших объёмах. Правило: до 500K записей — IVFFlat. Больше — HNSW. Для Atlas OS с 50K записей IVFFlat более чем достаточно.
Генерация embeddings
Выбор модели в 2026 году
Ландшафт embedding-моделей на февраль 2026:
Мы используем text-embedding-3-small — оптимальное соотношение цена/качество. Для 90% бизнес-задач разница с large незаметна, а стоимость в 6.5 раз ниже.
Альтернативы:
- Voyage AI 3 — специализированные embeddings для RAG, чуть лучше quality
- Cohere Embed v3 — мультиязычный, хорош для русского текста
- BGE-M3 (BAAI) — open-source, бесплатный, self-hosted
import OpenAI from 'openai';
import { createClient } from '@supabase/supabase-js';
const openai = new OpenAI();
const supabase = createClient(
process.env.SUPABASE_URL!,
process.env.SUPABASE_SERVICE_KEY!
);
async function embedAndStore(
contentId: string,
contentType: string,
text: string,
metadata?: Record<string, unknown>
) {
const { data } = await openai.embeddings.create({
model: 'text-embedding-3-small',
input: text,
});
await supabase.from('content_embeddings').upsert({
content_id: contentId,
content_type: contentType,
embedding: data[0].embedding,
metadata,
});
}
📬 Стек Atlas OS — в подробностях. Подписывайтесь.
Подписаться в TG →Функция поиска
PostgreSQL RPC для семантического поиска
PostgreSQL-функция, вызываемая через Supabase RPC:
create or replace function search_content(
query_embedding vector(1536),
match_count int default 10,
match_threshold float default 0.7,
filter_type text default null
)
returns table (
content_id text,
content_type text,
similarity float,
metadata jsonb
)
language plpgsql as $$
begin
return query
select
ce.content_id,
ce.content_type,
1 - (ce.embedding <=> query_embedding) as similarity,
ce.metadata
from content_embeddings ce
where
(filter_type is null or ce.content_type = filter_type)
and 1 - (ce.embedding <=> query_embedding) > match_threshold
order by ce.embedding <=> query_embedding
limit match_count;
end;
$$;
Threshold 0.7 — магическое число
Cosine similarity 0.7+ для text-embedding-3-small даёт хороший баланс между релевантностью и полнотой. Ниже 0.6 — слишком много шума. Выше 0.8 — пропускаете релевантные результаты.
Результаты в production
Реальные метрики Atlas OS
Семантический поиск работает 3 месяца. Результаты:
LIKE / Full-Text Search (было)
pgvector семантический (стало)
Грабли, на которые мы наступили
Чанкинг текста
Статья на 5000 слов целиком → embedding теряет специфику. Оптимально: 500-800 токенов с overlap 100 токенов.
Обновление embeddings
Изменили статью — забыли обновить embedding. Решение: триггер в Supabase на UPDATE.
IVFFlat на малых данных
При менее 10K записей IVFFlat хуже brute-force. Не создавайте индекс до 10K записей.
Миграция embedding-модели
С ada-002 на text-embedding-3-small — пересоздание всех embeddings. Выбирайте актуальную модель сразу.
Семантический поиск — не роскошь и не фича для enterprise. Это базовая функция для любого AI-продукта в 2026 году. Если ваш поиск не понимает смысл — вы теряете пользователей каждый день.
📬 Хотите получать такие разборы каждый день?
Подписаться в TG →
Станислав Виниченко
Основатель Atlas CEO
"Будущее строится сейчас."
Рассылка Atlas CEO
Фронтовые сводки Сингулярности. Каждый день в 9:00. Бесплатно.
Подписаться в TelegramAtlas Graph
Что открыть дальше
Перелинковка держит пользователя внутри темы: сначала углубляем статью, затем переводим в продукт и следующий шаг.
Похожие статьи
Весь журнал →
2ГИС в 2026: практический разбор альтернатив и рабочий сценарий
Руководство по использованию 2ГИС и альтернатив в 2026 году. Практические сценарии, критерии выбора, риски и план внедрения для руководителей и power-user. ROI, интеграция с AI и современные стратегии.
AdGuard и альтернативы: как выбрать блокировщик рекламы, не сломав аналитику
Разбираем, как выбрать ad blocker для команды: от AdGuard до Pi-hole. Практика внедрения, whitelist-политики и защита маркетинговой аналитики. Гайд для CEO и growth-команд.
AdwCleaner 2026: практический разбор, альтернативы и рабочий сценарий для бизнеса
Подробный разбор AdwCleaner на 2026 год: критерии выбора, риски, альтернативы и пошаговый сценарий внедрения для руководителей и power-user. Интеграция с продуктами AtlasCEO для усиления безопасности.
Продукты, которые усиливают эту тему
На каждой статье даём не только чтение, но и продуктовый следующий шаг.
Content Factory
120+ постов. 8 видео. 4 лонгрида. Каждый месяц. Автоматически. В вашем стиле. На 4+ платформах. Дешевле одного копирайтера.
AI-Трансформация
Мы не «внедряем ChatGPT». Мы перестраиваем архитектуру вашего бизнеса так, чтобы AI делал 80% работы. А вы — только то, что любите.
AI Business
Мы не «внедряем AI в старые процессы». Мы превращаем вашу экспертность в AI-компанию с маржой 60–90% и глобальным масштабом.