Головна/AI Інженерія/Блупринти/Production RAG & Пошук/Корпоративный RAG-ассистент по базе знаний на Supabase pgvector и Hybrid Search
До карток розділу «Production RAG & Пошук»
Production RAG & Пошук(ТЗ 1 из 6)
ТЗ: Корпоративный RAG-ассистент по базе знаний на Supabase pgvector и Hybrid Search
Production RAG & Пошук2 шагов • +10 XP

ТЗ: Корпоративный RAG-ассистент по базе знаний на Supabase pgvector и Hybrid Search

Коммерческая спецификация построения промышленной Retrieval-Augmented Generation системы: гибридный поиск (BM25 + pgvector HNSW), семантический чанкинг, переранжирование Cohere Rerank и стриминг с точными цитатами.

~16 ч работыУровень: SeniorSupabase pgvectorPostgreSQL HNSW IndexHybrid Search (BM25 + Vector)Cohere Rerank v3LangChain / LlamaIndexNext.js 16 App Router
+5 XP за шаг
Выполнено 0 из 2 шагов (0%)
Трудозатраты~16 рабочих часов
Фриланс вилка~$720 – $1,200 (€640 – €1120)
Оценка веб-студии~$1,520 – $2,560 (€1440 – €2400)

ТЗ заказчика (исходный бриф):

Главная проблема базового RAG — галлюцинации и пропуск точных артикулов/ГОСТов. Нам нужен гибридный поиск: если сотрудник ищет конкретный номер регламента, система обязана найти его по ключевым словам, а не по приблизительному смыслу.
Ключевые требования:
  • •Построение индекса HNSW в PostgreSQL через расширение pgvector для поиска за миллисекунды
  • •Гибридное ранжирование Reciprocal Rank Fusion (RRF): объединение полнотекстового поиска tsvector и семантических эмбеддингов
  • •Переранжирование топ-25 кандидатов с помощью Cohere Rerank для отсева шума до топ-5 контекстов
  • •Потоковый вывод ответа с интерактивными сносками-цитатами на страницы исходных документов
Ограничения проекта:
  • •Исключение галлюцинаций: модель обязана отвечать строго по предоставленному контексту
  • •Изоляция прав доступа: сотрудник видит только те документы, к которым у него есть доступ (Row Level Security)
Критерии приёмки (KPI):
  • Context Precision > 0.92 по метрике Ragas
  • Время выполнения гибридного поиска в БД < 80ms

Конфигурация блупринта под условия проекта

Выберите архитектуру и стек — шаги роадмапа, структура файлов и примеры кода переключатся автоматически:

Пошаговое практическое руководство по ТЗ

Подробный разбор архитектуры, код реализации и советы эксперта по каждому этапу:

1
Этап 1 из 2

Схема БД pgvector с индексом HNSW и функцией гибридного поиска RRF

~60 мин

Практическое руководство:

Создать миграцию PostgreSQL с расширением vector, таблицей documents, полями embedding, fts (tsvector) и SQL-функцией hybrid_search с алгоритмом Reciprocal Rank Fusion.

Важные технические нюансы и подводные камни:

Используйте индекс HNSW с оператором cosine distance (<=>) вместо IVFFlat для сохранения точности на больших объемах данных.

Архитектурная база (Почему выбрано такое решение):

Reciprocal Rank Fusion (RRF) объединяет порядковые ранги двух разных шкал, нивелируя проблему разницы распределения скоринга между BM25 и косинусным сходством.

Совет эксперта (Best Practice):

Параметр rrf_k = 60 является индустриальным стандартом Cormack et al. и предотвращает перекос в сторону одного случайного точного совпадения.

Ожидаемый артефакт этапа:

SQL-миграция схемы документов и функция гибридного поиска RRF.

SQL
-- migrations/20261017_rag_hybrid_search.sql
CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE IF NOT EXISTS document_chunks (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  document_id UUID NOT NULL,
  title TEXT NOT NULL,
  content TEXT NOT NULL,
  metadata JSONB DEFAULT '{}'::jsonb,
  embedding vector(1536),
  fts tsvector GENERATED ALWAYS AS (to_tsvector('russian', title || ' ' || content)) STORED,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

-- HNSW индекс для мгновенного векторного поиска
CREATE INDEX IF NOT EXISTS idx_document_chunks_embedding_hnsw 
ON document_chunks USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);

-- Индекс GIN для полнотекстового поиска по ключевым словам
CREATE INDEX IF NOT EXISTS idx_document_chunks_fts 
ON document_chunks USING gin (fts);

-- Функция гибридного поиска (Reciprocal Rank Fusion)
CREATE OR REPLACE FUNCTION match_documents_hybrid(
  query_text TEXT,
  query_embedding vector(1536),
  match_count INT DEFAULT 20,
  rrf_k INT DEFAULT 60
)
RETURNS TABLE (
  id UUID,
  title TEXT,
  content TEXT,
  metadata JSONB,
  similarity FLOAT
)
LANGUAGE plpgsql
AS $$
BEGIN
  RETURN QUERY
  WITH full_text AS (
    SELECT 
      c.id,
      ROW_NUMBER() OVER (ORDER BY ts_rank_cd(c.fts, websearch_to_tsquery('russian', query_text)) DESC) AS rank_ix
    FROM document_chunks c
    WHERE c.fts @@ websearch_to_tsquery('russian', query_text)
    LIMIT match_count
  ),
  semantic AS (
    SELECT 
      c.id,
      ROW_NUMBER() OVER (ORDER BY c.embedding <=> query_embedding) AS rank_ix
    FROM document_chunks c
    ORDER BY c.embedding <=> query_embedding
    LIMIT match_count
  )
  SELECT 
    c.id,
    c.title,
    c.content,
    c.metadata,
    COALESCE(1.0 / (rrf_k + ft.rank_ix), 0.0) + COALESCE(1.0 / (rrf_k + sem.rank_ix), 0.0) AS similarity
  FROM full_text ft
  FULL OUTER JOIN semantic sem ON ft.id = sem.id
  JOIN document_chunks c ON c.id = COALESCE(ft.id, sem.id)
  ORDER BY similarity DESC
  LIMIT match_count;
END;
$$;
2
Этап 2 из 2

Пайплайн переранжирования кандидатов через Cohere Rerank

~45 мин

Типичные грабли на этом ТЗ

1 антипаттерна

Что сдаём клиенту (Deliverables)

Чек-лист сдачи
PostgreSQL гибридная схема pgvector + tsvector
HNSW векторный индекс высокой производительности
Cohere Rerank модуль и стриминговый API с цитатами