Учебник

AutoGen: несколько ИИ-агентов работают как команда

Ваши менеджеры тратят часы на согласование задач, а клиенты ждут ответа. Что если два ИИ-агента сами разберут заявку: один ищет факты, другой готовит ответ? Microsoft AutoGen позволяет собрать такую команду за вечер без найма программиста. Разбираем на примере стройфирмы: как агенты обрабатывают заявки на ремонт, проверяют сметы и готовят договоры.

Макс Космов··7 мин чтения

У ваших менеджеров уходит по 4 часа в день на пересылку заявок между отделами. Клиент просит коммерческое предложение - менеджер идёт к сметчику, сметчик к снабженцу, снабженец к директору. Каждый шаг - ожидание. Половина заявок теряется. Вот как закрыть эту дыру за вечер без программиста: собрать команду ИИ-агентов, которые сами разберут задачу, найдут данные и подготовят ответ.

Разберём на примере стройфирмы (это пример, не реальный кейс автора). У вас есть прайс на работы и типовой договор подряда. Клиент пишет в мессенджер: "Нужен ремонт ванной 4 кв.м. под ключ". Вместо того чтобы гонять заявку по цепочке, вы запускаете команду из двух агентов: исследователь ищет в прайсе расценки на ванную, редактор оформляет коммерческое предложение. Четыре обмена - и готовый документ у клиента.

Почему это стало возможно: от очереди к параллельной работе

AutoGen - фреймворк от Microsoft, который позволяет нескольким ИИ-агентам общаться друг с другом и координировать действия. До версии 0.4 (конец 2024) агенты работали по очереди: первый говорит, второй ждёт, третий ждёт второго. Как очередь на кассе. Сейчас они работают параллельно, как хорошо слаженная команда.

Для бизнеса это означает: если раньше на обработку 100 заявок уходил час, теперь 10 минут. Агенты не ждут друг друга - они обмениваются сообщениями через единый центр (runtime), который распределяет задачи.

Архитектура: три слоя, из которых вам нужен только один

AutoGen v0.4 состоит из трёх уровней. Для предпринимателя важно: разработчик (или вы сами) выбирает, на каком уровне работать. Большинству задач хватает верхнего слоя - AgentChat.

  • Ядро - низкоуровневая среда для обмена сообщениями. Нужна, если строите собственную платформу. Вам не нужно.
  • AgentChat - высокоуровневый интерфейс с готовыми классами: AssistantAgent (агент-помощник), UserProxyAgent (агент-представитель человека), GroupChat (групповой чат). Это то, что вы будете использовать.
  • Расширения - интеграции с конкретными провайдерами: OpenAI, Azure, собственные инструменты.

Следующий код создаёт команду из двух агентов - исследователя и редактора - которые по очереди работают над задачей. Исследователь собирает факты, редактор превращает их в текст. Четыре обмена (max_turns=4) достаточно для короткого обзора.

import asyncio
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient

async def main():
 model_client = OpenAIChatCompletionClient(model="gpt-4o-mini")

 agent1 = AssistantAgent(
 name="researcher",
 model_client=model_client,
 system_message="Ты исследователь. Собираешь факты и данные."
 )

 agent2 = AssistantAgent(
 name="writer",
 model_client=model_client,
 system_message="Ты писатель. Оформляешь данные в читаемый текст."
 )

 team = RoundRobinGroupChat([agent1, agent2], max_turns=4)
 await Console(team.run_stream(task="Напиши краткий обзор LangGraph"))

asyncio.run(main())

AssistantAgent и UserProxyAgent: ваши виртуальные сотрудники

AssistantAgent - это агент, работающий на языковой модели (LLM, большая языковая модель - ИИ, который понимает и генерирует текст). Он получает задачу, разбивает её на шаги, вызывает нужные инструменты (поиск, база данных, отправка письма) и возвращает результат. Параметр reflect_on_tool_use=True заставляет агента перепроверить ответ инструмента, прежде чем передать его дальше - как сотрудник, который перепроверяет данные перед отправкой отчёта.

from autogen_agentchat.agents import AssistantAgent
from autogen_ext.tools.code_execution import PythonCodeExecutionTool

coder = AssistantAgent(
 name="coder",
 model_client=model_client,
 tools=[PythonCodeExecutionTool()],
 system_message="Ты Python-разработчик. Пиши и запускай код для решения задач.",
 reflect_on_tool_use=True
)

UserProxyAgent - агент, представляющий человека в диалоге. Может автоматически подтверждать сообщения или запрашивать ввод от реального пользователя. Это точка, где человек включается в процесс: одобряет действие, исправляет курс, останавливает выполнение.

from autogen_agentchat.agents import UserProxyAgent

user_proxy = UserProxyAgent(
 name="user",
 input_func=input # запрашивает ввод из терминала
)
# Для автоматического режима без ввода пользователя:
# input_func=None -> агент отвечает пустым подтверждением автоматически

