Поток событий и управление

Тема дорожной карты · Claude от Anthropic

Сессия Managed Agents общается с вашим приложением через события: вы отправляете входящие события в сессию, а всё, что делает агент — сообщения, вызовы инструментов, смены статуса, — приходит обратно потоком событий. Это единственный канал управления работающим агентом, поэтому корректная работа со стримом, реконнектами и статусами определяет надёжность всей интеграции.

Как это работает

Отправлять можно пять типов событий. user.message — обычное сообщение агенту. user.interrupt — прерывание, которое обгоняет очередь других событий. user.tool_confirmation — ответ на запрос подтверждения инструмента при политике разрешений always_ask. user.custom_tool_result — результат кастомного инструмента, который исполняет ваше приложение, а не контейнер. user.define_outcome — постановка цели с рубрикой вместо чат-сообщения. Получать события можно тремя способами: SSE-стрим GET /v1/sessions/{id}/events/stream для реального времени, постраничный список событий (polling) для истории и вебхуки — HMAC-подписанные уведомления с «тонкими» payload, по которым состояние ресурса нужно дозапросить отдельно. Статусы сессии приходят теми же событиями, и у idle-события есть поле stop_reason, объясняющее, почему агент остановился.

Когда применять

SSE-стрим — основной канал: держите его открытым, пока сессия жива, и реагируйте на события по мере поступления. Polling-список используйте для восстановления полной истории — например, после обрыва соединения или при подключении нового наблюдателя. Вебхуки подходят, когда держать долгоживущее соединение неудобно: сервер уведомит о смене состояния сессии, а детали вы дочитаете обычным запросом. user.interrupt применяйте для команд «стоп»: он не встаёт в очередь за уже отправленными сообщениями, а обгоняет её.

Типичные ошибки

Первая и самая дорогая ошибка — отправить стартовое сообщение до открытия стрима: у стрима нет replay, и события, случившиеся до подключения, вы уже не увидите. Правильный порядок — сначала открыть стрим, потом отправлять kickoff. Вторая ошибка — наивный реконнект: после обрыва нужно сначала запросить историю через список событий, а затем дедуплицировать её с живым стримом по id события, иначе часть событий потеряется или задвоится. Третья — завершать цикл по «голому» status_idle: сессия уходит в idle и тогда, когда ждёт вашего действия. Проверяйте stop_reason — значение requires_action означает, что агент заблокирован в ожидании подтверждения инструмента или результата кастомного инструмента, и выходить из цикла нельзя.

Связанные понятия

Полезные ресурсы

Проверить знания (2)

Загрузка вопросов…