Детальный обзор SmolAgents — Агенты в 100 строк кода: code agents и tool-calling agents
SmolAgents — это минималистичный open-source фреймворк для создания AI-агентов, разработанный командой Hugging Face. Основная ценность продукта — возможность реализовать полноценного code-агента или tool-calling агента буквально в 100 строк кода. В отличие от монструозных решений вроде LangChain или AutoGPT, SmolAgents предлагает радикально упрощённую архитектуру: агент — это просто цикл, который вызывает LLM, парсит ответ и исполняет инструменты. Фреймворк ориентирован на разработчиков, которым нужна прозрачная логика работы агента без абстракций, скрывающих детали.
Стек технологий: Python 3.10+, библиотека использует asyncio для асинхронных вызовов. Поддерживаются все популярные LLM-провайдеры: OpenAI, Anthropic, Google Gemini, локальные модели через Ollama и Hugging Face Inference API. Лицензия — Apache 2.0, что позволяет использовать фреймворк в коммерческих проектах без ограничений. Ключевое УТП — минимальный порог входа: разработчик с базовым знанием Python может запустить первого агента за 5 минут, а полное понимание архитектуры укладывается в один вечер чтения исходного кода.
Внутренняя архитектура SmolAgents построена вокруг трёх базовых компонентов: Agent (оркестратор), Tools (инструменты) и Memory (память). Agent — это центральный класс, который управляет циклом "запрос → генерация → исполнение". На каждом шаге агент отправляет текущий контекст (системный промпт + историю диалога + доступные инструменты) в LLM, получает структурированный ответ (JSON с полями action, action_input, thought), парсит его и либо вызывает указанный инструмент, либо возвращает финальный ответ пользователю.
Воркфлоу выглядит следующим образом: пользователь отправляет запрос → Agent формирует промпт с описанием всех доступных инструментов (их имена, параметры, документация) → LLM возвращает JSON с решением вызвать инструмент → Agent валидирует параметры, выполняет инструмент, сохраняет результат в Memory → цикл повторяется, пока LLM не решит, что задача решена. Для code-агентов логика отличается: LLM генерирует Python-код, который исполняется в изолированном sandbox-окружении (через exec с ограничениями). Результат выполнения кода возвращается в контекст для следующей итерации.
Поток данных линейный: все вызовы проходят через единый метод Agent.run(). Это делает дебаггинг тривиальным — достаточно добавить print() в цикл агента. Фреймворк не использует графы, цепочки или сложные стейт-машины, что является осознанным архитектурным решением для сохранения простоты.
1. Code Agent — генерация и исполнение Python-кода
Агент может генерировать и выполнять произвольный Python-код для решения задач. Это позволяет обрабатывать данные, работать с файлами, вызывать внешние API — всё, что можно сделать на Python. Важно: код исполняется в изолированном окружении с ограничениями на импорты и системные вызовы, но разработчик может настроить sandbox под свои нужды. Это принципиально отличает SmolAgents от tool-calling агентов, которые ограничены предопределённым набором инструментов.
2. Tool-Calling Agent — вызов предопределённых инструментов
Классический режим, где агент выбирает из списка зарегистрированных инструментов. Каждый инструмент — это Python-функция с декоратором @tool, которая автоматически генерирует JSON-схему для LLM. Поддерживаются вложенные схемы параметров, валидация типов и автоматическая генерация документации из docstring. Это даёт предсказуемое поведение в production-сценариях, где недопустимо исполнение произвольного кода.
3. Встроенная поддержка мультимодальности
Агенты могут обрабатывать изображения, аудио и видео, если используется мультимодальная LLM (GPT-4V, Gemini Pro Vision). Фреймворк автоматически конвертирует медиафайлы в base64 и встраивает их в промпт. Это позволяет строить агентов для анализа изображений, распознавания объектов или обработки видео без дополнительных интеграций.
4. Гибкая система памяти
Memory в SmolAgents — это не просто список сообщений. Реализованы три режима: полная история (все сообщения), оконная (последние N сообщений) и суммаризация (автоматическое сжатие истории через LLM). Режим суммаризации критически важен для длительных сессий, так как позволяет удерживать контекст без превышения лимита токенов. Разработчик может реализовать собственную стратегию памяти, наследуя базовый класс BaseMemory.
5. Асинхронность и параллельное выполнение
Все вызовы LLM и инструментов асинхронны. Это позволяет запускать несколько агентов параллельно в одном процессе, что важно для обработки массовых запросов. Фреймворк использует asyncio.gather() для конкурентного выполнения, а управление rate limiting реализовано через семафоры. В бенчмарках команды Hugging Face показали, что асинхронная версия обрабатывает в 3-4 раза больше запросов в секунду по сравнению с синхронной.
6. Интеграция с Hugging Face Hub
Из коробки поддерживается публикация и загрузка агентов через Hugging Face Hub. Это позволяет шарить готовых агентов как "модели" — с версионированием, метаданными и автоматической документацией. Сообщество уже опубликовало более 200 готовых агентов для различных задач: от парсинга веб-страниц до генерации отчётов.
7. Логирование и мониторинг
Встроенный логгер записывает каждый шаг агента: промпт, ответ LLM, вызов инструмента, результат. Логи структурированы в JSON и могут быть экспортированы в любой инструмент observability (Grafana, Datadog). Для production-сценариев это даёт полную прозрачность работы агента и возможность воспроизвести любой сбой.
| Характеристика | Значение |
|---|---|
| Модель распространения | Open-source |
| Цена | Бесплатно (только затраты на LLM API) |
| API | Python SDK (синхронный и асинхронный) |
| Интеграции | OpenAI, Anthropic, Google, Ollama, Hugging Face, Azure OpenAI |
| Лицензия | Apache 2.0 |
| Минимальные требования | Python 3.10+, 1 GB RAM (без локальной LLM) |
| Размер библиотеки | ~500 KB (чистый код без зависимостей) |
| Количество строк кода ядра | ~1200 строк |
Установка производится через pip. Фреймворк не имеет тяжёлых зависимостей — только httpx и pydantic для работы с API. Для code-агента дополнительно требуется установка изолированного окружения (рекомендуется использовать Docker или venv).
# Установка базовой версии
pip install smolagents
# Установка с поддержкой локальных моделей через Ollama
pip install smolagents[ollama]
# Быстрый старт: tool-calling агент с Wikipedia
from smolagents import ToolCallingAgent, HfApiModel, tool
@tool
def search_wikipedia(query: str) -> str:
"""Поиск информации в Wikipedia"""
import wikipedia
return wikipedia.summary(query, sentences=3)
agent = ToolCallingAgent(
tools=[search_wikipedia],
model=HfApiModel("HuggingFaceH4/zephyr-7b-beta")
)
result = agent.run("Какая столица Франции?")
print(result)
# Code agent с локальной моделью
from smolagents import CodeAgent, OllamaModel
agent = CodeAgent(
model=OllamaModel("llama3.2:latest"),
additional_authorized_imports=["pandas", "numpy"]
)
result = agent.run("Сгенерируй CSV с 10 случайными точками данных")
print(result)
| Критерий | SmolAgents | LangChain | AutoGPT |
|---|---|---|---|
| Ключевая фича | Минимализм, прозрачность | Гибкость, экосистема | Автономность, долгосрочные задачи |
| Цена | Бесплатно (Open Source) | Бесплатно + LangSmith ($0.01/вызов) | Бесплатно (Open Source) |
| Open Source | Да (Apache 2.0) | Да (MIT) | Да (MIT) |
| Сложность | Низкая (100 строк для агента) | Высокая (1000+ строк для того же) | Средняя (требует настройки окружения) |
| Code Agent | Встроенный, sandbox | Через PythonREPLTool | Только tool-calling |
| Память | 3 режима из коробки | Через Memory классы | Векторная БД (обязательно) |
| Асинхронность | Нативная asyncio | Через Runnable | Нет (синхронный) |
| Размер кодовой базы | ~1200 строк | ~500 000 строк | ~50 000 строк |
LangChain — главный конкурент с огромной экосистемой интеграций. SmolAgents выигрывает в простоте: для типового RAG-агента в LangChain потребуется 300-500 строк кода и понимание концепций Chains, Runnable, Callbacks. В SmolAgents — 50 строк. Однако LangChain даёт больше контроля над сложными пайплайнами с ветвлением и параллельными execution paths.
AutoGPT — фреймворк для полностью автономных агентов. SmolAgents не пытается конкурировать в этой нише: он ориентирован на интерактивные сценарии, где агент работает под контролем пользователя. AutoGPT требует настройки векторной БД и сложной системы промптов для долгосрочного планирования, что избыточно для 80% задач.
SmolAgents — это лучший выбор для разработчиков, которым нужен прозрачный и контролируемый AI-агент без оверхеда сложных фреймворков. Продукт идеально подходит для сценариев, где важна предсказуемость поведения и возможность быстрого дебаггинга: автоматизация DevOps-задач, генерация отчётов, обработка данных, интеграция с внутренними API. Code Agent особенно полезен для прототипирования — можно быстро проверить гипотезу, не тратя время на настройку инструментов.
Рекомендуем SmolAgents для команд, которые хотят внедрить AI-агентов в production, но не готовы к сложности LangChain. Если ваша задача — построить сложный мультиагентный пайплайн с графами и долгосрочным планированием, стоит посмотреть в сторону LangGraph или CrewAI. Для простых tool-calling сценариев SmolAgents — оптимальное решение с минимальным техническим долгом.
Оценка снижена за отсутствие встроенного observability и ограниченную экосистему инструментов. Однако для open-source проекта с фокусом на минимализм это осознанные компромиссы, а не недостатки реализации.