Блог пользователя Sunb1m

Автор Sunb1m, история, 7 часов назад, перевод, По-русски

Привет всем участникам Codeforces и MikeMirzayanov!

Последнее время очень часто сталкиваюсь с обсуждениями использования AI на соревнованиях. Решил поделиться мыслями и личным опытом по этому вопросу, а также внести несколько предложений, которые могли бы помочь в обеспечении честности проведения соревнований.

В качестве эксперимента я протестировал несколько моделей ChatGPT на платной основе, чтобы понять, насколько они способны эффективно решать контестные задачи на различные алгоритмы с точки зрения правильности решений и оптимизации.

  • o3-mini отлично справляется с задачами уровня div2 A–C, но, начиная с div2 D модель без явно заданной идеи решения зачастую генерирует неоптимальный код, неверно определяя оптимальную асимптотику алгоритма. Особенно заметны проблемы в задачах на динамическое программирование при составлении рекуррентной формулы и в интерактивных задачах.
  • o3-mini-high показывает лучшее понимание задач, глубже рассуждает, но тоже допускает ошибки на сложных задачах div2 E–F, особенно связанных с динамическим программированием. Зачастую для получения правильного и оптимального решения приходится вручную описывать модельный алгоритм с указанием точной формулы и асимптотики.

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

Именно это, на мой взгляд, можно использовать как один из уровней защиты для автоматической модерации решений на платформе. Уже сейчас модерация на Codeforces иногда успешно обнаруживает подозрительно похожие решения именно по такому признаку. Но это на самом деле контрится сейчас очень легко путём обфускации кода, добавления "мусорных" и не нужных функций, из-за чего в конечном итоге код будет сложно прочесть. На этот счёт можно продумать ещё несколько уровней защиты, которые будут работать параллельно с основным.

Основная идея заключается в поведенческом анализе действий пользователя в реалтайме. Можно внедрить следующий функционал:

  1. Анализ в реальном времени разницы между моментом открытия условия задачи и первой отправкой решения
  2. Отслеживание резких изменений в скорости решения задач, например, слишком быстрое решение сложной задачи после долгого простоя без активности
  3. Фиксация абсолютно всех действий пользователя на странице контеста с пакетной отправкой зашифрованных данных на сервер для модуля антифрода, без которого дальнейшее действие на сайте будет невозможно, будем учитывать особо внимательно события копирования условия задачи со страницы

Отдельным и ключевым решением будет реализация клиентского приложения Client <-> Server. Основной его задачей будет мониторинг подозрительных действий. Чем-то его логика будет схожа с работой проктора при проведении, например, онлайн-экзамена.

  1. Анализ процессов, запущенных во время контеста
  2. Анализ входящего/исходящего траффика для контроля запросов к ИИ-сервисам
  3. Создание и отправка на сервер случайных скриншотов экрана пользователя только при подозрительной активности

Конечно, с точки зрения конфиденциальности, такое решение будет не очень верным, поэтому стоит ещё подумать, как правильно его можно реализовать.

Пишите в комментариях ваши мысли и идеи, будет интересно послушать!

  • Проголосовать: нравится
  • +6
  • Проголосовать: не нравится

»
7 часов назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Автокомментарий: текст был переведен пользователем Sunb1m (оригинальная версия, переведенная версия, сравнить).

»
7 часов назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Автокомментарий: текст был обновлен пользователем Sunb1m (предыдущая версия, новая версия, сравнить).

»
3 часа назад, # |
Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

AI cheating is extremely difficult for normal algorithms to catch. Maybe we should fight AI with AI and have AI-based plagiarism detectors. They already exist and work for writing (many schools and colleges use them), and there is no reason they would not be able to be work for coding.

Example: ChatGPT AI code detector

  • »
    »
    3 часа назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    This sounds like an idea, I didn't think of it right away, but again, only the most obvious solutions will be detected. The code can be modified to fit your own unique template and then you will have to add additional security measures

    • »
      »
      »
      2 часа назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Forcing people to install a lockdown app that tracks everything they do violates way too much privacy, especially since the EU exists

      If I was forced to do that, I would never join an official contest again

      • »
        »
        »
        »
        2 часа назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        You are right, there are a few legal issues that need to be resolved for this to work. This is how most anti-cheats in games work, but on the other hand, the reliability and level of protection is increased. By the way, this chatbot that you threw to me can in theory be set up against it and used to refine the code against detection

        • »
          »
          »
          »
          »
          2 часа назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          If you rewrite AI code from scratch it will be 100% undetectable

          So all we can catch are the lazy cheaters

  • »
    »
    60 минут назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Those detectors for AI-written work have lots of false positives and I wouldn't trust them a ton.

    The same issue can be found with AI generated code, while there are definitely signs of AI generated code (which are admittedly more often found in code than writing), there's no surefire way of detecting AI generated code. On a side tangent, as people start to mask their AI generated code better, its going to be harder to tell if someone is using AI, and conversely, its going to lead to witch hunting people based on little evidence (I've already been accused of using AI for having too descriptive variable names :| ).

    One last note, I'm not too familiar with how AI detectors work, but I can tell you that using an LLM (like the example provided) is not a great way of detecting AI generated code (as an example, I've pasted 2 straight from GPT codes into the example provided, and it didn't detect either of them.)

  • »
    »
    36 минут назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    i mean usually llm text is watermarked meaning it can easily be detected i am not sure if the code has the same thing , so maybe you can somehow check for it