Демонстратор проверки трудовых договоров

Предназначение документа

Описать, как можно выяснить ответы на следующие вопросы:

  1. Может ли большая языковая модель ГигаЧат выявлять нарушения трудового законодательства и интересов трудящихся?
  2. Сколько времени занимают такие проверки?
  3. Какова нижняя планка себестоимости таких проверок (сколько стоит использование большой языковой модели для проверки одного трудового договора)?

Принцип работы

  1. Есть 52 видa проверок.
  2. При проверке трудового договора в большую языковую модель отправляется запрос "есть ли в приложенном договоре такое-то нарушение?" (для каждого вида проверок).
  3. Ответы большой языковой модели отображаются в виде экспресс-отчета.

Пример

Здесь можно найти один из таких отчётов. В разделе Результаты проверок указан перечень проведенных проверок.

/media/ru/labor-law-demonstrator/violations-table.png

Для каждой проверки указан ее результат:

  1. Красный фон означает, что трудовой договор противоречит трудовому законодательству, либо законным путём ущемляет права сотрудника. Красным также отмечены проверки, которые большая языковая модель отказалась выполнять из-за цензуры.
  2. Зеленым отмечены проверки, где большая модель не нашла нарушений.
  3. Жёлтым фоном отмечены проверки, где большая языковая модель не может определить, есть ли нарушение или нет. Это может быть серой зоной закона. В этих случаях юристу-человек однозначно надо проверить договор на предмет нарушения требований этой проверки.

Почему проверок 52, а экспресс-отчётов – в три раза больше?

Отчёт подобен автоматическому (JUnit) тесту. Каждая проверка может привести к одному из трех результатов:

  1. Модель думает, что нарушение точно есть.
  2. Модель думает, что нарешиний точно нет.
  3. Модель не может определиться.

В тесте желательно проверить каждый из этих трёх случаев. Умножаем 52 проверки на 3 возможных исхода и получаем 156 тестовых договогов.

Как повторить результаты

Шаг 1: Получите токен доступа

Создайте учётную запись ГигаЧата по адресу developers.sber.ru. Появится следующая страница.

/media/ru/labor-law-demonstrator/img01.png

Пройдите по ссылке Личный кабинет. На появившейся странице пройдите по ссылке GigaChat API.

/media/ru/labor-law-demonstrator/img02.png

На появившейся странице пройдите по ссылке Настроить API.

/media/ru/labor-law-demonstrator/img03.png

Появится следующая страница.

/media/ru/labor-law-demonstrator/img04.png

На этой странице есть следующие данные, которые следует зафиксировать:

  1. Идентификатор клиента (Client ID)
  2. Область (Scope)
  3. Ключ авторизации

Шаг 3

Удостоверьтесь, что у вашей учётной записи в ГигаЧате есть дотаточно токенов.

Шаг 4: Откройте проект в среде разработки

Импортируйте проект в среду разработки.

Шаг 5: Включите правильный сценарий тестирования

Откройте класс org.legaltech39.lavs.testharness.Harness.

Там есть константа scenarios. Посредством нее можно указать, какие сценарии будут выполнены.

Все тамошние сценарии можно разделать на две категории:

  1. Онлайновые, т. е. те, которые обращаются к ГигаЧату во время выполнения
  2. Оффлайновые, т. е. те, которые считывают ответы ГигаЧата из файлов

Например, в рамках сценария SCENARIO_3_ONLINE проводятся проверки всех 156 договоров в "боевом режиме под запись", т. е.

  1. в рамках проверок идут запросы в ГигаЧат и
  2. ответы записываются в директорию test/resources/recordings/03.

В сценарии SCENARIO_3_OFFLINE эти ответы используются в качестве имитации обращения к ГигаЧату.

Это нужно потому, что запросы к ГигаЧату стоят денег и имеет смысл использовать записанные ранее ответы для отладки тех вещей, где суть ответа некритична.

В сценариях SCENARIO_1_ONLINE и SCENARIO_1_OFFLINE проводятся 3 проверки одного договора.

В сценариях SCENARIO_2_ONLINE и SCENARIO_2_OFFLINE проводятся все 52 проверки одного договора.

В сценариях SCENARIO_3_ONLINE и SCENARIO_3_OFFLINE проводятся все 52 проверки всех 156 договоров.

В сценариях SCENARIO_4_ONLINE и SCENARIO_4_OFFLINE проводятся несколько проверок одного договора.

Для первых экспериментов можно взять сценарий SCENARIO_2_ONLINE.

В определении константы scenarios нужно закомментировать все строки, кроме SCENARIO_2_ONLINE.

static Stream<Arguments> scenarios() {
    return Stream.of(
            // SCENARIO_1_ONLINE
            // SCENARIO_1_OFFLINE,
            SCENARIO_2_ONLINE
            // SCENARIO_2_OFFLINE,
            // SCENARIO_3_ONLINE

            // SCENARIO_3_OFFLINE performs verificiation of
            // 156 which takes a long time
            // SCENARIO_3_OFFLINE,
            // SCENARIO_4_OFFLINE
    );

Шаг 6: Создать конфигурацию для запуска теста

Создайте конфигурацию теста и откройте ее. Будет окно вроде следующего.

/media/ru/labor-law-demonstrator/img05.png

Нажмите на кнопку рядом с полем Environment variables. Появится следующее окно.

/media/ru/labor-law-demonstrator/img06.png

В качестве значения переменной среды FM_AUTH_KEY нужно ввести авторизационный ключ из шага 1.

Шаг 7: Запустите тест

Если вы выбрали SCENARIO_2_ONLINE, то в рамках теста произойдет следующее:

  1. Директория src/test/resources/scenarios/02/actual будет очищена.
  2. В эту директорию будет скопировано содержимое директории src/test/resources/scenarios/02/input. В поддиректории contracts будут находиться тексты договоров, которые надо проверить.
  3. Будет произведена проверка договоров, а ответы ГигаЧата запишутся в директорию src/test/resources/recordings/02.
  4. Экспресс-отчет будет в директории src/test/resources/scenarios/02/actual/contract-reports.

Техническая реализация

Приложение создано на базе ультралёгкого процессуального движка Постольник (документация, код).

В директории src/main/resources есть три файла в формате LibreOffice Draw:

  1. main.ppmn.fodg
  2. validate-contract.ppmn.fodg
  3. perform-verification.ppmn.fodg

main.ppmn.fodg описывает основной процесс:

/media/ru/labor-law-demonstrator/img07.png

Для каждого договора в директории src/test/resources/02/actual/contracts будет вызван подпроцесс Проверить договор, внутри которого для каждой проверки будет вызван процесс perform-verification.ppmn.fodg.