Изолированная среда выполнения кода (sandbox). Нужна потому, что агент может попросить запустить произвольный код. Без изоляции это риск для всей инфраструктуры.

  • LocalCommandLineCodeExecutor - выполнение локально (только для разработки)
  • DockerCommandLineCodeExecutor - изолированный контейнер (рекомендуется для боевой среды)

Docker-контейнер - это виртуальный компьютер внутри компьютера: агент работает там, не имея доступа к остальной инфраструктуре компании.

from autogen_ext.code_executors.docker import DockerCommandLineCodeExecutor

executor = DockerCommandLineCodeExecutor(
 image="python:3.11-slim",
 timeout=30,
 work_dir="/tmp/agent_work"
)

GroupChat: регламент совещания для агентов

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

Аналогия для бизнеса: GroupChat - это регламент совещания. Круговой режим - каждый участник высказывается по кругу. Режим с ведущим - модератор решает, кому дать слово в зависимости от ситуации.

RoundRobinGroupChat - агенты отвечают по очереди. Простой и предсказуемый, подходит для задач с чёткими ролями. Параметр termination_condition задаёт условие завершения: когда кто-то напишет слово «ГОТОВО», команда заканчивает работу.

team = RoundRobinGroupChat(
 [researcher, analyst, writer],
 max_turns=6,
 termination_condition=TextMentionTermination("ГОТОВО")
)

SelectorGroupChat - отдельная языковая модель решает, кто должен говорить следующим. Более гибкий, но дороже по стоимости: каждый выбор следующего агента - это отдельный вызов модели.

from autogen_agentchat.teams import SelectorGroupChat

team = SelectorGroupChat(
 [researcher, coder, reviewer],
 model_client=model_client,
 selector_prompt="Выбери агента, наиболее подходящего для следующего шага."
)

Условия завершения диалога. Без них агенты будут работать до исчерпания лимита или бюджета на API-запросы.

from autogen_agentchat.conditions import (
 MaxMessageTermination,
 TextMentionTermination,
 StopMessageTermination
)

condition = MaxMessageTermination(10) | TextMentionTermination("DONE")

Практика: команда агентов для обработки заявок клиентов

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

Для бизнеса без программистов: это экономит 2-4 часа на каждой заявке. При 10 заявках в день экономия составляет 20-40 часов - это один полноценный сотрудник.

async def handle_request(code_snippet: str):
 model_client = OpenAIChatCompletionClient(model="gpt-4o")

 planner = AssistantAgent(
 name="planner",
 model_client=model_client,
 system_message=(
 "Ты планировщик обработки заявки. "
 "Получив описание задачи, укажи: что нужно сделать, какие данные запросить, "
 "какие шаги выполнить. Затем напиши PLAN_READY."
 )
 )

 estimator = AssistantAgent(
 name="estimator",
 model_client=model_client,
 tools=[PythonCodeExecutionTool()],
 system_message=(
 "Ты сметчик. Рассчитываешь стоимость работ и материалов по прайсу."
 )
 )

 lawyer = AssistantAgent(
 name="lawyer",
 model_client=model_client,
 tools=[PythonCodeExecutionTool()],
 system_message=(
 "Ты юрист. Проверяешь договор на соответствие типовому шаблону. "
 "В конце выводи вердикт: OK или NEED_REVIEW."
 )
 )

 team = RoundRobinGroupChat(
 [planner, estimator, lawyer],
 max_turns=9,
 termination_condition=TextMentionTermination("OK") |
 TextMentionTermination("NEED_REVIEW")
 )

 result = await team.run(task=f"Обработай заявку:\n```\n{code_snippet}\n```")
 return result

Типичный прогон: 6-9 сообщений, 20-45 секунд, $0.08-0.20 на GPT-4o.

Наблюдаемость: как понять, что делают агенты

Наблюдаемость (observability) - это ответ на вопрос «что вообще делают мои агенты?». Без мониторинга агентная система - чёрный ящик: что-то происходит, что-то стоит денег, но почему - непонятно.

Для предпринимателя это критично по трём причинам. Первая - аудит: нужно знать, какие данные агент запрашивал и что делал. Вторая - оптимизация стоимости: непрозрачная система легко съедает $5000 в месяц на API-запросы, которые никто не заказывал. Третья - отладка: когда агент даёт неправильный ответ, без трассировки невозможно понять, на каком шаге что-то пошло не так.

AutoGen v0.4 встроенно поддерживает OpenTelemetry (открытый стандарт сбора телеметрии из приложений). Каждое сообщение между агентами становится отдельной единицей трассировки (span) с атрибутами: имя агента, тип сообщения, количество токенов (единица стоимости запроса), задержка ответа.

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
from autogen_core.telemetry import OtelTracingObserver

provider = TracerProvider()
provider.add_span_processor(SimpleSpanProcessor(ConsoleSpanExporter()))
trace.set_tracer_provider(provider)

