Маркетинг-стратег, IT-предприниматель, ментор по вайбкодингу
10+ лет в маркетинге, 300+ клиентских проектов: сайты, реклама, боты. Создатель GoBanana (228K+ пользователей, 11.6 млн ₽ выручки) и VibeCoderz. Делаю AI-продукты сам через Claude Code, Cursor, Windsurf и консультирую тех, кто хочет так же.
🎯 О чём этот конспект: Практическое руководство по внедрению decision-моделей (System 1 models, таких как Jev от Typescape) в архитектуру Agentic RAG на базе Python, React и Supabase. Разбирается переход от медленных и дорогих LLM к сверхбыстрым ($0.04 за 1M токенов) моделям принятия решений для управляемого реранкинга (steerable reranking), мгновенной верификации цитат, динамического роутинга запросов и фильтрации контекста.
👤 Кому будет полезно: AI-инженерам, вайбкодерам и разработчикам Agentic RAG систем, сталкивающимся с высокими затратами на API, задержками генерации из-за раздутого контекста и галлюцинациями агентов.
✨ Что получите: Готовую архитектурную схему микро-решений в RAG-пайплайнах, шаблоны схем валидации (типы new, choice, score), правила управляемого реранкинга и методы сокращения затрат на инфраструктуру в десятки раз.
1. Архитектура System 1 (Decision Models) против классических LLM
Контекст: Классические языковые модели (GPT, Claude) работают как "писатели" (System 2): они генерируют текст токен за токеном, расходуют вычислительные ресурсы на синтаксис и имеют ненужные задержки (TTFT и генерация). Большинство задач внутри RAG-пайплайна (роутинг, оценка релевантности, верификация фактов) не требуют генерации текста — им требуется мгновенное бинарное или категориальное решение. Модели System 1 (в частности, Jev) не генерируют текст, а принимают сырой текст (state) и возвращают строго структурированное решение с оценкой уверенности (confidence score). Это устраняет галлюцинации формата и многократно снижает стоимость и задержку.
Тайминг: , ,
Выгода:
Стоимость: всего ~$0.04 за 1 000 000 входных токенов (выходные токены бесплатны).
Задержка снижается с нескольких секунд до десятков миллисекунд.
100% гарантия совпадения со схемой без риска генерации лишнего текста.
Как применить:
Шаг 1: Определение состояния (State) — Передавайте сырой контекст (фрагмент документа, вопрос, email) в поле состояния.
Шаг 2: Выбор типа вопроса (Question Type) — Используйте один из трех базовых типов валидации:
new (бинарный выбор Да/Нет с уровнем уверенности).
choice (выбор одного варианта из заданного списка).
score (ранжирование по шкале уровней).
Шаг 3: Формирование JSON-схемы запроса — Отправляйте пачку вопросов в рамках одного вызова API.
Результат: Детерминированный JSON-ответ с коэффициентами уверенности по каждому параметру без накладных расходов на генерацию токенов.
2. Управляемый реранкинг (Steerable Reranking) и очистка контекста
Контекст: Векторный и гибридный поиск находят семантически похожие фрагменты (similarity), но сходство не равно релевантности (relevance). Например, оглавление документа имеет высокий семантический скор почти к любому запросу, но не содержит полезной информации. Загрузка всех 50–60 найденных фрагментов в контекст LLM забивает контекстное окно, увеличивает галлюцинации и раздувает стоимость. Традиционные кросс-энкодеры (например, Cohere Rerank) ранжируют только по сходству "запрос-документ". Модель Jev позволяет выполнять управляемый реранкинг (steerable reranking), когда агент передает инструкцию по приоритезации, отличную от поискового запроса.
Тайминг: , , ,
Выгода:
Сжатие контекста: из 60 кандидатов в контекст LLM отправляются только топ-10 релевантных чанков.
Шаг 1: Широкий поиск (Candidate Retrieval) — Выполните гибридный поиск (BM25 + Vector) и извлеките широкую выборку (50–60 чанков).
Шаг 2: Формирование инструкции реранкинга — Передайте поисковый запрос, пул чанков и динамическую инструкцию агента (например: "Приоритизировать документы, явно помеченные как legal brief").
Шаг 3: Фильтрация по порогу уверенности (Thresholding) — Отсеките все чанки, скор которых ниже заданного порога (например, < 20–30%).
# Пример логики steerable reranking в Pythondef steerable_rerank(query: str, candidates: list[dict], steering_instruction: str, min_confidence: float = 0.20) -> list[dict]: rerank_payload = { "query": query, "instruction": steering_instruction, # "Prioritize documents explicitly titled or described as a legal brief" "candidates": [c["text"] for c in candidates], "question_type": "new" # Does the passage help answer the query given the instruction? } # Вызов decision-модели Jev scores = decision_engine.evaluate(rerank_payload) filtered_chunks = [] for chunk, score in zip(candidates, scores): if score.confidence >= min_confidence and score.decision == True: chunk["relevance_score"] = score.confidence filtered_chunks.append(chunk) # Сортировка по убыванию уверенности return sorted(filtered_chunks, key=lambda x: x["relevance_score"], reverse=True)[:10]
Результат: Агент получает компактный, очищенный от шума контекст с наивысшей фактологической плотностью.
3. Мгновенная валидация цитат и фактчекинг (< 1 сек)
Контекст: Галлюцинации в RAG возникают, когда LLM придумывает детали, отсутствующие в извлеченных чанках, либо неверно атрибутирует утверждения. Проверка фактов с помощью вторичных LLM (GPT-4o mini и т.д.) обходится дорого и добавляет 2–5 секунд задержки на каждый ответ. С использованием Decision Model верификация утверждений выполняется параллельно в реальном времени менее чем за 1 секунду: сгенерированный тезис сопоставляется с конкретным цитируемым параграфом с классификацией степени поддержки.
Тайминг: , ,
Выгода:
Задержка верификации: < 1 секунды в реальном времени.
Стоимость проверки 11 000 токенов контекста — доли цента.
Шаг 1: Выделение пары «Тезис — Чанк-источник» — Извлеките сгенерированное утверждение модели и связанный ID чанка.
Шаг 2: Настройка схемы классификации цитат — Передайте вопрос с типом choice и критериями степени подтверждения.
Шаг 3: Отображение статуса в UI — Применяйте UI-бейдж доверия (зеленый / желтый / красный) в зависимости от полученного скора.
{
"state": "Сгенерированное утверждение: 'Компания X увеличила выручку на 40% в Q3'. Исходный чанк: 'В третьем квартале компания X показала рост доходов примерно на 40% по сравнению с Q2.'",
"questions": [
{
"id": "citation_support",
"type": "choice",
"options": [
"fully_supported", // Источник полностью и прямо подтверждает тезис
"partially_supported",// Источник подтверждает утверждение частично
"unsupported", // Источник не содержит информации по данному тезису
"contradicts" // Источник прямо противоречит утверждению
]
}
]
}
Результат: Интерфейс с автоматической подсветкой достоверности источников и мгновенным детектированием галлюцинаций.
4. Динамический роутинг моделей (Smart Model Router)
Контекст: Маршрутизация каждого пользовательского сообщения в топовые reasoning-модели (Claude 3.5 Sonnet, GPT-4o, o1) приводит к перерасходу бюджета на простых запросах вроде "Привет", "Спасибо" или базовых вопросах по документам. Использование LLM для классификации намерений добавляет задержку и тратит токены на вывод. System 1 модель оценивает сложность задачи по входному тексту за ~400 токенов и выбирает оптимальный класс модели для экономии.
Тайминг: , , ,
Выгода:
Расход: ~400 входных токенов на маршрутизацию (практически нулевая стоимость).
Экономия до 70-80% бюджета за счет перенаправления простых диалогов на дешевые модели (Luma / Flash).
Как применить:
Шаг 1: Определение уровней сложности — Разделите запросы на категории сложности выполнения.
Шаг 2: Конфигурация критериев для Jev — Сформулируйте правила отбора в промпте классификатора.
Шаг 3: Роутинг на бэкенде — Направляйте запрос в соответствующий LLM-клиент на основе индекса ответа.
{
"state": "tell me about the legal brief",
"question": {
"id": "routing_decision",
"type": "choice",
"prompt": "How much work does a correct complete answer to this question require?",
"options": [
"Level_0_Simple: Simple greeting, acknowledgment, or small talk",
"Level_1_RAG: Requires user documents or tool calling / basic retrieval",
"Level_2_Complex: Deep analysis, multi-step / multi-hop reasoning, careful synthesis"
]
}
}
Результат: Запросы Level_0 уходят на легковесные модели, Level_1 — на стандартные RAG-агенты, а Level_2 — на reasoning-модели с глубоким анализом.
5. Микро-решения на этапе Ingestion и в Graph RAG
Контекст: При индексации (Ingestion Pipeline) документы разбиваются на чанки алгоритмами без семантического анализа. В базу попадают бесполезные технические данные (футеры, оглавления, подписи), устаревшие версии или PII (персональные данные). Прогон каждого чанка через стандартную LLM обходится слишком дорого для больших баз знаний. В Graph RAG также возникает проблема разрешения сущностей (Entity Resolution) — понимания, ссылаются ли две разные строки на один и тот же объект реального мира.
Тайминг: ,
Выгода:
Пакетная валидация тысяч чанков на этапе загрузки без раздувания счета за API.
Обогащение базы структурированными метаданными для предварительной SQL/NoSQL-фильтрации.
Как применить:
Шаг 1: Формирование пайплайна метаданных чанка — Добавьте проверку структуры перед записью в Supabase/векторную БД.
Шаг 2: Проверка на PII и технический шум — Классифицируйте каждый чанк пачкой бинарных вопросов new.
Шаг 3: Сопоставление сущностей в Graph RAG — Сравнивайте пары извлеченных сущностей на эквивалентность перед построением ребер графа.
Результат: Чистая векторная база с богатыми метаданными, исключающая попадание технических страниц в поисковую выдачу.
6. Тотальная оценка трейсов (Evals at Scale) через Langfuse
Контекст: В продакшене AI-агентов разработчики вынуждены выборочно тестировать 1–5% диалогов из-за высокой стоимости LLM-as-a-Judge. Это оставляет скрытые баги, галлюцинации и плохие ответы незамеченными. Модели System 1 позволяют запускать автоматическую валидацию 100% пользовательских сессий за предыдущие сутки с логированием в Langfuse.
Тайминг: , ,
Выгода:
Покрытие 100% трейсов агентов метриками качества вместо выборочного сэмплирования.
Своевременное обнаружение деградации пайплайна retrieval и галлюцинаций.
Как применить:
Шаг 1: Подключение Langfuse Tracing — Настройте иерархическое логирование всех вызовов инструментов, поисков и вызовов LLM.
Шаг 2: Настройка ночного Eval-воркера — Напишите скрипт, выгружающий сессии за сутки и передающий их в Jev.
Шаг 3: Проверка ключевых метрик RAG — Оценивайте три параметра: релевантность извлечения (Retrieval Relevance), фактологическую заземленность (Groundedness) и наличие цитирования источников.
# Фоновый воркер оценки качества трейсовdef evaluate_daily_traces(traces: list[dict]): for trace in traces: eval_payload = { "state": f"Запрос: {trace.query}\nКонтекст: {trace.retrieved_chunks}\nОтвет: {trace.llm_response}", "questions": [ {"id": "retrieval_relevance", "type": "new", "true_criteria": "Извлеченные чанки соответствуют теме запроса"}, {"id": "answer_groundedness", "type": "new", "true_criteria": "Ответ опирается исключительно на переданный контекст"}, {"id": "properly_cited", "type": "new", "true_criteria": "Все ключевые факты снабжены ссылками на чанки"} ] } scores = decision_engine.evaluate(eval_payload) langfuse_client.score( trace_id=trace.id, name="rag_quality", value=scores["answer_groundedness"].confidence )
Результат: Полная аналитика качества RAG в реальном времени с автоматическим скорингом в дашборде Langfuse.
FAQ
В: Что такое модель System 1 в контексте AI и чем она отличается от System 2? О: Модели System 2 (классические LLM: GPT-4, Claude) строят рассуждения и генерируют текст токен за токеном. Модели System 1 (например, Jev) работают по принципу мгновенного "интуитивного" решения: они принимают текст и возвращают числовую оценку или категорию из жестко заданного списка без генерации текста и рассуждений.
В: Почему output в моделях типа Jev бесплатный? О: Модель не генерирует новые токены текста, которые обычно требуют длительных вычислений декодера. На выходе формируются только логиты вероятностей для заданных классов/чисел, поэтому тарифицируются только входные токены (~$0.04 за 1M токенов).
В: Чем управляемый реранкинг (Steerable Reranking) отличается от обычного кросс-энкодера Cohere? О: Традиционные кросс-энкодеры вычисляют жесткую семантическую близость между поисковым запросом и документом. Управляемый реранкинг позволяет агенту передавать отдельную инструкцию (например, "Ищи только выводы суда, игнорируй преамбулу"), меняя критерии скоринга без изменения исходного поискового запроса.
В: Может ли Decision Model галлюцинировать и вернуть структуру не по схеме? О: Нет, структурные галлюцинации исключены архитектурно. Модель математически ограничена распределением вероятностей по полям схемы (new, choice, score) и не способна добавить новые ключи или произвольный текст в JSON.
В: Как использовать Jev для сжатия контекста диалога (Context Pruning)? О: На каждом шаге диалога можно передавать накопленную историю сообщений в Jev с вопросом: "Является ли данный фрагмент истории критически важным для ответа на текущий вопрос?". Неактуальные фрагменты удаляются из контекста перед отправкой в основную LLM.
В: Какой технологический стек использовался в продемонстрированном приложении? О: Фронтенд построен на React, бэкенд на Python (FastAPI), база данных и векторное хранилище на Supabase, а трейсинг и логирование микро-решений — через Langfuse.
Ресурсы и ссылки
Jev (Typescape / Type safe) — Decision engine и System 1 модель для принятия структурированных решений — упомянут в видео.
Langfuse — Open-source платформа для трейсинга, логирования и мониторинга LLM-приложений — https://langfuse.com
Supabase — Backend-as-a-service на базе PostgreSQL с поддержкой pgvector — https://supabase.com
AI Automators Community — Сообщество разработчиков и курс по Agentic RAG — упомянут в видео.
Конспект создан на основе видео «How To Build Smarter Agentic RAG Apps Using Jev» канала Dave Ebbelaar. Все права на оригинальный материал принадлежат авторам.Источник: https://www.youtube.com/watch?v=olIve0D8pJQ