Нейросеть для юристов: почему AI выдумывает нормы права и как мы это исправляли

Попросите нейросеть написать возражение на судебный приказ — и модель уверенно сошлётся на «ст. 128.1 ГПК РФ», которой не существует. В мае 2026-го такая ссылка уже стоила реальных денег: Арбитражный суд Западно-Сибирского округа оштрафовал ООО «ЦСС» на 50 000 рублей (дело А27-7831/2025) за кассационную жалобу, где были ссылки на несуществующие постановления ВС РФ, ВАС РФ и трёх окружных судов — с цитатами, «прямо подтверждающими» позицию. Это, насколько известно, первый такой штраф в России. Суд написал прямо: «подготовка кассационной жалобы с помощью технологий искусственного интеллекта… не является оправданием… ответственность за достоверность сгенерированного текста несёт лицо, использовавшее технологию».

Мы запустили dzin.pro — сервис, где AI делает юридический документ за 550 рублей. И главный вопрос, который мы решали три месяца, был не «как генерировать», а «как не отдать клиенту документ с выдуманной нормой права».

Дальше — стек, три слоя защиты от галлюцинаций, честные цифры воронки и то, о чём в AI-кейсах обычно молчат.

Сразу про автора, потому что это меняет прочтение всего дальнейшего

Я юрист с 2004 года. Программировать на момент старта не умел — вообще.

Идея dzin.pro выросла из дипломной работы по MBA в Высшей школе экономики. Я искал, где в B2C-праве самый большой разрыв между «задача типовая, решается по шаблону» и «человек всё равно несёт юристу 5–10 тысяч». Отмена судебного приказа оказалась идеальным кандидатом: массово, типово, жёсткий срок в 10 дней, понятный результат. Из этого выросла гипотеза пошире — массовые типовые юруслуги можно автоматизировать пачкой узких сервисов, и одна инфраструктура потянет их все.

Проблема была банальная: придумать сервис юрист может, а собрать — нет. То, что в итоге заработало, стало возможно из-за одной вещи — Claude Code. Бэкенд на Node.js, Docker, очередь генерации, интеграции с OCR и платежами я писал не «как программист», а как юрист, который формулирует задачу и проверяет результат. Это и оказалось тем мостом между «знаю, какой документ нужен суду» и «умею это задеплоить», которого у людей моей профессии раньше просто не было. Первый коммит — «скелет Telegram-бота dzin.pro» — лёг 12 марта 2026 года. Сейчас, спустя три месяца, это 1002 коммита, четыре работающих сервиса и три слоя защиты от галлюцинаций.

Дальше я по привычке пишу «мы», но за этим «мы» — я и набор AI-инструментов. Команды в классическом смысле нет.

Откуда берётся «17–33% галлюцинаций» в юридическом AI

Stanford RegLab в исследовании «Hallucination-Free? Assessing the Reliability of Leading AI Legal Research Tools» (2025) проверил не сырые LLM, а ведущие коммерческие юр-инструменты с retrieval — те самые, что и должны были закрыть проблему. Результат: Lexis+ AI выдумывал в 17% запросов, Westlaw AI-Assisted Research — в 33%, а GPT-4 без обвязки — в 43%. Это не «ошиблась в дате» — это полностью выдуманные нормы, прецеденты и цитаты.

Для документа клиенту это переводится так: с вероятностью 17–33% в PDF будет ссылка на статью, которой нет. Судья откроет — увидит. Клиент проиграет. На массовой воронке такой паттерн сжигает доверие за месяц.

Поэтому мы сразу отказались от идеи «универсального юр-AI». Один документ — один микросервис — один whitelist допустимых норм. Инфраструктура позволяет добавлять услуги быстро, но никогда без жёсткой границы того, на что AI имеет право сослаться.

Что мы запустили

dzin.pro сегодня — четыре активных микросервиса, по 550 рублей за документ:

возражение на судебный приказ — главный продукт, ~60% трафика

неустойка по ДДУ — с расчётом по ключевой ставке ЦБ и учётом моратория 2020–2025.

Сценарий пользователя — 3–10 минут: загружает фото или скан исходного документа → AI извлекает данные → подтверждает их с пользователем → оплата через ЮKassa → готовый PDF в email и Telegram. Без юриста, формы на 40 полей и звонка «менеджера».

Рыночная вилка за такой документ у юриста — 3 000–15 000 рублей. Бесплатные шаблоны из интернета — без персонализации и с «вписать сюда» на полстраницы. Мы садимся ровно между.

Стек: сознательно дёшево, сознательно банально

Мы не нанимали ML-инженеров и не разворачивали свою инференс-инфраструктуру. Стек собран из того, что любой Node.js-разработчик поднимет за неделю:

• WordPress + собственный плагин dzin-core — SEO-витрина и форма заявки, основной канал

• Node.js + grammy — Telegram-бот @Dzinpro_bot

YandexGPT Lite — извлечение данных из OCR-текста (~1400 токенов на запрос)

• YandexGPT Pro — генерация финального документа (~850 токенов)

Yandex Cloud Vision OCR — распознавание фото приказов и претензий

• pdf-lib + Liberation Sans — рендер PDF с кириллицей

Yandex Managed Service for PostgreSQL — заказы, клиенты, логи генерации

• Yandex SMTP, Resend как fallback — доставка PDF на email

• Docker на одной VM Yandex Cloud — всё хозяйство.

Здесь стоит снять путаницу, которую я мог создать выше: Claude Code, на котором написан код, — это инструмент разработки, а не движок продукта. В самом продукте работает YandexGPT. Почему именно он, а не Claude или GPT-4, — три причины. Первая: 152-ФЗ требует хранить персональные данные граждан РФ внутри страны, Yandex Cloud это закрывает по умолчанию. Вторая: на наших длинных промптах он выходит в несколько раз дешевле. Третья: латентность стабильнее без VPN-прокси.

Один HTTP-сервер обслуживает и Telegram-вебхук, и REST для сайта. Бизнес-логика лежит в transport-agnostic ядре, Telegram и веб — просто адаптеры. Новый канал доставки можно подключить, не трогая ядро.

Три слоя защиты от галлюцинаций

Ради этого всё и затевалось.

Слой 1. Whitelist допустимых норм для каждого сервиса

Каждый сервис описан JSON-контрактом services/.json. В нём есть поле legal_whitelist — закрытый список норм, на которые AI имеет право сослаться.

Для возражений на судебный приказ это узкий набор из ГПК — ст. 128, ст. 129 — и редко ГК. Для защиты прав потребителей — ЗоЗПП (ст. 18, 22, 23, 28, 29). Для ДДУ — 214-ФЗ ст. 6, ПП 2227 (мораторий), ст. 332 ГК. Для алиментов — СК РФ ст. 81, 83, 107. Плюс к статьям кодексов — выдержки из постановлений Пленума Верховного Суда по этим категориям дел: разъяснения высшей инстанции, на которые суды реально опираются. Больше — ничего.

Любая попытка модели сослаться на что-то вне whitelist — сигнал галлюцинации, в таком виде документ не уходит. Whitelist я собрал вручную — сам, как практикующий юрист, а не отдал на разметку подрядчику — после анализа реальной судебной практики по каждой нише. Это не «весь ГПК», это «вот восемь норм, которые реально работают для отмены приказа». Узко — значит контролируемо. И человек-в-петле здесь не модератор за тридцать тысяч, а специалист с двадцатилетним стажем.

Слой 2. Полные тексты норм прямо в системном промпте

Знать ст. 129 ГПК «по названию» — полпути. Чтобы модель не пересказала её своими словами с искажениями, мы заливаем полный текст статьи прямо в системный промпт. В репозитории лежит knowledge/legal-reference.md — 31 статья из всех whitelist'ов (ГПК, СК, ЗоЗПП, ГК), полные тексты в актуальной редакции.

Модель не «вспоминает» норму из претрейна — она цитирует подсунутый ей кусок. Это резко снижает вероятность того, что в финальном документе появится «ст. 128.1, часть 4», которой нет.

Цена: +1500–2500 токенов на запрос, примерно +30% к стоимости генерации. Эффект: в продакшен-документах стоят реальные ссылки.

Слой 3. Пост-валидатор и логи

После того как модель отдала черновик, отдельный код проходит по тексту регуляркой и собирает все упоминания статей. Каждое сверяется с whitelist'ом сервиса. Если AI всё-таки изобрёл «ст. 130 ГПК» — генерация уходит на ретрай с явной инструкцией «не используй ст. 130, её нет в whitelist». При повторном фейле — тревога в админ-канал.

Все цитаты и метаданные генерации (модель, токены, время) пишутся в generation_logs. Это датасет для оптимизации промптов: через два месяца после запуска мы по логам нашли, что в 4% случаев модель ломала формат даты «ДД.ММ.ГГГГ» — починили правкой промпта, не трогая архитектуру.

Архитектура «один бот — N сервисов»: service registry

Когда мы стали добавлять второй, третий, четвёртый сервис, стало очевидно: прописывать логику каждого сервиса прямо в коде, руками, под каждый домен — путь в ад. Решение — service registry.

Каждый сервис — JSON-файл с пятью секциями:

