Мультиагентная оркестрация позволяет одному агенту координировать работу с другими для выполнения сложных задач. Агенты могут действовать параллельно, каждый со своим изолированным контекстом, что помогает повысить качество результатов, а также может сократить время выполнения.
Все запросы к Managed Agents API требуют бета-заголовка managed-agents-2026-04-01. SDK устанавливает бета-заголовок автоматически.
Все агенты используют общую песочницу, файловую систему и учётные данные хранилища, но каждый агент работает в собственном потоке сессии (session thread) — изолированном по контексту потоке событий с собственной историей разговора. Координатор сообщает об активности в основном потоке (primary thread), который совпадает с потоком событий уровня сессии; дополнительные потоки создаются во время выполнения, когда координатор делегирует работу.
Потоки являются постоянными: координатор может отправить дополнительный запрос агенту, которого он вызывал ранее, и этот агент сохраняет всё из своих предыдущих ходов.
Каждый агент использует собственную конфигурацию: модель, системную подсказку, инструменты, серверы MCP и навыки. Исключение составляют переопределения конфигурации агента на уровне сессии — они применяются к координатору и его копиям self. Инструменты, серверы MCP и контекст не являются общими.
Мультиагентная координация лучше всего подходит для сложных задач, которые либо требуют работы на различных поверхностях, либо состоят из нескольких чётко определённых подзадач, вносящих вклад в общую цель.
Хорошо работающие паттерны:
При определении вашего агента задайте multiagent, чтобы объявить список агентов, которым координатор может делегировать работу:
ant beta:agents create <<YAML
name: Engineering Lead
model: claude-opus-4-8
system: You coordinate engineering work. Delegate code review to the reviewer agent and test writing to the test agent.
tools:
- type: agent_toolset_20260401
multiagent:
type: coordinator
agents:
- type: agent
id: $REVIEWER_AGENT_ID
- type: agent
id: $TEST_WRITER_AGENT_ID
YAMLmultiagent.agents может принимать любое из следующих значений:
{"type": "agent", "id": agent.id} ссылается на ранее созданного агента agent по идентификатору. Если version не указана, ссылка закрепляется за последней версией этого агента на момент создания координатора.{"type": "agent", "id": agent.id, "version": agent.version} закрепляет конкретную версию агента.{"type": "self"} позволяет координатору создавать копии самого себя. Если сессия была создана с переопределениями конфигурации агента, эти переопределения также применяются к этим копиям; записи списка, на которые ссылаются по идентификатору, не затрагиваются.Конфигурация координатора, включая его список multiagent.agents, фиксируется в виде снимка при создании или обновлении координатора. Агенты, на которых есть ссылки, остаются закреплёнными за версиями, разрешёнными на тот момент, и не подхватывают автоматически последующие обновления своих определений. Чтобы делегировать работу более новой версии агента, на которого есть ссылка, обновите координатор, чтобы его список ссылался на эту версию.
Координатор может делегировать только на один уровень агентов; глубина > 1 игнорируется. В multiagent.agents можно указать максимум 20 уникальных агентов, но координатор может вызывать несколько копий каждого агента.
Создайте сессию, ссылающуюся на координатор. Координатор делегирует работу агентам из своего списка по мере необходимости.
session = client.beta.sessions.create(
agent=coordinator.id,
environment_id=environment.id,
)Серверы MCP привязаны к агенту (каждое определение агента объявляет собственные серверы и инструменты), тогда как учётные данные хранилища привязаны к сессии (vault_ids, переданные при создании сессии, применяются к каждому потоку). Два следствия для вашей интеграции:
Переопределения конфигурации агента при создании сессии могут заменить серверы MCP координатора и его копий self.
research_agent = client.beta.agents.create(
name="researcher",
model="claude-haiku-4-5",
mcp_servers=[
{"type": "url", "name": "github", "url": "https://api.githubcopilot.com/mcp/"},
],
tools=[{"type": "mcp_toolset", "mcp_server_name": "github"}],
)
coordinator = client.beta.agents.create(
name="coordinator",
model="claude-opus-4-8",
tools=[{"type": "agent_toolset_20260401"}],
multiagent={
"type": "coordinator",
"agents": [{"type": "agent", "id": research_agent.id}],
},
)
session = client.beta.sessions.create(
agent=coordinator.id,
environment_id=environment.id,
vault_ids=[vault.id],
)
print(session.id)В этом примере только агент-исследователь объявляет сервер MCP GitHub, поэтому координатор не имеет к нему доступа. Параметр vault_ids сессии предоставляет учётные данные GitHub потоку исследователя.
Если вызовы MCP агента не проходят аутентификацию после объявления сервера, убедитесь, что mcp_server_url учётных данных точно совпадает с mcp_servers[].url агента, включая схему и завершающий слэш.
Поток событий уровня сессии (/v1/sessions/:id/events/stream) считается основным потоком и содержит сжатое представление всей активности во всех потоках. Вы не видите полную активность субагентов, но видите начало и конец их работы, а также блокирующие события, такие как запросы разрешений на использование инструментов.
Потоки сессии — это то место, где вы детально изучаете активность конкретного агента.
Статус сессии status является агрегацией активности всех агентов; если хотя бы один поток находится в состоянии running, то общий статус сессии также будет running.
Поддерживается максимум 25 одновременных потоков. Координатор может вызывать несколько копий одного агента из списка, создавая несколько потоков, связанных с одним agent.
Эти события отображают мультиагентную активность в основном потоке по адресу /v1/sessions/:id/events/stream.
| Тип | Описание |
|---|---|
session.thread_created | Поток был создан. Включает session_thread_id и agent_name. |
session.thread_status_running | Поток начал активность. |
session.thread_status_idle | Агент, связанный с потоком, ожидает ввода. Включает stop_reason, указывающий, почему агент остановился. |
session.thread_status_terminated | Поток был архивирован или столкнулся с критической ошибкой. |
agent.thread_message_received | Агент доставил свой результат координатору. Включает from_session_thread_id, from_agent_name и content. |
agent.thread_message_sent | Координатор отправил дополнительный запрос другому агенту. Включает to_session_thread_id, to_agent_name и content. |
Критические события проксируются в основной поток. Однако вам может понадобиться изучить рассуждения и вызовы инструментов конкретного агента. Для этого используйте потоковую передачу или получите список событий из соответствующего потока сессии.
Если субагенту требуется что-то от вашего клиента, например разрешение на запуск инструмента с режимом always_ask или результат пользовательского инструмента, событие дублируется в основной поток с session_thread_id, идентифицирующим исходный поток сессии.
{
"type": "session.thread_status_idle",
"id": "sevt_01ABC...",
"session_thread_id": "sth_01DEF...",
"agent_name": "code-reviewer",
"stop_reason": {
"type": "requires_action",
"event_ids": ["toolu_01XYZ..."]
}
}Отправьте user.tool_confirmation (с tool_use_id) или user.custom_tool_result (с custom_tool_use_id); сервер автоматически направит ответ в нужный поток.
Следующий пример расширяет обработчик подтверждения инструментов для маршрутизации ответов. Тот же паттерн применяется к user.custom_tool_result.
for event_id in stop.event_ids:
client.beta.sessions.events.send(
session.id,
events=[
{
"type": "user.tool_confirmation",
"tool_use_id": event_id,
"result": "allow",
}
],
)Was this page helpful?