Запуск сессии
Создайте сессию, чтобы запустить агента и начать выполнение задач.
Сессия — это экземпляр агента внутри окружения. Каждая сессия ссылается на агента и окружение (оба создаются отдельно) и сохраняет историю разговора на протяжении нескольких взаимодействий. Сессии следуют двухэтапному жизненному циклу: сначала создайте сессию, затем отправьте пользовательское событие, чтобы начать работу. Вы также можете объединить оба шага в один вызов с помощью initial_events.
Создание сессии
Для сессии требуются идентификатор agent и идентификатор environment. Агенты — это версионируемые ресурсы; передача идентификатора agent в виде строки создаёт сессию с последней версией агента.
session = client.beta.sessions.create(
agent=agent.id,
environment_id=environment.id,
)Чтобы закрепить сессию за конкретной версией агента, передайте объект. Это позволяет вам точно контролировать, какая версия запускается, и поэтапно развёртывать новые версии независимо.
pinned_session = client.beta.sessions.create(
agent={"type": "agent", "id": agent.id, "version": 1},
environment_id=environment.id,
)Инициализация сессии начальными событиями
Вы можете создать сессию и начать её работу одним вызовом. initial_events — это необязательный массив начальных событий, отправляемых в сессию при создании и обрабатываемых по порядку. Он поддерживает события user.message и user.define_outcome и принимает максимум 50 событий. Непустой список запускает цикл агента в том же вызове: сессия создаётся сразу в статусе running, без дополнительного запроса.
Следующий пример создаёт сессию с одним событием user.message в initial_events:
seeded_session = client.beta.sessions.create(
agent=agent.id,
environment_id=environment.id,
initial_events=[
{
"type": "user.message",
"content": [
{"type": "text", "text": "List the files in the working directory."}
],
},
],
)
# initial_events не возвращаются в ответе на создание; читаем их
# из списка событий сессии.
for event in client.beta.sessions.events.list(seeded_session.id):
if event.type == "user.message":
for block in event.content:
if block.type == "text":
print(f"Seeded event: {block.text}")Никакие другие типы событий не принимаются. События, отвечающие на ход агента (user.tool_confirmation, user.tool_result и user.custom_tool_result), не принимаются, поскольку ход агента ещё не существует, а user.interrupt не принимается, поскольку нет хода, который можно было бы остановить. В отличие от initial_events в запланированном развёртывании, initial_events сессии не принимают system.message.
Каждое событие в initial_events проверяется и сохраняется до возврата ответа на создание, в порядке списка, с идентификатором, назначенным сервером, — точно так же, как если бы вы отправили его на конечную точку отправки событий сразу после создания. Правила для содержимого каждого события также совпадают с правилами этой конечной точки. Пустой список эквивалентен отсутствию поля. Проверка выполняется по принципу «всё или ничего»: если какое-либо событие не проходит проверку, весь запрос отклоняется и сессия не создаётся.
Запрос на создание отклоняется в следующих случаях:
| Условие | Статус |
|---|---|
Более одного события user.define_outcome | 400 |
Событие user.define_outcome без rubric | 400 |
Более 100 блоков содержимого document с файловым источником во всём списке | 400 |
| Тело запроса более 32 МБ | 413 |
Событие user.define_outcome в initial_events принимается при тех же условиях, что и при отправке его в существующую сессию; см. Определение результатов.
Переопределение конфигурации агента для сессии
Вы можете передать agent в трёх формах: строка с идентификатором агента, объект с закреплённой версией (type: "agent") или объект переопределений. Форма с переопределениями изменяет части конфигурации агента для одной сессии. Используйте её, чтобы попробовать другую модель или предоставить дополнительный инструмент в одной сессии без создания новой версии агента. Для формы с переопределениями установите type в agent_with_overrides и передайте id агента и, при необходимости, version (опустите version, чтобы использовать последнюю версию агента). Затем включите любые из полей model, system, tools, mcp_servers или skills со значениями, которые должна использовать сессия.
Каждое переопределяемое поле подчиняется одним и тем же трём правилам:
- Опустить поле: сессия наследует значение от версии агента, на которую она ссылается.
- Установить поле в
nullили в пустой массив для полей-списков: сессия запускается с очищенным полем. Это правило полностью применяется кsystemиskills. Есть три исключения:modelникогда нельзя очистить. Сессии всегда нужна модель, поэтомуmodel: nullвозвращает ошибку 400agent_model_required.- Очистка
toolsвозвращает ошибку 400, если итоговое значениеskillsсессии непустое, поскольку навыкам требуется инструментread. В остальных случаяхtools: nullиtools: []очищают поле. - Очистка
mcp_serversвозвращает ошибку 400, если итоговое значениеtoolsсессии всё ещё содержитmcp_toolset, ссылающийся на один из серверов агента. Переопределитеtoolsв том же запросе, чтобы удалить эти записиmcp_toolset, а затем очиститеmcp_servers.
- Установить поле в значение: значение полностью заменяет значение агента. Переопределения никогда не объединяются с конфигурацией агента, поэтому переопределение
toolsдолжно перечислять все инструменты, которые должны быть у сессии. Аналогично, переопределениеmodelполностью заменяет объектmodelагента, поэтому собственное значениеeffortагента не переносится. Чтобы выполнять сессию с определённым уровнем усилий, задайтеeffortвнутри объектаmodelв переопределении. Уровень, который модель не поддерживает, возвращает ошибку 400, а переопределениеmodelбезeffortвыполняется с уровнем усилий этой модели по умолчанию.
Переопределения применяются только к создаваемой вами сессии. Они не изменяют ресурс агента и не создают новую версию агента, поэтому другие сессии, ссылающиеся на того же агента, не затрагиваются.
В ответе объект agent отражает конфигурацию, с которой работает сессия после применения переопределений. Его id и version по-прежнему идентифицируют агента и версию, к которым применены переопределения. Это позволяет вам отследить сессию до её базового агента.
Следующий пример запускает сессию, которая переопределяет модель и очищает «system prompt» (системную подсказку):
override_session = client.beta.sessions.create(
agent={
"type": "agent_with_overrides",
"id": agent.id,
"model": {"id": "claude-sonnet-5"},
"system": None, # clear the agent's system prompt for this session
},
environment_id=environment.id,
)
# Агент в ответе — это разрешённый снимок с применёнными переопределениями.
print(f"Model: {override_session.agent.model.id}")
print(f"System: {override_session.agent.system}")Закрепление географии инференса для сессии
Поскольку переопределение model полностью заменяет объект model агента, оно также устанавливает или снимает закрепление inference_geo модели для сессии: переопределение, включающее inference_geo, закрепляет географию, обслуживающую запросы сессии к модели, а переопределение, в котором оно опущено, снимает закрепление агента, так что сессия следует default_inference_geo рабочего пространства. Переопределённое значение проверяется на соответствие allowed_inference_geos рабочего пространства при создании сессии.
Следующий пример запускает сессию от агента, модель которого не имеет географического закрепления, закрепляет запросы сессии к модели за инференсом в США, включая inference_geo в переопределение model, и выводит значение, возвращённое в agent.model ответа:
session = client.beta.sessions.create(
agent={
"type": "agent_with_overrides",
"id": agent.id,
# Replaces the agent's `model` in full: restate `id`, add `inference_geo` to pin.
"model": {"id": "claude-opus-5-5", "inference_geo": "us"},
},
environment_id=environment.id,
)
print(f"Inference geo: {session.agent.model.inference_geo}")Установка бюджета сессии
Чтобы ограничить расходы сессии, передайте необязательный объект budget при её создании. Бюджет — это жёсткий потолок стоимости сессии по прейскуранту: платформа оценивает всё, что потребляет сессия, по публичным прейскурантным тарифам, и сессия прекращает отправлять новые запросы к модели, как только эта нарастающая сумма достигает max_list_cost. Установите type в limit и задайте для max_list_cost значения amount и currency. amount — это целое число центов США, записанное в виде строки, например "2500" для $25,00; API принимает строку, а не число, чтобы никогда не применялось округление с плавающей запятой. USD — единственная поддерживаемая в настоящее время валюта. Когда сессия достигает лимита, она приостанавливается и переходит в состояние ожидания с причиной остановки budget_reached. Лимит применяется между запросами к модели, поэтому запрос, который его пересекает, сначала завершается, и итоговая стоимость сессии по прейскуранту может оказаться немного выше лимита. Бюджет можно прикрепить только при создании: вы можете изменить или удалить его позже, но не можете добавить его к сессии, созданной без него.
Следующий пример создаёт сессию с бюджетом $25,00; ответ возвращает budget в ресурсе сессии:
curl -fsSL 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 @- <<EOF
{
"agent": "$AGENT_ID",
"environment_id": "$ENVIRONMENT_ID",
"budget": {
"type": "limit",
"max_list_cost": {"amount": "2500", "currency": "USD"}
}
}
EOFСм. Бюджеты сессий, чтобы узнать, как работает контроль лимита, что учитывается в стоимости по прейскуранту и как бюджеты ведут себя в мультиагентных сессиях.
Аутентификация MCP через хранилища
Если ваш агент использует инструменты MCP, требующие аутентификации, передайте vault_ids при создании сессии, чтобы сослаться на хранилище, содержащее сохранённые учётные данные OAuth. Anthropic управляет обновлением токенов от вашего имени. См. Аутентификация с помощью хранилищ, чтобы узнать, как создавать хранилища и регистрировать учётные данные.
vault_session = client.beta.sessions.create(
agent=agent.id,
environment_id=environment.id,
vault_ids=[vault.id],
)Запуск сессии
Создание сессии без initial_events регистрирует сессию, но не начинает никакой работы; песочница окружения начинает подготавливаться сразу после создания сессии, поэтому первый вызов инструмента её не ожидает. Чтобы делегировать задачу, отправьте события в сессию с помощью пользовательского события. Чтобы вместо этого передать первое событие в запросе на создание, см. Инициализация сессии начальными событиями. Сессия действует как конечный автомат, отслеживающий прогресс, в то время как события управляют фактическим выполнением.
client.beta.sessions.events.send(
session.id,
events=[
{
"type": "user.message",
"content": [
{"type": "text", "text": "List the files in the working directory."}
],
},
],
)См. Поток событий сессии, чтобы узнать, как выполнять потоковую передачу ответов агента и обрабатывать подтверждения инструментов.
См. Статусы сессии, чтобы узнать о статусах, через которые проходит сессия.
Следующие шаги
Получение, перечисление, обновление, архивирование и удаление сессий Claude Managed Agents.
Отправляйте события, получайте ответы в потоковом режиме и прерывайте или перенаправляйте вашу сессию в процессе выполнения.
Создавайте развёртывания и управляйте ими с помощью Claude API: запускайте агента по повторяющемуся расписанию cron и просматривайте историю его запусков.
Was this page helpful?