Мультиагентность — это функция в режиме Research Preview. Запросите доступ, чтобы попробовать её.
Мультиагентная оркестрация позволяет одному агенту координировать работу с другими для выполнения сложных задач. Агенты могут работать параллельно в собственном изолированном контексте, что помогает улучшить качество результатов и сократить время выполнения.
Все запросы к Managed Agents API требуют бета-заголовка managed-agents-2026-04-01. Для функций в режиме research preview необходим дополнительный бета-заголовок. SDK устанавливает эти бета-заголовки автоматически.
Все агенты используют один контейнер и файловую систему, но каждый агент работает в собственном потоке сессии — изолированном по контексту потоке событий с собственной историей разговора. Координатор отображает активность в основном потоке (который совпадает с потоком событий на уровне сессии); дополнительные потоки создаются во время выполнения, когда координатор принимает решение о делегировании.
Потоки являются постоянными: координатор может отправить последующее сообщение агенту, которому он обращался ранее, и этот агент сохраняет всё из своих предыдущих ходов.
Каждый агент использует собственную конфигурацию (модель, системный промпт, инструменты, MCP-серверы и навыки), определённую при создании этого агента. Инструменты и контекст не являются общими.
Мультиагентные сессии работают лучше всего, когда в рамках общей цели есть несколько чётко определённых специализированных задач:
Was this page helpful?
При определении вашего агента укажите дополнительные идентификаторы агентов, которых ему разрешено вызывать:
orchestrator=$(curl -fsS https://api.anthropic.com/v1/agents \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01" \
-H "content-type: application/json" \
-d @- <<EOF
{
"name": "Engineering Lead",
"model": "claude-sonnet-4-6",
"system": "You coordinate engineering work. Delegate code review to the reviewer agent and test writing to the test agent.",
"tools": [
{
"type": "agent_toolset_20260401"
}
],
"callable_agents": [
{"type": "agent", "id": "$REVIEWER_AGENT_ID", "version": $REVIEWER_AGENT_VERSION},
{"type": "agent", "id": "$TEST_WRITER_AGENT_ID", "version": $TEST_WRITER_AGENT_VERSION}
]
}
EOF
)Каждая запись в callable_agents должна быть идентификатором существующего агента. Поддерживается только один уровень делегирования: координатор может вызывать других агентов, но эти агенты не могут вызывать собственных агентов.
Затем создайте сессию, ссылаясь на оркестратор:
session=$(curl -fsS https://api.anthropic.com/v1/sessions \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01" \
-H "content-type: application/json" \
-d '{"agent": "'$ORCHESTRATOR_ID'", "environment_id": "'$ENVIRONMENT_ID'"}')Вызываемые агенты определяются из конфигурации оркестратора. Вам не нужно ссылаться на них при создании сессии.
Поток событий на уровне сессии (/v1/sessions/:id/stream) считается основным потоком и содержит сжатое представление всей активности по всем потокам. Вы не увидите отдельные трассировки вызванных агентов, но увидите начало и конец их работы. Потоки сессии — это место, где вы можете детально изучить рассуждения и вызовы инструментов конкретного агента.
Статус сессии также является агрегацией всей активности агентов; если хотя бы один поток находится в состоянии running, то общий статус сессии также будет running.
Перечислите все потоки в сессии следующим образом:
curl -fsS "https://api.anthropic.com/v1/sessions/$SESSION_ID/threads" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01" \
| jq -r '.data[] | "[\(.agent_name)] \(.status)"'Потоковая передача событий из конкретного потока:
curl -fsSN "https://api.anthropic.com/v1/sessions/$SESSION_ID/threads/$THREAD_ID/stream" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01" |
while IFS= read -r line; do
[[ $line == data:* ]] || continue
json=${line#data: }
case $(jq -r '.type' <<<"$json") in
agent.message)
printf '%s' "$(jq -j '.content[] | select(.type == "text") | .text' <<<"$json")"
;;
session.thread_idle)
break
;;
esac
doneСписок прошлых событий для потока:
curl -fsS "https://api.anthropic.com/v1/sessions/$SESSION_ID/threads/$THREAD_ID/events" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01" \
| jq -r '.data[] | "[\(.type)] \(.processed_at)"'Эти события отображают мультиагентную активность в потоке событий сессии верхнего уровня.
| Тип | Описание |
|---|---|
session.thread_created | Координатор создал новый поток. Включает session_thread_id и model. |
session.thread_idle | Поток агента завершил текущую работу. |
agent.thread_message_sent | Агент отправил сообщение в другой поток. Включает to_thread_id и content. |
agent.thread_message_received | Агент получил сообщение из другого потока. Включает from_thread_id и content. |
Когда поток callable_agent требует чего-либо от вашего клиента (разрешения на запуск инструмента always_ask или результата пользовательского инструмента), запрос появляется в потоке сессии с полем session_thread_id. Включите тот же session_thread_id при отправке ответа, чтобы платформа направила его обратно в ожидающий поток.
session_thread_id присутствует: событие возникло в потоке субагента. Повторите его в своём ответе.session_thread_id отсутствует: событие пришло из основного потока. Ответьте без этого поля.tool_use_id для сопоставления запросов с ответами.Пример ниже расширяет обработчик подтверждения инструмента для маршрутизации ответов. Тот же шаблон применяется к user.custom_tool_result.
while IFS= read -r event_id; do
pending=$(jq -r --arg id "$event_id" '.[$id]' <<<"$events_by_id")
thread_id=$(jq -r '.session_thread_id // empty' <<<"$pending")
jq -n --arg id "$event_id" --arg thread "$thread_id" '
{events: [
{type: "user.tool_confirmation", tool_use_id: $id, result: "allow"}
+ (if $thread != "" then {session_thread_id: $thread} else {} end)
]}' |
curl -fsS "https://api.anthropic.com/v1/sessions/$SESSION_ID/events?beta=true" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01" \
-H "content-type: application/json" \
-d @-
done < <(jq -r '.stop_reason.event_ids[]' <<<"$data")