Модуль: Lex / Architecture
Версия: 1.0
Дата: Январь 2026
1.1 Обзор архитектуры
Принципы проектирования
| Принцип | Описание |
|---|---|
| Reuse Infrastructure | Использование инфраструктуры Watcher (агенты, Task Dispatcher) |
| AI-First | Фильтрация, классификация и резюмирование через LLM |
| Knowledge-Centric | Все документы индексируются в Knowledge Base для RAG |
| Event-Driven | Алерты генерируются при обнаружении релевантных документов |
| Configurable | Ключевые слова и пороги настраиваются администратором |
Ключевая особенность
Lex не имеет собственных агентов — задачи парсинга добавляются в очередь Watcher и выполняются теми же агентами в ночное время. Это обеспечивает:- Отсутствие дублирования инфраструктуры
- Единое управление агентами
- Общий пул ресурсов (IP-адреса, вычислительные мощности)
- Упрощённое администрирование
1.2 Границы модуля
Входит в модуль Lex
| Компонент | Описание |
|---|---|
| Task Generator | Формирование задач парсинга для Watcher |
| Source Adapters | Адаптеры для КонсультантПлюс и Гарант |
| AI Filter | Оценка релевантности документа (GPT-5 mini) |
| AI Classifier | Определение категории и уровня релевантности |
| AI Summarizer | Генерация резюме документа |
| Document Formatter | Формирование Markdown для Knowledge Base |
| Alert Engine | Генерация алертов о новых документах |
| REST API | Endpoints для управления модулем |
| Open WebUI Pipeline | Интерфейс @Adolf_Lex |
| Manual Upload Handler | Обработка ручной загрузки документов |
Не входит в модуль Lex (используется из других модулей)
| Компонент | Где реализовано | Тип взаимодействия |
|---|---|---|
| Watcher Agents | ADOLF Watcher | Выполнение задач парсинга |
| Task Dispatcher | ADOLF Watcher | Распределение задач |
| IP Semaphore | ADOLF Watcher | Предотвращение коллизий |
| Knowledge Base | ADOLF Knowledge | Хранение документов |
| RAG Pipeline | ADOLF Knowledge | Поиск по документам |
| ETL | ADOLF Core | Индексация документов в KB |
| Авторизация | ADOLF Core (Middleware) | Проверка ролей |
| PostgreSQL | ADOLF Core | Метаданные, алерты, настройки |
| Notifications | ADOLF Core | Отправка алертов |
| Celery | ADOLF Core | Фоновые задачи |
Функционал v2.0 (не входит в MVP)
| Компонент | Описание |
|---|---|
| Additional Sources | 6 дополнительных источников (pravo.gov.ru, ФНС и др.) |
| Deadline Reminders | Напоминания о сроках вступления в силу |
| Reputation Integration | Подсказки статей закона при ответе на претензию |
| Content Factory Integration | Проверка описаний на соответствие требованиям |
| CFO Integration | Алерты об изменениях налогового законодательства |
| Weekly Digest | Еженедельный дайджест изменений |
| Version Compare | Сравнение версий документа |
1.3 Архитектура модуля
1.3.1 Общая схема
1.3.2 Схема потока данных
1.3.3 Схема компонентов
1.4 Зависимости от ADOLF Watcher
1.4.1 Используемые компоненты
| Компонент Watcher | Использование в Lex | Модификации |
|---|---|---|
| Task Dispatcher | Распределение задач парсинга | Новый тип задач lex_parse |
| Task Queue (Redis) | Очередь задач | Общая очередь с Watcher |
| Watcher Agents | Выполнение парсинга | Без изменений |
| AI Parser | Базовое извлечение текста | Расширен для правовых документов |
| IP Semaphore | Предотвращение коллизий | Без изменений |
1.4.2 Интеграция с Task Dispatcher
1.4.3 Типы задач
| Тип задачи | Очередь | Источник | Обработчик |
|---|---|---|---|
watcher_parse | task_queue:watcher | WB, Ozon, YM | Watcher AI Parser |
lex_parse | task_queue:lex | КонсультантПлюс, Гарант | Lex AI Pipeline |
1.4.4 Отличия от задач Watcher
| Параметр | Watcher Task | Lex Task |
|---|---|---|
| Cookies | Требуются (менеджера МП) | Не требуются |
| Эмуляция поведения | Полная (scroll, mouse) | Минимальная |
| Output | JSON → PostgreSQL | Markdown → Knowledge Base |
| AI-обработка | Извлечение структурированных данных | Фильтрация + резюме |
| Приоритет | Высокий (ценовой мониторинг) | Средний |
1.5 Зависимости от ADOLF Knowledge
1.5.1 Используемые компоненты
| Компонент Knowledge | Использование в Lex |
|---|---|
| Timeweb KB | Хранение полных текстов документов |
| RAG Pipeline | Поиск по правовым документам |
| ETL | Индексация новых документов |
| Document Metadata | Структура YAML-заголовка |
1.5.2 Формат документа для KB
1.5.3 Интеграция с RAG Pipeline
1.6 Зависимости от ADOLF Core
1.6.1 Middleware (FastAPI)
| Возможность | Применение в Lex |
|---|---|
| Авторизация | Проверка role IN (manager, senior, director, admin) |
| Идентификация | Получение user_id, role из сессии |
| Роутинг | Регистрация endpoints /api/v1/lex/* |
| Аудит | Логирование действий в audit_log |
1.6.2 PostgreSQL
Используемые таблицы (существующие):| Таблица | Назначение |
|---|---|
users | Роль пользователя, проверка доступа |
audit_log | Логи всех действий |
notifications | Уведомления (алерты) |
| Таблица | Назначение |
|---|---|
lex_documents | Метаданные документов |
lex_alerts | История алертов |
lex_keywords | Ключевые слова для фильтрации |
lex_sources | Источники данных |
lex_settings | Настройки модуля |
lex_statistics | Статистика сбора |
1.6.3 Celery
Фоновые задачи:| Задача | Расписание | Описание |
|---|---|---|
lex.generate_tasks | 20:30 (до старта Watcher) | Генерация задач парсинга |
lex.process_results | Continuous | Обработка результатов парсинга |
lex.cleanup_old_alerts | 03:00 ежедневно | Очистка старых алертов |
lex.generate_statistics | 08:00 ежедневно | Формирование статистики |
1.6.4 Notifications
События для уведомлений:| Событие | Тип | Уровень | Получатели |
|---|---|---|---|
lex.new_law | Новый закон | info | Manager+ |
lex.amendment | Изменение НПА | warning | Manager+ |
lex.court_decision | Судебное решение | info | Manager+ |
lex.clarification | Разъяснение госоргана | info | Manager+ |
lex.effective_soon | Скоро вступает в силу | warning | Manager+ |
lex.marketplace_mention | Упоминание МП | info | Manager+ |
lex.parse_error | Ошибка парсинга | critical | Admin |
lex.source_unavailable | Источник недоступен | critical | Admin |
1.7 Потоки данных
1.7.1 Автоматический сбор документов
1.7.2 Ручная загрузка документа
1.7.3 Запрос алертов
1.8 REST API
1.8.1 Endpoints
| Метод | Endpoint | Описание | Доступ |
|---|---|---|---|
| GET | /api/v1/lex/alerts | Список алертов | Manager+ |
| GET | /api/v1/lex/alerts/{id} | Детали алерта | Manager+ |
| PATCH | /api/v1/lex/alerts/{id} | Отметить прочитанным | Manager+ |
| GET | /api/v1/lex/documents | Список документов | Manager+ |
| GET | /api/v1/lex/documents/{id} | Детали документа | Manager+ |
| POST | /api/v1/lex/upload | Ручная загрузка | Senior+ |
| DELETE | /api/v1/lex/documents/{id} | Удалить документ | Senior+ |
| GET | /api/v1/lex/statistics | Статистика | Manager+ |
| GET | /api/v1/lex/keywords | Список ключевых слов | Manager+ |
| PUT | /api/v1/lex/keywords | Обновить ключевые слова | Admin |
| GET | /api/v1/lex/settings | Настройки модуля | Admin |
| PUT | /api/v1/lex/settings | Обновить настройки | Admin |
| GET | /api/v1/lex/sources | Список источников | Admin |
| PUT | /api/v1/lex/sources/{id} | Обновить источник | Admin |
1.8.2 Примеры запросов
Получение алертов:1.9 Конфигурация
1.9.1 Environment Variables
1.9.2 Настройки в PostgreSQL
1.9.3 Ключевые слова (lex_keywords)
1.10 Безопасность
1.10.1 Аутентификация
| Компонент | Метод |
|---|---|
| REST API | Bearer Token (через Middleware) |
| Celery Tasks | Internal (без аутентификации) |
| Watcher Integration | Shared API Key |
1.10.2 Авторизация
| Действие | Manager | Senior | Director | Admin |
|---|---|---|---|---|
| Просмотр алертов | ✅ | ✅ | ✅ | ✅ |
| Просмотр документов | ✅ | ✅ | ✅ | ✅ |
| Ручная загрузка | ❌ | ✅ | ✅ | ✅ |
| Удаление документов | ❌ | ✅ | ✅ | ✅ |
| Редактирование keywords | ❌ | ❌ | ❌ | ✅ |
| Настройки модуля | ❌ | ❌ | ❌ | ✅ |
1.10.3 Валидация данных
| Поле | Валидация |
|---|---|
| URL для загрузки | Whitelist доменов (consultant.ru, garant.ru) |
| Файл для загрузки | PDF, DOCX, максимум 10 MB |
| Ключевые слова | Максимум 50 слов на категорию |
| Порог релевантности | 0.0 — 1.0 |
1.11 Мониторинг
1.11.1 Метрики
| Метрика | Описание | Хранение |
|---|---|---|
lex.documents.total | Всего документов в KB | PostgreSQL |
lex.documents.today | Добавлено сегодня | PostgreSQL |
lex.documents.rejected | Отклонено по релевантности | PostgreSQL |
lex.alerts.unread | Непрочитанных алертов | PostgreSQL |
lex.parse.success_rate | Успешность парсинга | PostgreSQL |
lex.ai.avg_response_time | Среднее время AI | Redis |
1.11.2 Health Checks
| Проверка | Интервал | Действие при сбое |
|---|---|---|
| Watcher Queue availability | 5 мин | Алерт Admin |
| AI Filter availability | 5 мин | Алерт Admin |
| KB connection | 5 мин | Алерт Admin |
| Source availability | 1 час | Алерт Admin |
1.11.3 Алерты мониторинга
| Событие | Уровень | Получатель |
|---|---|---|
| Источник недоступен > 1 час | critical | Admin |
| AI Filter error rate > 10% | warning | Admin |
| 0 документов за ночь | warning | Admin |
| KB upload failed | critical | Admin |
1.12 Масштабирование
1.12.1 Ограничения
| Ресурс | Лимит | Причина |
|---|---|---|
| Документов в день | ~100 | Rate limit источников |
| Размер документа | 10 MB | Лимит KB |
| AI запросов в минуту | 60 | Rate limit Timeweb AI |
| Задач Lex в очереди | 500 | Приоритет Watcher |
1.12.2 Приоритеты очередей
1.13 Диаграмма развёртывания
1.14 Структура файлов модуля
Приложение А: Контрольные точки архитектуры
| Критерий | Проверка |
|---|---|
| Задачи Lex в очереди | LLEN task_queue:lex > 0 после 20:30 |
| Агенты обрабатывают Lex | Логи агентов содержат lex_parse |
| AI Filter работает | Время ответа < 5 сек |
| Документы в KB | Появляются после ночного цикла |
| Алерты генерируются | Уведомления в Open WebUI |
| Статистика обновляется | Данные в lex_statistics |
| Ручная загрузка работает | POST /upload возвращает 200 |
Приложение Б: Сравнение с Watcher
| Аспект | Watcher | Lex |
|---|---|---|
| Собственные агенты | ✅ | ❌ (использует Watcher) |
| Очередь задач | task_queue:watcher | task_queue:lex |
| Cookies | Требуются | Не требуются |
| Output | JSON → PostgreSQL | Markdown → KB |
| AI-обработка | Извлечение данных | Фильтрация + резюме |
| Приоритет | Высокий | Средний |
| Алерты | Демпинг | Новые НПА |
| Интерфейс | @Adolf_Watcher | @Adolf_Lex + @Adolf_Knowledge |
Документ подготовлен: Январь 2026
Версия: 1.0
Статус: Черновик