Что делает скрипт и зачем он нужен
Представленный фрагмент — это набор небольших, но полезных инструментов для автоматического анализа отчётов garak. Garak — открытый фреймворк, который проверяет модели ИИ на уязвимости (например, попытки обойти безопасность). Скрипт ищет свежий report.jsonl, извлекает из него оценки и выводит таблицу с процентом успешных атак (ASR %). При желании рисует горизонтальную диаграмму.
Как подготовить окружение
- Установите необходимые библиотеки:
pip install numpy pandas matplotlib. Garak уже должен быть установлен в системе для импортаgarak.report. - Убедитесь, что у вас есть хотя бы один выполненный запуск Garak, иначе скрипт не найдёт файлы
*report.jsonl. - Если планируете запускать скрипт в среде без графического интерфейса (например, на сервере), добавьте
matplotlib.use('Agg')перед импортомpyplot– график будет сохраняться в файл, а не открываться в окне.
Пошаговый разбор кода
- Поиск последнего отчёта – функция
find_latest_report()сканирует три каталога (~/.local/share/garak/garak_runs,~/.cache/garakи текущий каталог) и выбирает самый свежий файл с ненулевым размером. - Загрузка отчёта – сначала пытаемся использовать готовый класс
garak.report.Report. Если он недоступен (например, разные версии Garak), переходим к «ручному» парсингу JSON‑строк. - Подсчёт метрик:
score– процент безопасных ответов:100 * passed / total_evaluated.asr_%– процент атак, которые прошли:100 - score.
- Формирование таблицы – выводим столбцы
probe,detector,passed,total_evaluated,safe_%иasr_%, сортируя по убываниюasr_%(чем выше — тем уязвимее). - Визуализация – горизонтальная столбчатая диаграмма с названиями
probe+detectorи осьюAttack Success Rate (%). При ошибке (например, отсутствие GUI) график просто не рисуется, а в консоль выводится сообщение.
Типичные проблемы и как их решить
- ImportError: No module named garak.report – убедитесь, что версия Garak ≥ 0.9, где модуль
garak.reportуже существует. Если нужен более старый Garak, оставьте только ручной парсинг. - FileNotFoundError при поиске отчёта – проверьте, что вы действительно запускали Garak и указали правильный путь к домашней директории. Можно явно передать путь в переменную
report_path. - Проблемы с графикой – в безголовом окружении добавьте
import matplotlib; matplotlib.use('Agg')перед импортомpyplotи заменитеplt.show()наplt.savefig('asr.png'). - Пустой DataFrame – значит, в файле нет записей типа
"entry_type": "eval". Проверьте, что запуск Garak включал опцию--output-jsonlи не был прерван ошибкой.
Как улучшить скрипт под свои нужды
- Добавьте фильтрацию по конкретному
probeилиdetector, если интересует только один тип уязвимости. - Экспортируйте таблицу в CSV:
view.to_csv('garak_summary.csv', index=False). - Интегрируйте в CI/CD‑pipeline: скрипт может автоматически генерировать отчёт после каждого теста модели и отправлять его в Slack/Email.
- Расширьте визуализацию: используйте
seabornдля тепловой картыpivot_tableпоprobe×detector.



















