Почему одной LLM недостаточно, как двухслойная валидация ловит ошибки модели, и сколько бизнес экономит на проверке договоров.

Что было в первой версии

Пару недель назад я рассказывал, как построил модульную систему промптов для YandexGPT. 32 тематических промпта, детекторы паттернов, калибровка по рынку. Система работала, находила риски, но вылезли проблемы:

  1. Ложные срабатывания — LLM иногда «видела» асимметрию там, где её не было

  2. Пропуски — некоторые паттерны (типа «1% в день за невывоз») проскакивали мимо

  3. Нет второго мнения — одна модель, одна точка отказа

Пример ложного срабатывания:

{
  "flag": "Асимметрия пеней: Покупатель 0.1%, Поставщик 0.1%",
  "danger": "HIGH"
}

Подождите. 0.1% vs 0.1% — это симметрия, не асимметрия. LLM ошиблась.

Решение: два слоя детекции

┌─────────────────────────────────────────────────────────────────┐
│                    ДВУХСЛОЙНАЯ ДЕТЕКЦИЯ                         │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Слой 1: LLM-анализ (YandexGPT или Claude)                      │
│  ├─ 32 тематических промпта                                     │
│  ├─ Возвращает: 8 блоков анализа + redFlags[]                   │
│  └─ Проблема: бывают false positives                            │
│                                                                 │
│  Слой 2: Текстовые детекторы (код)                              │
│  ├─ 25+ специализированных детекторов                           │
│  ├─ Численная валидация (ловит ошибки LLM)                      │
│  └─ Ссылки на нормы права (ГК РФ, ТК РФ)                        │
│                                                                 │
│  Результат: LLM-флаги + текстовые флаги → дедупликация          │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Как код ловит ошибки LLM

Текстовый детектор проверяет асимметрию численно:

function detectPenaltyAsymmetry(penalties): Flag | null {
  const party1Rate = parseFloat(penalties.party1?.rate || '0');
  const party2Rate = parseFloat(penalties.party2?.rate || '0');

  if (party1Rate === 0 || party2Rate === 0) return null;

  const ratio = Math.max(party1Rate, party2Rate) /
                Math.min(party1Rate, party2Rate);

  if (ratio < 3) return null; // Соотношение < 3:1 — не флагуем

  return {
    flag: `Асимметрия пеней ${ratio.toFixed(1)}:1`,
    danger: ratio >= 10 ? 'CRITICAL' : ratio >= 5 ? 'HIGH' : 'MEDIUM'
  };
}

Если LLM сказала «асимметрия», а код посчитал ratio < 3 — флаг LLM отбрасывается.

22 текстовых детектора

Детектор

Что ловит

Пример

penalty-asymmetry

Соотношение пеней ≥ 3:1

1% vs 0.1% = 10:1

high-penalty

Пеня ≥ 1%/день (365%/год)

«1% за каждый день»

contradictions

Противоречия между пунктами

«только самовывоз» vs «доставка»

missing-provisions

Отсутствие обязательных условий

Нет срока гарантии

termination

Асимметрия расторжения

Одна сторона — в любой момент

vague-terms

Размытые формулировки

«по согласованию сторон»

universal-traps

Молчание = согласие

«при отсутствии возражений...»

short-claim-period

Сокращённые сроки претензий

3 дня вместо 30

Почему добавил Claude

YandexGPT хорош, но у Claude оказался лучше «юридический reasoning». Прогнал один и тот же договор поставки через обе модели:

Метрика

YandexGPT

Claude

Найдено рисков

11

27

CRITICAL

2

5

HIGH

4

12

MEDIUM

5

10

Claude нашёл в 2.5 раза больше рисков на том же договоре.

Что нашёл Claude, а YandexGPT пропустил

1. Неустойка 1%/день за невывоз товара

В договоре:

«1% от стоимости несвоевременно вывезенного Товара за каждый день просрочки, но суммарно не более 2%»

