Что такое AutoGen?
AutoGen — фреймворк от Microsoft Research для создания мультиагентных систем. Агенты могут разговаривать между собой, писать и выполнять код, обращаться к внешним инструментам. Это особенно мощно для задач программирования и анализа данных.
Установка
pip install pyautogen Два агента: программист и критик
import autogen
config = {
"config_list": [{
"model": "llama3.2",
"base_url": "http://localhost:11434/v1",
"api_key": "ollama"
}]
}
# Агент-программист пишет код
coder = autogen.AssistantAgent(
name="Coder",
system_message="Ты опытный Python разработчик. Пиши чистый код.",
llm_config=config
)
# Агент-пользователь запускает и проверяет
user = autogen.UserProxyAgent(
name="User",
human_input_mode="NEVER",
code_execution_config={"work_dir": "/tmp/autogen"},
max_consecutive_auto_reply=10
)
# Запуск диалога
user.initiate_chat(
coder,
message="Напиши Python скрипт для мониторинга использования RAM и CPU"
) GroupChat — несколько агентов
groupchat = autogen.GroupChat(
agents=[coder, user, reviewer],
messages=[],
max_round=10
)
manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=config)
user.initiate_chat(manager, message="Создай REST API для управления задачами") Когда выбрать AutoGen?
- Задачи кодирования и отладки
- Автоматический анализ данных
- Системы, где нужен диалог между агентами
- Сложные многошаговые задачи с кодом
Частые ошибки при установке и запуске
Большинство проблем с AutoGen связаны не с самим кодом агентов, а с окружением: конфликтующими пакетами, недоступным Ollama или неверными путями для выполнения кода.
ModuleNotFoundError: No module named 'autogen'
Экосистема AutoGen в 2024 году разделилась: часть разработчиков продолжила проект под тем же именем, часть — под форком с отдельным названием на PyPI. Оба пакета используют одно и то же пространство имён import autogen, поэтому если в окружении случайно оказались установлены оба, второй пакет молча перезаписывает файлы первого, и старый код перестаёт находить нужные классы. Решение — держать в проекте только один из пакетов и фиксировать его версию в requirements.txt.
TimeoutError при обращении к локальной модели
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=11434): Max retries exceeded Эта ошибка означает, что AutoGen не может достучаться до Ollama по адресу из base_url. Проверьте, что служба запущена (systemctl status ollama), что модель из config_list действительно загружена (ollama list), и что порт 11434 не занят другим процессом.
AutoGen, CrewAI и LangChain: как выбрать фреймворк
| Критерий | AutoGen | CrewAI | LangChain |
|---|---|---|---|
| Модель общения агентов | Свободный диалог, GroupChat | Фиксированные роли и передача задач | Явные цепочки и графы вызовов |
| Выполнение кода | Встроенное, через UserProxyAgent | Через отдельные инструменты | Через инструменты и агент-исполнитель |
| Порог входа | Средний, нужно понимать роли агентов | Низкий, декларативное описание команды | Выше, много абстракций |
| Где сильнее | Кодогенерация и отладка | Пошаговые бизнес-процессы | Кастомные пайплайны и RAG |
Если задача — не мультиагентный диалог, а конкретный пайплайн с чёткими шагами, обычно проще начать с LangChain или CrewAI, а AutoGen оставить для задач, где агентам действительно нужно писать и запускать код в диалоге друг с другом.
Когда AutoGen не подходит
- Нужен предсказуемый, детерминированный пайплайн без произвольного числа раундов диалога — GroupChat может уйти в лишние итерации.
- В продакшене нельзя выполнять сгенерированный код без ручной проверки — UserProxyAgent по умолчанию запускает код автоматически.
- Команда не готова поддерживать изоляцию окружения выполнения (Docker или отдельный пользователь с ограниченными правами).
- Задача решается одним вызовом модели без диалога между ролями — в этом случае прямой запрос к Ollama будет проще и дешевле по ресурсам.
Как проверить, что всё работает
python3 -c "import autogen; print(autogen.__version__)"
ollama list
systemctl status ollama --no-pager Первая команда подтверждает, что пакет установлен и виден интерпретатору. Вторая показывает, какие модели реально загружены — имя в конфиге агента должно совпадать с одной из строк вывода. Третья проверяет, что служба Ollama активна и принимает соединения. Если диалог между агентами зависает без ответа, почти всегда причина в одном из этих трёх пунктов.
Стоит учитывать и нагрузку на ресурсы сервера: каждый раунд GroupChat — это отдельный вызов модели, и при большом числе участников время ответа растёт линейно вместе с числом раундов, а не остаётся постоянным. На VDS с ограниченным числом ядер CPU имеет смысл заранее выставить разумный max_round и следить за очередью запросов к Ollama, иначе диалог агентов может занять минуты вместо секунд.