Категории
Нейросетевой юрист
21.10.2026 | из категории: Нейросети
Закидываешь PDF — на выходе список красных флагов: скрытая подписка, кабальный пункт, штраф через 10 лет, который забирает бизнес. Ниже — архитектура, промпты, пайплайн и честный разговор о том, кому и зачем это нужно.
Важно: это не замена юриста
Сервис — инструмент для юриста и вместе с юристом. Он не выносит заключений, не решает, что делать с договором, и не берёт на себя ответственность. Он делает первый проход по тексту: подсвечивает места, которые юристу и так пришлось бы искать руками.
Смысл ровно один: не тратить силы юриста на рутину. Найти знакомый паттерн на 40 страницах — это не юридическая работа, это механическое сканирование. Вот его и забирает машина. А решение «это ок / это правим / это выкидываем» остаётся за человеком.
1. Идея и границы продукта
Продукт — это скрининг первого прохода, а не юридическое заключение. Он не «выигрывает суд» и не «заменяет юриста» — он снимает с юриста ту часть работы, которую тот делает на автопилоте: глазами по тексту, в поисках знакомых до боли формулировок.
Что делает
Находит скрытые подписки и автосписание, кабальные штрафы, односторонний порядок изменения условий, невыгодные подсудности, «вечные» обязательства, автопродление, штрафы без вины, передачу прав на контент. И отдаёт это юристу уже размеченным.
Чего не делает
Не даёт заключений «этот договор незаконен целиком», не считает вероятности в суде, не решает, что делать с договором, не подписывает вместо вас. Это делает юрист — сервис лишь готовит ему материал.
Первый проход по договору на 40 страниц — это 1.5–3 часа работы, из которых почти всё время уходит на поиск знакомых паттернов, а не на юридическую мысль. Вот эту часть и забирает машина. Юрист открывает отчёт и сразу переходит к сути: подтверждает флаги, решает, что править, что выкидывать, что оставить.
Ключевой принцип: каждый красный флаг — это цитата из документа + ссылка на норму + объяснение простым языком + вопрос юристу. Никакого «доверяй модели на слово».
2. Пайплайн: от PDF до красных флагов
Загрузка и парсинг
PDF/DOCX/скан. Текстовый слой — через pdfplumber/PyMuPDF, сканы — OCR (Tesseract/PaddleOCR). Важно сохранить номера страниц и структуру: ссылка на цитату должна вести к конкретному месту.
Нормализация и нарезка на пункты
Договор режется не по токенам, а по смысловым единицам: пункт 1.1, 2.3, раздел «Ответственность». Регулярки по нумерации + fallback на семантический чанкинг. Каждый пункт получает id, номер страницы и «родительский раздел».
Классификация типа договора
Модель определяет: услуги, подписка/SaaS, поставка, аренда, NDA, трудовой, лицензия. От типа зависят чек-листы красных флагов — у подписки одни триггеры, у аренды другие.
Детекция красных флагов (LLM по пунктам)
Каждый пункт (или небольшое окно из соседних) прогоняется через промпт с чек-листом. Модель возвращает JSON: тип риска, severity, цитата, объяснение, норма права, вопрос юристу. Пункты обрабатываются параллельно.
RAG-проверка норм
Найденные «нарушения» сверяются с базой норм и практики: не выдумала ли модель статью. Если норма не подтверждается — понижаем severity или помечаем как «требует проверки».
Сборка отчёта
Сортировка по severity, группировка по темам, сводка «на что обратить внимание в первую очередь», экспорт в PDF, копирование цитат, диплинки на страницы.
Обратная связь
Кнопки «полезно / ложная тревога» на каждом флаге. Для юриста это способ быстро обучить инструмент под свои типовые договоры, а для сервиса — главный источник улучшения precision. Без этого он умрёт от шума.
3. Архитектура и стек
Минимальная рабочая схема, которую можно поднять одному:
# скелет пайплайна (псевдокод) from fastapi import FastAPI, UploadFile from worker import parse, chunk, classify, detect_flags, verify_norms, build_report app = FastAPI() @app.post("/analyze") async def analyze(file: UploadFile): doc = await parse(file) # pdf → text + page map units = chunk(doc) # пункты с id и страницами kind = classify(doc) # тип договора flags = detect_flags(units, kind) # LLM по чек-листу flags = verify_norms(flags) # RAG-сверка с нормами return build_report(flags, doc.meta) # JSON / PDF
| Слой | Выбор для MVP | Почему |
|---|---|---|
| Парсинг | PyMuPDF + Tesseract | Быстро, локально, есть координаты текста |
| Очередь | Celery + Redis или просто asyncio | Анализ долгий, нельзя держать запрос открытым |
| LLM | API-модель с JSON-режимом | Structured output важнее «ума» модели |
| Векторная база | pgvector / Chroma | RAG по нормам и практике |
| Бэкенд | FastAPI | Асинхронность, быстрый старт |
| Фронт | Next.js / SvelteKit | PDF-вьюер с подсветкой цитат |
| Хранение | Postgres + S3 | Метаданные отдельно, файлы отдельно |
Лайфхак: для MVP не нужен свой фронт. Сделайте Telegram-бота: скинул PDF — получил отчёт. Это отсекает 80% работы над UI и сразу даёт канал сбыта.
4. Промпты и правила
Сердце сервиса — не модель, а чек-лист. Модель просто раскладывает текст по заранее продуманным категориям. Пример структуры флага:
{
"flag_id": "hidden_subscription",
"severity": "high", // low | medium | high
"clause": "7.3",
"page": 4,
"quote": "Абонентская плата продлевается автоматически...",
"explain": "Подписка продлевается сама, отказаться можно только за 30 дней",
"norm": "ст. 16 ЗоЗПП — условия, ущемляющие права потребителя",
"question": "Можно ли отказаться от автопродления в любой момент?",
"confidence": 0.86
}
Системный промпт (сокращённо):
# system Ты — ассистент юриста, который делает скрининг договора. Твоя задача — находить в тексте пункты из чек-листа и помечать их. Правила: 1. НЕ выдумывай нормы. Если не уверен в статье — norm = null. 2. Каждый флаг обязан содержать точную цитату из текста. 3. Если пункт неоднозначный — severity = "medium" и добавь вопрос юристу. 4. Не давай заключений "договор незаконен". Только "есть риск". 5. Отвечай строго JSON по схеме. # user Тип договора: {kind} Пункт {clause} (стр. {page}): {text} Чек-лист для этого типа: - hidden_subscription: автопродление, автосписание без явного согласия - unilateral_change: право менять условия в одностороннем порядке - perpetual_obligation: обязательства без срока / бессрочная ответственность - penalty_no_fault: штрафы независимо от вины - rights_transfer: передача прав на контент/данные - jurisdiction: невыгодная подсудность - termination_trap: расторжение только с санкцией / невозможно выйти
Анти-галлюцинационная прививка: никогда не просите модель «найди нарушение закона». Просите «найди пункт из списка паттернов». Разница между «объясни риск» и «назови статью» — это разница между полезным сервисом и генератором страшилок.
Severity — как считать
- low — неудобно, но некритично (автопродление с уведомлением).
- medium — требует внимания, возможны потери денег/времени.
- high — реальный риск потери бизнеса, активов, прав, «вечная кабала».
Severity задаётся правилом в коде (таблица «паттерн → уровень»), а модель только подтверждает наличие паттерна. Так проще отлаживать и объяснять.
5. RAG по законам и судебной практике
Чтобы ссылка на норму была настоящей, а не «примерно такой», нужна база:
- Индексируем тексты кодексов и ключевых ФЗ (ГК, ЗоЗПП, 152-ФЗ, 44-ФЗ и т.п.) в векторную базу.
- Для каждого флага ищем top-k релевантных норм по смыслу.
- Просим модель сверить: «подтверждается ли флаг этой нормой? да/нет/частично».
- Если «нет» — norm = null, severity понижается, в отчёт идёт пометка «требует проверки юристом».
# псевдокод сверки norms = vector_store.search(flag.quote + " " + flag.explain, k=5) verdict = llm.verify(flag=flag, norms=norms) # yes/no/partial if verdict != "yes": flag.norm = None flag.severity = downgrade(flag.severity) flag.note = "норма не подтверждена автоматически"
Практику (судебные акты) подключать на втором этапе: она тяжёлая, быстро устаревает и требует лицензий на источники. Для MVP достаточно норм.
6. Риски, галлюцинации и юридическая ответственность
| Риск | Как закрываем |
|---|---|
| Модель выдумала статью | RAG-сверка + norm: null при сомнении |
| Ложная тревога пугает пользователя | severity из правил, а не от модели; кнопка «ложная тревога» |
| Пропуск важного пункта | несколько проходов, окна соседних пунктов, чек-лист по типу договора |
| Утечка конфиденциального документа | шифрование, TTL хранения, удаление по кнопке, on-prem для B2B |
| «Сервис дал совет — я потерял деньги» | дисклеймер: это не юридическая услуга, а скрининг; отчёт — материал для юриста |
Юридическая услуга в ряде юрисдикций лицензируется. Позиционируйте продукт как инструмент анализа документов для юриста (как антивирус для текста), а не как «онлайн-юриста» и не как «замену юристу». И не называйте себя адвокатом в интерфейсе.
7. MVP за выходные: чек-лист
- День 1. Парсинг PDF → пункты с id и страницами. Проверить на 10 реальных договорах (SaaS-подписки, услуги, аренда).
- День 1. Чек-лист из 8–10 паттернов и JSON-схема флага.
- День 2. Промпт по пунктам, параллельный прогон, сборка JSON-отчёта.
- День 2. Telegram-бот: PDF на входе, отчёт с цитатами на выходе.
- День 2. 20 тестовых договоров руками → замер precision/recall по флагам.
- Дальше. RAG по нормам, PDF-отчёт, кнопки обратной связи, B2B-кабинет.
Метрики, которые важны с первого дня: precision (доля флагов, которые юрист признал полезными) и время до отчёта. Recall доберёте чек-листом, precision — обратной связью.
8. Кому и зачем: монетизация и развитие
Покупатель — не «человек, который хочет заменить юриста», а сам юрист и юрдепартамент. И считают они не «замену», а сэкономленные часы первого прохода. Поэтому и в B2C, и в B2B продукт продаётся как ускоритель рутины, а не как конкурент профессии.
B2C (фрилансеры, малый бизнес)
Разовая проверка договора / подписка на N документов в месяц. Триггер — «подписываю договор с агрегатором, страшно». Отчёт идёт юристу или используется как второй взгляд.
B2B (юрдепартаменты, банки, маркетплейсы, HR)
API и кабинет: автопроверка типовых договоров, флаги в CRM/ЭДО, on-prem для конфиденциальных документов. Главное — разгрузка юристов, а не их сокращение.
Рост продукта
Сравнение версий договора, «что изменилось», генерация правок, шаблоны безопасных формулировок, интеграция с ЭДО, обучение под типовые договоры конкретной компании.
Защита от конкурентов
Не модель, а размеченный датасет ложных тревог + библиотека паттернов по типам договоров. Это накапливается годами и подстраивается под клиента.
Мини-расчёт ROI для юрдепартамента
| Договоров в месяц на одного юриста | 40 |
| Среднее время первого прохода | 2 ч |
| Экономия времени с сервисом | 60% |
| Сэкономленные часы в месяц | 48 ч |
| Стоимость часа юриста (условно) | 3 000 ₽ |
| Экономия в месяц | 144 000 ₽ |
| Подписка на сервис | 20 000 ₽ |
| Чистый эффект | +124 000 ₽ / мес |
Цифры условные — для иллюстрации логики. Продаёт не «замена юриста», а «юрист успевает больше договоров и меньше выгорает».
Главный вывод: такой сервис делается не «одним промптом», а дисциплиной — чек-листы, structured output, сверка норм, обратная связь и честный дисклеймер. Модель тут — быстрый читатель первого прохода, а не источник истины и не замена юристу. С этого скелета можно спокойно начинать своего помощника.