• input_schema — какие поля нужны от пользователя (для алиментов — данные второго родителя и ребёнка, для ДДУ — данные застройщика и срок передачи квартиры)

• legal_whitelist — список допустимых норм

• deadline_rules — правила расчёта сроков (для приказа — 10 календарных дней с момента получения копии)

• price_rules — цена, валюта, способ оплаты

• wp_template — шаблон страницы на сайте.

Бот и WordPress читают один и тот же контракт. Чтобы добавить пятый сервис, не нужно править код — достаточно положить новый JSON в services/ и две доменные подсказки в промпты генерации. На третьем и четвёртом сервисах это сэкономило нам около двух месяцев разработки.

Честные цифры воронки

• Средний чек: 550 рублей.

• Время от загрузки фото до готового PDF в email: 4–7 минут (OCR + генерация + подтверждение с клиентом + рендер PDF).

• Себестоимость одной генерации на нашей стороне: 1,5–4 ₽ (YandexGPT + Yandex OCR). По себестоимости маржа почти стопроцентная.

• Yandex Direct CPC на запросах «отмена судебного приказа»: 9–14 ₽. Расчётный CAC по этой модели — около 420 ₽ при чеке 550. После эквайринга и генерации на руках остаётся ~100 ₽ — то есть окно для манёвра в десятки рублей.

• Доля мобильного трафика: 82%. Поэтому всё делается mobile-first: sticky CTA, LCP до 2,5 секунд.

Главную цифру мы сознательно не прячем: на текущем объёме платный канал в плюс пока не вышел. При CAC ~420 ₽ и марже после привлечения ~100 ₽ любая просадка качества лендинга — и юнит-экономика рассыпается. Поэтому ставку второго квартала мы переносим с Директа на SEO, контент и партнёрские каналы. Об этом — ниже.

Что не работает (и о чём не пишут в AI-кейсах)

Мы запускались в шесть итераций, и каждая ловила свой сюрприз.

HEIC от iPhone. Yandex OCR не принимает формат HEIC. А это половина мобильного трафика: iPhone-пользователь жмёт «загрузите фото приказа», фото молча не доходит, человек уходит. Конверсия проседала, и мы не понимали почему — пока не воспроизвели с собственного iPhone. Сейчас на фронте конвертируем в JPEG через canvas до отправки.

Telegram периодически недоступен с РФ-облаков. В мае с Yandex Cloud вызов setWebhook к api.telegram.org ушёл в ETIMEDOUT, HTTP-сервер упал по Fatal-исключению — и вместе с ботом лёг REST для сайта, то есть основной канал. Хотфикс: ошибку setWebhook сделали non-fatal, ретрай ушёл в фон. Урок банальный и дорогой: внешний вызов на старте процесса не должен иметь права уронить весь сервер.

Платный трафик при чеке 550 ₽ почти не окупается. Это не баг конкретной кампании, это структура: дешёвый продукт + дорогой клик = околонулевая маржа после привлечения. Масштабировать платный канал в такой математике бессмысленно — поэтому весь следующий квартал мы вкладываем в органику и контент, а не в ставки Директа.

Куда идём дальше

Следующие микросервисы — трудовые споры (невыдача трудовой книжки, неоплаченная переработка) и кредитные (расторжение, оспаривание комиссий). Доменно — та же схема: узкая ниша, узкий whitelist, отдельный JSON-контракт.

Параллельно — калькулятор госпошлины в суд (40–70 тысяч запросов в Wordstat в месяц, дешёвый SEO-актив) и контент-кластер из 30+ статей в собственном блоге. Цель — развернуть соотношение платных и органических заявок в сторону органики, потому что в нашей юнит-экономике это единственный устойчивый канал.

Если забирать из кейса одну инженерную идею — она простая. Не делайте универсальный AI-сервис. Сделайте узкий микросервис с whitelist'ом домена. Модель начинает галлюцинировать ровно там, где у неё нет ограничений на пространство ответа. Закройте пространство — и галлюцинаций станет на порядок меньше. Это работает не только в юр-AI: то же верно для медицины, бухгалтерии, налоговых консультаций, страхования — везде, где «правильность» важнее «полноты охвата».

И ещё одна, уже не инженерная. Раньше, чтобы превратить отраслевую экспертизу в работающий продукт, юристу (врачу, бухгалтеру) нужен был технический сооснователь. Сейчас между «я знаю, как надо» и «я это задеплоил» стоит AI-инструмент разработки. Я — живой пример того, что этот мост работает.

Сайт — dzin.pro,
форма заявки — dzin.pro/zayavka,
Telegram-бот — @Dzinpro_bot.

Будем рады обратной связи в комментариях — особенно если делаете похожие узкие AI-микросервисы в своей области.

1