Небольшой инструмент на Java без внешних зависимостей. Оценивает, насколько код похож на сгенерированный языковой моделью, а не написанный человеком. Ничего не отправляет в сеть и не спрашивает другую модель: читает код, применяет набор взвешенных эвристик и показывает конкретные строки, на которых построен вердикт, — чтобы решение оставалось за тобой.
Он же: детектор ИИ-кода · проверка кода на нейросеть · определить, сгенерирован ли код ChatGPT/LLM · ИИ или человек писал код · AI / ChatGPT generated-code detector для Java, JavaScript, TypeScript и Python.
Смысл не в слепой классификации, а в том, чтобы подсветить «приметы»:
идеально ровное форматирование, шаблонные имена, док-блок над каждым тривиальным
методом, рефлекторный try/catch, стену защитных проверок на null. Когда
насмотришься на них пару раз — инструмент перестанет быть нужен.
HTML-отчёт (файл / папка / GitHub-репозиторий):
Десктоп-приложение:
У каждого сигнала есть вес. «ИИ-сигналы» поднимают балл, «человеческий» — опускает. Итоговая оценка:
score = clamp( сумма(сработавшие веса со знаком) / сумма(все веса) * 100, 0, 100 )
| Сигнал | Вес | Склоняет к |
|---|---|---|
| Комментарии к тривиальным шагам | 2.0 | ИИ |
| Разговорная преамбула в коде | 1.6 | ИИ |
| Рефлекторные обёртки try/catch | 1.6 | ИИ |
| Шаблонные имена-заглушки | 1.5 | ИИ |
| Док-блоки на каждой функции | 1.5 | ИИ |
| Повторяющиеся, копипастные строки | 1.4 | ИИ |
| Сплошные защитные проверки на null | 1.3 | ИИ |
| Симметричные имена хелперов | 1.1 | ИИ |
| Плотный «учебниковый» control flow | 1.0 | ИИ |
| Совсем нет комментариев | 0.6 | ИИ |
| Подозрительно ровное форматирование | 0.3 | ИИ |
| Нет меток TODO/FIXME | 0.2 | ИИ |
| Живая, «человеческая» сложность | 1.0 | человек |
Вердикт: ≥50 — скорее ИИ, 25–49 — смешанно, <25 — скорее человек. Пороги настраиваются ключами командной строки.
Кроме балла каждый файл получает уровень уверенности — low, medium или
high — в зависимости от числа независимых сильных сигналов (тяжёлых
ИИ-признаков, а не ровного форматирования или отсутствия комментария). По-настоящему
подозрительными стоит считать только файлы с high: оценка, накрученная слабыми
сигналами, намеренно остаётся на low, чтобы чистый код без комментариев не путали
с ИИ.
Поддерживаемые языки: Java, JavaScript, TypeScript, Python. Остальные расширения обрабатываются по правилам C-подобных комментариев и строк.
Сборщик не нужен — только JDK 17 или новее.
build.bat :: Windows
./build.sh # Unix
Оба скрипта компилируют исходники в out/.
# один файл
aidetect examples/ai-style/OrderProcessor.java
# целая папка
aidetect src
# через stdin
type snippet.java | aidetect - --lang java :: Windows
cat snippet.java | aidetect - --lang java # Unix
# по ссылке на репозиторий — клонирует, оценивает и сам убирает за собой
aidetect https://github.com/owner/repo
aidetect — это тонкая обёртка (aidetect.bat / aidetect.sh) над
java -cp out aidetector.Main. Без обёртки: java -cp out aidetector.Main <цель>.
Запустить GUI напрямую, без сборки exe:
java -cp out aidetector.DesktopApp
Вставь путь к файлу/папке или GitHub-ссылку (либо нажми Browse), нажми Analyze — HTML-отчёт сам откроется в браузере.
Одним кликом из Проводника — aidetect-report.bat: спросит путь или ссылку,
сделает reports\ai-detector-report.html и откроет его в браузере.
Собрать кликабельное приложение (нужен jpackage из JDK):
.\build-exe.bat
Готовый файл: dist\AI Code Detector\AI Code Detector.exe. Отчёты он пишет в
%USERPROFILE%\AI Code Detector\reports.
| Опция | По умолчанию | Что делает |
|---|---|---|
--ai-threshold <n> |
50 |
балл, с которого файл считается ИИ |
--mixed-threshold <n> |
25 |
балл, с которого файл считается смешанным |
--top <n> |
10 |
сколько файлов раскрывать для папки/репозитория |
--evidence <n> |
5 |
сколько строк-улик показывать на сигнал |
--format <name> |
console |
формат отчёта: console, html |
--out <file> |
— | записать отчёт в файл вместо вывода в консоль |
--lang <name> |
— | подсказка языка для stdin: java, js, ts, python |
Это эвристики, а не доказательство. Чистый, аккуратный код без комментариев тоже наберёт несколько ИИ-сигналов, а модель, которой велели писать «грязно», их обойдёт. Считай оценку поводом присмотреться, а не приговором. Читай улики, а не только число.