from autogen_agentchat.teams._events import OtelTracingObserver
team = RoundRobinGroupChat(
 agents,
 custom_observer=OtelTracingObserver()
)

Записи трассировки отправляются в любой сервис, поддерживающий стандарт OTLP: Jaeger, Tempo, Azure Monitor. Если в компании уже есть системы мониторинга, AutoGen встраивается без дополнительной разработки.

Microsoft Agent Framework 1.0: когда нужно больше

MAF добавляет поверх AutoGen v0.4 несколько слоёв для корпоративных сценариев.

Протокол A2A (Agent-to-Agent) - стандарт межагентного взаимодействия от Google и Microsoft. Агенты публикуют карточку (AgentCard) с описанием своих возможностей, другие агенты читают карточку и вызывают нужного через обычные HTTP-запросы. MAF поддерживает A2A из коробки: агент, написанный на AutoGen, может работать в связке с агентом на CrewAI или LangGraph.

Интеграция через MCP (Model Context Protocol, стандарт подключения инструментов для языковых моделей) позволяет агентам MAF использовать сотни готовых интеграций с внешними сервисами: Google Drive, Slack, базы данных, корпоративные системы.

from autogen_ext.tools.mcp import MCPToolAdapter

mcp_tools = await MCPToolAdapter.from_server_params(
 server_params={"command": "npx", "args": ["@modelcontextprotocol/server-filesystem"]}
)
agent = AssistantAgent(name="file_agent", tools=mcp_tools, ...)

Интеграция с Azure AI Foundry. Развёртывание агентов на Azure с управляемыми вычислениями, мониторингом и безопасностью корпоративного уровня. Актуально для компаний с требованиями к хранению данных внутри страны или отрасли.

Миграция: что делать, если уже используете старую версию

Переход с AutoGen v0.4 на MAF минимален - MAF построен поверх него. Импорты дополняются, GroupChat совместим, инструменты и model_client работают без изменений.

Переход с v0.2 на v0.4 или MAF требует переписывания. Реалистичная оценка: небольшой проект займёт 1-3 дня разработки. Крупный корпоративный проект с большим количеством собственных агентов - неделю.

Основные изменения:

  • ConversableAgent переходит в AssistantAgent с другими параметрами инициализации
  • GroupChat из v0.2 заменяется на RoundRobinGroupChat или SelectorGroupChat
  • Все функции-обработчики нужно сделать асинхронными (async)
  • Подход register_reply заменяется на собственные инструменты

Хорошая новость: концептуально система остаётся той же. Агенты, инструменты, групповой чат - всё это переехало, просто с другим синтаксисом. Знания о том, как проектировать агентные системы, переносятся полностью.

Частые вопросы

AutoGen устарел? Стоит ли начинать новый проект на нём в 2026?

Нет. AutoGen v0.4 активно развивается, Microsoft вкладывает ресурсы через MAF. Для мультиагентных диалоговых систем это один из лучших вариантов. Если нужен тонкий контроль над графом состояний - LangGraph, если нужны ролевые агенты с простым интерфейсом - AutoGen или CrewAI.

Чем Microsoft Agent Framework отличается от AutoGen v0.4?

MAF - надстройка, добавляющая протокол A2A, интеграции через MCP и Azure. Если разрабатываете самостоятельное Python-приложение без корпоративных требований, достаточно чистого AutoGen v0.4. MAF нужен для межсистемного взаимодействия и развёртывания в Azure.

Как ограничить число итераций в групповом чате?

Через MaxMessageTermination и параметр max_turns у команды. Рекомендуется задавать оба: max_turns как жёсткий предел, TextMentionTermination как мягкий выход по ключевому слову в ответе агента.

Можно ли запустить агентов AutoGen локально без Azure?

Да, это основной сценарий. Для локальной работы нужен только ключ OpenAI API или другого провайдера. Azure не требуется. MAF тоже работает локально, Azure-интеграция опциональна.

Как подключить собственный LLM (Ollama, vLLM) к AutoGen?

Через OpenAIChatCompletionClient с параметром base_url. Ollama - это локальный сервер для запуска открытых языковых моделей на собственном железе. Полезно когда данные нельзя отправлять во внешние облака.

from autogen_ext.models.openai import OpenAIChatCompletionClient

client = OpenAIChatCompletionClient(
 model="llama3.2",
 base_url="http://localhost:11434/v1",
 api_key="ollama"
)

Также есть autogen-ext с нативными адаптерами для Ollama.

Что дальше

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

Для понимания паттернов мультиагентных систем независимо от фреймворка - статья Мульти-агентные системы: оркестратор-воркер, peer-to-peer, иерархия. Разборы новых инструментов - в AI Компас и на ai-uchebnik.ru.

AI Компас (t.me/kosmoslab_ai) - канал для предпринимателей в РФ и СНГ, которые применяют AI в своём бизнесе без программиста. Разбираем инструменты и схемы - без курсов и теории.