↩️ Назад

Категории

Нейросетевой юрист

21.10.2026 | из категории: Нейросети

Сервис - нейросетевой юрист
AI · LegalTech · Pet-проект

Закидываешь PDF — на выходе список красных флагов: скрытая подписка, кабальный пункт, штраф через 10 лет, который забирает бизнес. Ниже — архитектура, промпты, пайплайн и честный разговор о том, кому и зачем это нужно.

Читать: ~13 минут · Уровень: middle · Стек: Python, LLM API, RAG

Важно: это не замена юриста

Сервис — инструмент для юриста и вместе с юристом. Он не выносит заключений, не решает, что делать с договором, и не берёт на себя ответственность. Он делает первый проход по тексту: подсвечивает места, которые юристу и так пришлось бы искать руками.

Смысл ровно один: не тратить силы юриста на рутину. Найти знакомый паттерн на 40 страницах — это не юридическая работа, это механическое сканирование. Вот его и забирает машина. А решение «это ок / это правим / это выкидываем» остаётся за человеком.

1. Идея и границы продукта

Продукт — это скрининг первого прохода, а не юридическое заключение. Он не «выигрывает суд» и не «заменяет юриста» — он снимает с юриста ту часть работы, которую тот делает на автопилоте: глазами по тексту, в поисках знакомых до боли формулировок.

Что делает

Находит скрытые подписки и автосписание, кабальные штрафы, односторонний порядок изменения условий, невыгодные подсудности, «вечные» обязательства, автопродление, штрафы без вины, передачу прав на контент. И отдаёт это юристу уже размеченным.

Чего не делает

Не даёт заключений «этот договор незаконен целиком», не считает вероятности в суде, не решает, что делать с договором, не подписывает вместо вас. Это делает юрист — сервис лишь готовит ему материал.

Первый проход по договору на 40 страниц — это 1.5–3 часа работы, из которых почти всё время уходит на поиск знакомых паттернов, а не на юридическую мысль. Вот эту часть и забирает машина. Юрист открывает отчёт и сразу переходит к сути: подтверждает флаги, решает, что править, что выкидывать, что оставить.

Ключевой принцип: каждый красный флаг — это цитата из документа + ссылка на норму + объяснение простым языком + вопрос юристу. Никакого «доверяй модели на слово».

2. Пайплайн: от PDF до красных флагов

1

Загрузка и парсинг

PDF/DOCX/скан. Текстовый слой — через pdfplumber/PyMuPDF, сканы — OCR (Tesseract/PaddleOCR). Важно сохранить номера страниц и структуру: ссылка на цитату должна вести к конкретному месту.

2

Нормализация и нарезка на пункты

Договор режется не по токенам, а по смысловым единицам: пункт 1.1, 2.3, раздел «Ответственность». Регулярки по нумерации + fallback на семантический чанкинг. Каждый пункт получает id, номер страницы и «родительский раздел».

3

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

Модель определяет: услуги, подписка/SaaS, поставка, аренда, NDA, трудовой, лицензия. От типа зависят чек-листы красных флагов — у подписки одни триггеры, у аренды другие.

4

Детекция красных флагов (LLM по пунктам)

Каждый пункт (или небольшое окно из соседних) прогоняется через промпт с чек-листом. Модель возвращает JSON: тип риска, severity, цитата, объяснение, норма права, вопрос юристу. Пункты обрабатываются параллельно.

5

RAG-проверка норм

Найденные «нарушения» сверяются с базой норм и практики: не выдумала ли модель статью. Если норма не подтверждается — понижаем severity или помечаем как «требует проверки».

6

Сборка отчёта

Сортировка по severity, группировка по темам, сводка «на что обратить внимание в первую очередь», экспорт в PDF, копирование цитат, диплинки на страницы.

7

Обратная связь

Кнопки «полезно / ложная тревога» на каждом флаге. Для юриста это способ быстро обучить инструмент под свои типовые договоры, а для сервиса — главный источник улучшения 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Анализ долгий, нельзя держать запрос открытым
LLMAPI-модель с JSON-режимомStructured output важнее «ума» модели
Векторная базаpgvector / ChromaRAG по нормам и практике
БэкендFastAPIАсинхронность, быстрый старт
ФронтNext.js / SvelteKitPDF-вьюер с подсветкой цитат
Хранение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 — как считать

Severity задаётся правилом в коде (таблица «паттерн → уровень»), а модель только подтверждает наличие паттерна. Так проще отлаживать и объяснять.

5. RAG по законам и судебной практике

Чтобы ссылка на норму была настоящей, а не «примерно такой», нужна база:

  1. Индексируем тексты кодексов и ключевых ФЗ (ГК, ЗоЗПП, 152-ФЗ, 44-ФЗ и т.п.) в векторную базу.
  2. Для каждого флага ищем top-k релевантных норм по смыслу.
  3. Просим модель сверить: «подтверждается ли флаг этой нормой? да/нет/частично».
  4. Если «нет» — 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. День 1. Парсинг PDF → пункты с id и страницами. Проверить на 10 реальных договорах (SaaS-подписки, услуги, аренда).
  2. День 1. Чек-лист из 8–10 паттернов и JSON-схема флага.
  3. День 2. Промпт по пунктам, параллельный прогон, сборка JSON-отчёта.
  4. День 2. Telegram-бот: PDF на входе, отчёт с цитатами на выходе.
  5. День 2. 20 тестовых договоров руками → замер precision/recall по флагам.
  6. Дальше. 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, сверка норм, обратная связь и честный дисклеймер. Модель тут — быстрый читатель первого прохода, а не источник истины и не замена юристу. С этого скелета можно спокойно начинать своего помощника.

Статья-скелет для IT-блога. Код в примерах — псевдокод для иллюстрации архитектуры. Не является юридической консультацией и не заменяет юриста.
Теги: #LegalTech #LLM #python #RAG #нейросети #обработка_документов #промпт_инжиниринг



Категории:

Категории

← Назад к списку