Запись архива

Hugging Face обошла GAIA: кодовые агенты без JSON и песочница для Python из коробки

Инженеры Hugging Face представили библиотеку smolagents для создания ИИ-агентов, выполняющих задачи через генерацию Python-кода и безопасный песочный интерпретатор. Разработка заняла первое место в комплексном бенчмарке GAIA.

Схема работы фреймворка smolagents от Hugging Face: генерация Python-кода агентом, выполнение в безопасном интерпретаторе, вызов инструментов
Схема работы фреймворка smolagents от Hugging Face: генерация Python-кода агентом, выполнение в безопасном интерпретаторе, вызов инструментов
Изображение из исходного материала

Команда Hugging Face сообщила, что их агентная система на базе библиотеки smolagents заняла первую строчку в публичном лидерборде бенчмарка GAIA. Это испытание считается одним из самых сложных для LLM-агентов: вопросы требуют многошагового планирования, веб-поиска и разбора вложений вроде Excel-таблиц, PDF и аудиофайлов. Разработчики использовали подход, при котором агент не формирует JSON-структуры для вызова инструментов, а пишет и выполняет Python-код.

Одновременно с публикацией результатов Hugging Face объявила, что фреймворк transformers.agents, на котором строился эксперимент, выделен в автономную библиотеку smolagents с тем же API. Переход на неё не требует переписывания существующих конфигураций.

Почему код, а не JSON

В работе Wang et al. (2024) показано, что выражение действий агента через код эффективнее, чем через словари вроде JSON. Для Hugging Face это стало ключевым архитектурным решением. Python позволяет компактно описывать цепочки операций: ветвления, циклы и вызовы инструментов объединяются в один скрипт без избыточных токенов на служебные протоколы.

Например, в JSON-агентах каждый вызов функции — это отдельный словарь с полями `name`, `arguments` и последующей обработкой. В кодовом агенте тот же сценарий записывается как последовательность обычных вызовов функций и циклов. По оценке команды, это снижает затраты контекстного окна и упрощает отладку.

Безопасность через AST, а не через блокировку

Главная проблема кодовых агентов — возможность выполнения опасных команд. Традиционный подход: запустить полноценный интерпретатор, а потом запретить опасные функции. Hugging Face пошла обратным путём: написала минимальный интерпретатор с нуля. Он разбирает код через модуль `ast` (Abstract Syntax Tree) и выполняет узлы пошагово. Любая операция, не входящая в явно разрешённый список, прерывает выполнение.

В стандартной конфигурации разрешены `print`, `range` и несколько базовых встроенных функций. `open()` для работы с файлами, импорт произвольных библиотек и вызовы системных команд по умолчанию заблокированы. Если агенту нужно использовать внешний инструмент — например, веб-браузер или парсер PDF, — он должен быть зарегистрирован как разрешённая функция.

Такой подход не гарантирует полную изоляцию, но делает случайное или вредоносное выполнение существенно менее вероятным, чем в полноценном Python-интерпретаторе с правилами блокировки.

Набор инструментов для GAIA

Для прохождения тестов команда задействовала три компонента:

Markdown-браузер — адаптирован из решения Autogen. Возвращает содержимое страниц в урезанном текстовом формате. Это экономит токены, но не обрабатывает JavaScript и динамический контент. Разработчики признают, что в будущем планируют перейти на Selenium для полноценной загрузки страниц.

Инспектор файлов — парсит вложенные документы: `.xls`, `.mp3`, `.pdf` и другие форматы. Код также взят из открытых наработок Autogen.

Интерпретатор кода — заменяет стандартный диспетчер вызовов. Агент пишет скрипт, который выполняется в песочнице. Если код содержит ошибку, агент может получить сообщение об ошибке и исправить сценарий.

Все три инструмента работают через единый API smolagents.

Что это значит для разработчиков

Появление открытой библиотеки с кодогенерирующими агентами снижает порог входа в автоматизацию сложных сценариев. Вместо написания жёстких пайплайнов разработчик может описать задачу на естественном языке, а агент построит и выполнит цепочку действий: найдёт данные в интернете, распарсит таблицу, выполнит расчёты и вернёт результат.

При этом smolagents сохраняет совместимость с transformers.agents, поэтому миграция существующих проектов сводится к замене импорта. Библиотека распространяется с открытым исходным кодом, что позволяет аудировать безопасность интерпретатора и добавлять собственные инструменты.

Ограничения, которые стоит учитывать

Текущая реализация Markdown-браузера не видит визуальные элементы интерфейсов: графики, изображения, кнопки. Для анализа таких данных потребуется подключать мультимодальные модели отдельно.

Кроме того, успех агента сильно зависит от способности базовой LLM генерировать синтаксически корректный Python с первой попытки. Хотя цикл с самокоррекцией работает, ошибки в коде — одна из частых причин сбоев.

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

Источники

Источники