Русский · English · Документация
Юридический ассистент по российскому праву. Отвечает на вопрос и приводит ссылки на конкретные нормы, каждую из которых отдельно проверяет модель. Если подтверждения в законе нет, то сообщает об этом.
git clone https://github.com/DrobyshevDev/praxis.git
cd praxis
docker compose up appОткрыть http://localhost:8077. Ни ключей, ни GPU, ни сети: образ ставит extra api,
поднимает PRAXIS_OFFLINE=1 и несёт корпус внутри себя, поэтому детерминированные
компоненты работают без единого обращения наружу, а ответ по умолчанию экстрактивный —
дословный текст норм.
Это срез «скачал и запустил», а не продовое качество. Плотный поиск, реранкер и
NLI-проверка цитат требуют extra ml и предпочитают GPU — как их поднять, написано в
docs/DEVELOPMENT.md. Синтезирующий режим подключается через
ANTHROPIC_API_KEY и остаётся необязательным: поиск работает без него.
HTTP-API и Python-клиент — docs/API.md.
У юристов сейчас три варианта, и каждый неудобен по-своему.
ChatGPT и другие модели общего назначения выдумывают: ссылаются на несуществующие статьи, путают редакции, ошибаются уверенно. В работе такому доверять нельзя, цена ошибки — проигранное дело или финансовые убытки.
КонсультантПлюс и Гарант дают поиск по документам, а не ответ. Сопоставление норм и вывод юрист делает сам, подписка стоит дорого.
Поисковики отдают форумы, устаревшие редакции и SEO-мусор.
Между этими вариантами пусто. Нет инструмента, который отвечает на вопрос достаточно быстро или со скоростью модели, но со ссылками, которые можно открыть и проверить. Это место проект Praxis и занимает.
Юристы и юрисконсульты малого и среднего бизнеса без доступа к дорогим справочным системам. Бухгалтеры и кадровики с вопросами по НК, ТК и КоАП. ИП и основатели. Физлица с бытовыми спорами.
На первом этапе выбран российский рынок: по нормативке доступны данные, более понятна целевая аудитория и насущные проблемы. Ту же архитектуру можно перенести на право ЕС и США, где открытых данных ещё больше (EUR-Lex, CourtListener, Caselaw Access Project).
Вопрос идёт через агента, который планирует поиск. Дальше гибридный поиск по корпусу норм (BM25 + плотные эмбеддинги), реранкер отбирает лучшее, связанные по ссылкам нормы дотягиваются через граф «статья → статья». Генератор собирает ответ, где каждое утверждение привязано к норме, и Citation Verifier проверяет каждую привязку.
Что отличает Praxis от обёртки над «chat-with-PDF»:
Citation Verifier. Каждую ссылку отдельная NLI-модель проверяет на entailment: подтверждает ли текст нормы конкретный тезис. Неподтверждённое не подаётся как факт.
Agentic self-RAG. Сложный вопрос агент разбивает на под-запросы, до-ищет и переформулирует, пока не наберёт оснований. Ход рассуждения виден в ответе.
GraphRAG. Нормы ссылаются друг на друга («в соответствии со статьёй 15»). Это готовый граф: вопрос про убытки поднимает ст. 393, а граф дотягивает упомянутую в ней ст. 15.
Экстрактивный режим по умолчанию. Без ключа к LLM Praxis не сочиняет текст, а дословно приводит применимые нормы со ссылками — такой ответ не может галлюцинировать. Синтез через Claude включается ключом и проходит ту же проверку цитат по каждому предложению.
Оценка качества. Метрики (recall@k, MRR, citation precision) считаются на golden set, а не оцениваются на глаз.
Поверх поиска — прикладные задачи, которые превращают ответ в действие. Всё грунтовано по нормам: документы цитируют реально найденные нормы дословно, у калькуляторов и пунктов чек-листа — ссылка на статью-основание.
- Слой доверия. У каждой нормы ссылка «сверить с действующей редакцией» (zakonrf.info) и реквизиты акта (номер ФЗ и дата). При низкой уверенности — честное «прямого ответа не нашлось» вместо натянутого ответа.
- Претензия и исковое заявление (
/v1/claim,/v1/lawsuit). Правовое обоснование собирается из процитированных норм, требования, подсудность и госпошлина — статутные блоки, факты дела — плейсхолдеры. - Калькуляторы со ссылкой на норму (
/v1/penalty,/v1/fee,/v1/interest): неустойка потребителю (ст. 23 / 28 ЗоЗПП), госпошлина в суд (ст. 333.19 / 333.36 НК), проценты по ст. 395 ГК. - Чек-лист договора (
/v1/contract) — прозрачная проверка существенных условий и рискованных пунктов по нормам: не «ИИ-анализ», а явные правила, каждый пункт со ссылкой.
В корпус добавлен Закон о защите прав потребителей (corpus/zozpp.json) — ключевой
закон для потребительских споров, на который опираются эти задачи.
Калькуляторы и чек-лист работают полностью в браузере — попробовать без установки можно на демке: drobyshevdev.github.io/praxis/try. Эндпоинты и примеры — docs/API.md.
Нормативные данные доступны. Кодексы и федеральные законы есть в машиночитаемом виде на
pravo.gov.ru. На этом построен основной сценарий: в репозитории лежит парсер официального
текста (statute_parser) и образец корпуса ГК; полный корпус подключается тем же путём.
В репозитории лежат шесть кодексов, подключаются через PRAXIS_CORPUS_DIR:
| Файл | Кодекс |
|---|---|
corpus/gk-rf.json |
Гражданский — 1712 статей, 4717 норм, все четыре части |
corpus/nk-rf.json |
Налоговый |
corpus/koap-rf.json |
Об административных правонарушениях |
corpus/uk-rf.json |
Уголовный |
corpus/tk-rf.json |
Трудовой |
corpus/zhk-rf.json |
Жилищный |
Все шесть — транскрипции с Викитеки, о чём говорит поле edition в каждом файле.
Актуальность редакции нужно сверять с pravo.gov.ru: это то, для чего в репозитории
лежит парсер официального текста.
Тексты кодексов — официальные документы, и по п. 6 ст. 1259 ГК РФ объектами авторских прав не являются. Apache-2.0 в этом репозитории покрывает код, парсер, граф перекрёстных ссылок и разметку корпуса, а не сами тексты законов.
Судебная практика сложнее. Открытого структурированного корпуса уровня Caselaw Access для России нет, kad.arbitr и ГАС «Правосудие» отдают данные тяжело. Это следующий этап, отдельным пайплайном.
Прогон eval-харнесса по golden set (12 вопросов, praxis-eval):
| Метрика | Реальные модели (RTX 4060) | Офлайн-fallback |
|---|---|---|
| recall@5 | 1.00 | 1.00 |
| MRR | 1.00 | 0.90 |
| hit-rate | 1.00 | 1.00 |
| mean confidence | 0.88 | 0.63 |
| citation precision | 0.29 | 0.40 |
Реальные модели: BGE-M3 (эмбеддинги), bge-reranker-v2-m3 (реранк), rubert-NLI (проверка цитат), всё на GPU. Нужная норма всегда попадает в топ выдачи. Citation precision занижен потому, что в golden по одной эталонной статье на вопрос, а система приводит и смежные релевантные нормы. Это чинится разметкой с несколькими верными статьями на вопрос.
На полном корпусе ГК (4717 норм, golden из 18 вопросов) реальные модели держат recall@5 0.92, MRR 0.94, hit-rate 1.0, уверенность 0.80. Офлайн-fallback на таком объёме падает до recall 0.64 — на реальных данных без настоящих моделей не обойтись.
- v0. Скелет, доменные модели, легал-aware чанкинг, baseline BM25. Готово.
- v1. Гибридный поиск и реранк, Citation Verifier, self-RAG, eval, FastAPI и веб-UI. Готово. Каждый ML-компонент имеет реальную реализацию на GPU или через Claude и детерминированный офлайн-fallback.
- v2. Реальная ингестия официального текста, GraphRAG по перекрёстным ссылкам, прогон на GPU. Готово.
- v3. Полный корпус кодексов и ФЗ с pravo.gov.ru, судебная практика и граф «норма ↔ дела», span-level подсветка цитат в UI, расширенный golden set.
- v4. Полный ГК выгружен и лежит в репозитории, открытый API (
/v1) с CORS и Python-клиентом, конкурентный анализ. Desktop и mobile на том же API — следующий шаг.
Как запускать — docs/DEVELOPMENT.md.
Python 3.12, FastAPI, Postgres с pgvector, Docker. Поиск: BM25 и плотные эмбеддинги BGE-M3, реранкер bge-reranker-v2-m3. Проверка цитат: NLI на GPU. LLM подключается через провайдера: Claude для синтеза, RU-провайдеры (GigaChat, YandexGPT) для сценариев с требованием резидентности.
Проект использует две библиотеки той же организации:
glia — агентный цикл в LLM-режиме (поиск оформлен
как glia-инструмент, трейс из trajectory); mlango —
трекаемый golden-eval через его подсистему evals (integrations/mlango_eval,
manage.py evaluate).
Архитектура — ARCHITECTURE.md.
Всё открыто (Apache-2.0) и работает локально без сторонних токенов. Базовый функционал — поиск, проверка цитат, ответы — не требует ни ключей, ни платных сервисов: локальные модели скачиваются с HuggingFace бесплатно, ответ по умолчанию экстрактивный (дословный текст норм). Claude — необязательная опция для синтеза, а не условие работы. Платные фичи и подписка — на будущее.
Одно API-ядро (/v1) обслуживает все клиенты: веб-UI сейчас, desktop и mobile как тонкие
клиенты на том же API дальше. Для ML-специалистов открытый API с CORS, OpenAPI-схемой и
Python-клиентом — docs/API.md.
Конкурентный анализ и плюсы проекта — docs/COMPETITIVE.md.
Это не юридическая консультация. Praxis находит нормы и проверяет, что цитата подтверждает утверждение. Он не оценивает вашу ситуацию, не учитывает процессуальный контекст и не заменяет юриста.