YandexGPT увидел cap «не более 2%» и решил, что всё ок.

Claude понял: 1%/день = 365%/год — кабальное условие по ст. 333 ГК РФ, даже с cap'ом.

2. Противоречие между пунктами

  • П. 4.4: «Поставка осуществляется только путём самовывоза»

  • П. 6.2: «Поставщик организует доставку транспортной компанией»

YandexGPT не заметил. Claude флагнул как противоречие.

3. Антикоррупционная оговорка без адекватного срока

«Сторона обязана ответить на запрос в течение 10 дней, иначе другая сторона вправе приостановить исполнение»

Claude отметил: 10 дней — слишком короткий срок для серьёзной проверки, риск для добросовестной стороны.

Почему такая разница?

По нашим наблюдениям:

  1. Размер контекста — у Claude Opus контекст 200K токенов, он лучше видит связи между далёкими пунктами договора

  2. Качество reasoning — Claude лучше «понимает» юридическую логику, а не просто матчит паттерны

  3. Меньше галлюцинаций — реже выдумывает несуществующие риски

Стоимость токенов

Сравнение цен на 1M токенов (async режим):

Провайдер

Input

Output

YandexGPT Lite

100 ₽

100 ₽

YandexGPT Pro

600 ₽

600 ₽

YandexGPT Mixed (6/9 Pro + 3/9 Lite)

~433 ₽

~433 ₽

Claude Opus 4.5

~500 ₽ ($5)

~2500 ₽ ($25)

В «Эконом» режиме используется mixed стратегия — сложные блоки (parties, payments, penalties, Deep Risk) идут через YandexGPT Pro, простые через Lite.

Claude дороже, но разница в качестве ощутимая — особенно на сложных договорах (франшиза, IT, строительство).

Экономика для бизнеса

Зачем вообще это нужно? Вот сравнение:

Юрист

Legal Parser

Время

1-5 дней

1-2 минуты

Стоимость

15 000 - 50 000 ₽

299 - 499 ₽

Доступность

Рабочие часы

24/7

Повторный анализ

Платно

Новый кредит

Пример расчёта:

Компания проверяет 10 договоров в месяц.

  • Юрист: 10 × 20 000 ₽ = 200 000 ₽/месяц

  • Сервис: 10 × 499 ₽ = 4 990 ₽/месяц

  • Экономия: ~195 000 ₽/месяц или 2.3 млн ₽/год

Конечно, сервис не заменяет юриста полностью — сложные сделки всё равно требуют человека. Но для типовых договоров (аренда, поставка, услуги) AI справляется с первичной проверкой и выявляет большую часть рисков.

Как это работает для пользователя

  1. Загружаете договор (PDF, DOCX, DOC)

  2. Выбираете режим: «Эконом» (YandexGPT) или «Глубокий анализ» (Claude)

  3. Через 1-2 минуты получаете отчёт:

    • Стороны и их роли

    • Финансовые условия

    • Сроки и этапы

    • Риски с цветовой кодировкой (CRITICAL / HIGH / MEDIUM)

    • Ссылки на нормы ГК РФ

    • Рекомендации по каждому риску

Итоги

  1. Одной LLM недостаточно — нужна валидация кодом. Текстовые детекторы ловят ошибки любой модели.

  2. Claude находит больше — на том же договоре в 2.5 раза больше рисков. Для сложных договоров разница критична.

  3. Двухслойная архитектура — LLM для понимания контекста + код для численной проверки = меньше ложных срабатываний, меньше пропусков.

  4. Экономия для бизнеса реальная — 299-499 ₽ вместо 15-50K ₽ за проверку. При 10+ договорах в месяц окупается многократно.


Попробовать: legalparser.ru — 2 бесплатных анализа при регистрации. Можно сравнить «Эконом» и «Глубокий анализ» на своём договоре.

Вопросы про архитектуру, промпты, детекторы — в комментариях.