Сообщение ещё не отправлено, а над клавишами уже появляется номер статьи, название нарушения и возможное наказание. Открытый проект «Соучастник» превращает Android-клавиатуру в локальный индикатор юридических рисков: программа анализирует набираемый текст и показывает результат прямо в интерфейсе ввода. Релиз версии 1.0 появился третьего сентября, APK занимает 473 МБ, поддерживает Android 9+ и устройства на arm64.
Внутри работает квантованная языковая модель Qwen3.5-0.8B, запущенная через llama.cpp непосредственно на смартфоне. Облачный сервер для анализа не нужен: манифест приложения не запрашивает android.permission.INTERNET, а резервное копирование отключено. Разработчик также исключил из анализа поля, которые Android помечает как парольные.
Клавиатура не перечитывает всю переписку. При запуске проверки программа получает максимум 400 символов перед курсором. Анализ начинается после паузы примерно в 600 мс и только для текста длиной от 12 символов; продолжение набора отменяет предыдущий запрос. Механизм снижает лишнюю нагрузку на процессор и не заставляет модель пересчитывать результат после каждого нажатия клавиши.
Перед нейросетью работает словарь триггеров . Если подходящих слов или выражений нет, приложение сразу считает фразу безопасной и не запускает Qwen. При совпадении словарь сокращает набор возможных норм, после чего модель оценивает контекст и выбирает один вариант. В комментариях к коду разработчик указывает полный набор из 82 статей и объясняет двухступенчатую схему экономией батареи и более высокой точностью по сравнению с выбором из всего списка сразу.
Свободный текст нейросеть тоже не генерирует. Модель выбирает только код статьи либо вариант none из закрытого списка , а название нарушения и наказание приложение берёт из отдельного локального справочника. Закрытый формат не позволяет модели самостоятельно придумывать номер статьи, штраф или срок и снижает риск галлюцинаций ИИ . В демонстрации проекта фраза «да ты дурак совсем» приводит к строке «ст. 5.61 КоАП · оскорбление · 3–5 тыс. ₽».
За локальную обработку приходится платить скоростью и памятью. По замерам автора, на поддерживаемых процессорах одна фраза обрабатывается примерно за четыре-шесть секунд, а на чипах без инструкции dotprod задержка вырастает до 15–20 секунд. Для работы достаточно смартфона с четырьмя ГБ оперативной памяти. Сам движок запускается в отдельном процессе и занимает около 700 МБ RSS; аварийное завершение модели при нехватке памяти не должно отключать клавиатуру целиком.
Точность проекта тоже далека от юридической экспертизы. В контрольном тесте, описанном прямо в коде, выбранная конфигурация правильно распознала 22 из 35 фраз с предполагаемым нарушением и 27 из 31 нейтральной фразы. Разработчик намеренно сместил модель в пользу варианта none, чтобы сократить число ложных срабатываний на безобидном тексте. README отдельно предупреждает, что программа не заменяет юридическую консультацию, а ИИ может ошибаться.
Проект содержит и отдельную автоматику, не связанную с нейросетью. Встроенный словарь способен дописывать предусмотренные разработчиком статусные пометки после некоторых имён и названий сервисов. Механизм работает детерминированно, без обращения к Qwen: результат зависит от содержимого локального списка, а не от интерпретации текста моделью.
Исходный код опубликован под лицензией GPL-3.0, однако файл triggers.json с триггерными словами разработчик в репозиторий не включил. README объясняет отсутствие опасением из-за публикации самого набора выражений. Архитектуру классификатора изучить можно полностью, но точный набор слов, который запускает проверку конкретных статей в готовом APK, по открытому дереву исходников не восстанавливается.