claude CLI, который владеет оболочкой, рабочей директорией и файлами сеанса на диске. Размещение его не похоже на размещение stateless API-обертки. Каждый работающий агент — это долгоживущий процесс, привязанный к локальному состоянию, что определяет, как вы распределяете ресурсы, сохраняете сеансы и масштабируете несколько арендаторов.
На этой странице рассматривается самостоятельное размещение на вашей собственной инфраструктуре: поймите модель подпроцесса, выберите шаблон сеанса, подготовьте контейнер и обработайте производственные проблемы, такие как сохранение, наблюдаемость, аутентификация и изоляция нескольких арендаторов. Для развертываемых Dockerfile и манифестов Kubernetes см. руководство по размещению.
Если вам не требуется контроль инфраструктуры, пользовательская изоляция или собственная плоскость данных, рассмотрите вместо этого Managed Agents: размещенный REST API, где Anthropic запускает агента и sandbox, поэтому ваше приложение отправляет события и получает результаты обратно без необходимости управления инфраструктурой размещения.
Для усиления безопасности сверх базового sandboxing, включая сетевые элементы управления, управление учетными данными и варианты изоляции, см. Безопасное развертывание.
Модель подпроцесса
Каждое решение о размещении на этой странице следует из того, как SDK запускает агента. Когда ваш код вызываетquery(), SDK порождает отдельный процесс CLI claude и взаимодействует с ним через stdio. Этот подпроцесс владеет оболочкой, рабочей директорией и транскриптами сеанса JSONL на локальном диске.
cwd при каждом вызове query(), когда сеансам нужны отдельные файловые системы:
Состояние, которое находится на локальном диске
Три вида состояния агента по умолчанию находятся на файловой системе контейнера. Ни одно из них не сохраняется при перезагрузке контейнера, масштабировании вниз или перемещении на другой узел.| Состояние | Расположение по умолчанию |
|---|---|
| Транскрипты сеанса | ~/.claude/projects/, или директория projects/ под CLAUDE_CONFIG_DIR, если установлена |
Файлы памяти CLAUDE.md | ~/.claude/CLAUDE.md для уровня пользователя и рабочая директория сеанса для уровня проекта |
| Артефакты рабочей директории | Рабочая директория сеанса |
SessionStore. Файлы памяти и другие артефакты рабочей директории нуждаются в собственной стратегии хранения, такой как смонтированный том или синхронизация хранилища объектов.
Для информации о том, как сеансы, возобновление и ветвление работают на уровне API, см. Sessions.
Выберите паттерн сессии
Эти четыре паттерна охватывают жизненный цикл сессии: как долго контейнер существует относительно сессий, которые он обслуживает. Для информации о том, где запускается контейнер, в hosting cookbook есть развертываемый код для локального Docker, Modal и Kubernetes. Выберите паттерн сессии здесь и цель развертывания из cookbook.Ephemeral sessions
Создайте контейнер для каждой задачи пользователя и уничтожьте его по завершении задачи. Лучше всего подходит для одноразовых задач. Пользователь может по-прежнему взаимодействовать с ИИ во время выполнения задачи, но после завершения контейнер уничтожается. Примеры рабочих нагрузок включают исследование и исправление ошибок, извлечение счетов и квитанций, перевод документов и преобразование медиа. Контейнер запускает одноразовую точку входа, которая вызывает SDK и завершает работу. Пример ниже показывает минимальную версию на TypeScript. Сохраните её какentrypoint.mts или установите "type": "module" в package.json, чтобы был доступен top-level await.
Long-running sessions
Запускайте постоянные экземпляры контейнеров, часто размещая несколько процессов SDK на контейнер, для обслуживания текущей работы. Лучше всего подходит для агентов, которые выполняют автономные действия, предоставляют контент или обрабатывают высокообъемные потоки сообщений. Примеры рабочих нагрузок включают агента электронной почты, который сортирует и отвечает на входящую почту, конструктор сайтов, который размещает редактируемый для каждого пользователя сайт через порты контейнера, и чат-бота, который обрабатывает непрерывный трафик с платформы, такой как Slack. Контейнер предоставляет HTTP или WebSocket endpoint и сопоставляет каждую активную сессию с долгоживущим запросом и подпроцессом позади него. В TypeScript используйтеstreamInput() для добавления ходов в активную сессию и startup() для предварительного прогрева подпроцессов перед входящим трафиком. В Python используйте ClaudeSDKClient для сохранения сессии открытой между ходами. Размер контейнера должен быть таким, чтобы он мог вмещать максимальное количество одновременных сессий в памяти.
Hybrid sessions
Ephemeral контейнеры, которые гидрируют изSessionStore при запуске и сохраняют обновления обратно. Лучше всего подходит для сессий, которые охватывают много взаимодействий, но остаются неактивными между ними. Контейнер выключается в периоды простоя и снова включается, когда пользователь возвращается.
Примеры рабочих нагрузок включают личного менеджера проектов с периодическими проверками, глубокое исследование, которое приостанавливается и возобновляется в течение часов, и агента поддержки клиентов, который загружает историю билетов между взаимодействиями.
Настройте timeout простоя вашего провайдера в соответствии с тем, как часто вы ожидаете возвращения пользователей. Выключение контейнера без настроенного SessionStore приводит к потере транскрипта вместе с ним, поэтому хранилище требуется для этого паттерна, а не опционально.
Паттерн основан на возобновлении сессии по ID с подключенным общим хранилищем:
SessionStore и справочных адаптеров.
Multi-agent container
Запускайте несколько подпроцессов SDK внутри одного контейнера. Лучше всего подходит для агентов, которые должны тесно сотрудничать, например для многоагентных симуляций, где агенты взаимодействуют друг с другом в общей среде. Дайте каждому агенту свой рабочий каталог, чтобы они не перезаписывали файлы друг друга, и изолируйте загрузку параметров, чтобы файлыCLAUDE.md для каждого агента не утекали между агентами. Смотрите Multi-tenant isolation для конкретных опций.
Подготовка контейнера
Изоляция на основе контейнера
Запустите SDK внутри изолированного контейнера для изоляции процессов, ограничения ресурсов, управления сетью и эфемерной файловой системы. Несколько поставщиков специализируются на изолированных контейнерных средах, которые соответствуют модели Agent SDK. Вопросы, на которые следует ответить при выборе поставщика:- Кто управляет sandbox: поставщик sandbox-as-a-service управляет инфраструктурой для вас, в то время как самостоятельно размещаемые варианты предоставляют вам программное обеспечение для запуска на собственной инфраструктуре.
- Задержка холодного старта: время от “создания sandbox” до “готовности принять первый запрос”. Эфемерные паттерны требуют запусков менее чем за секунду. Долгоживущие паттерны допускают большую задержку.
- Постоянное хранилище: предоставляет ли поставщик долговечные тома или только эфемерный диск. Гибридный паттерн требует долговечного хранилища где-то, будь то в sandbox или рядом с ним.
- Модель ценообразования: оплата за секунду, за запрос или фиксированная почасовая оплата. Ценообразование за секунду подходит для нестабильных эфемерных рабочих нагрузок. Почасовая оплата подходит для долгоживущих сеансов.
- Сетевые возможности: поддержка пользовательских правил исходящего трафика, исходящих прокси и приватного VPC peering для регулируемых сред.
- Modal Sandbox, с демонстрационной реализацией
- Cloudflare Sandboxes
- Daytona
- E2B
- Fly Machines
- Vercel Sandbox
Зависимости среды выполнения
Контейнер требует только среду выполнения вашего SDK:- Python 3.10+ для Python SDK или Node.js 18+ для TypeScript SDK
- Оба пакета SDK включают встроенный бинарный файл Claude Code для платформы хоста, поэтому отдельная установка Claude Code или Node.js не требуется для порожденного CLI
Ресурсы
1 ГиБ ОЗУ, 5 ГиБ диска и 1 ЦПУ на агента — это разумная отправная точка для вновь запущенного экземпляра. Использование памяти растет с длительностью сеанса и активностью инструментов, поэтому выбирайте размер для фактических длительностей сеансов и параллелизма, которые вам нужны, а не для базовой линии в режиме ожидания. См. Масштабирование и параллелизм для того, как рассчитать агентов на хост.Сеть
SDK требует исходящий HTTPS кapi.anthropic.com или к региональной конечной точке вашего поставщика при запуске на Bedrock или Vertex. Если ваши агенты используют MCP servers или внешние инструменты, им также требуется исходящий доступ к этим конечным точкам. Для production маршрутизируйте исходящий трафик через прокси исходящего трафика, который обеспечивает списки разрешенных доменов, внедряет учетные данные и регистрирует запросы. См. Безопасное развертывание для полного паттерна.
Для входящего трафика откройте порт HTTP или WebSocket на контейнере. Ваше приложение обрабатывает запросы клиентов на этом порту и вызывает SDK внутренне; сам подпроцесс не прослушивает сеть.
Решение производственных проблем
Рассмотрите эти решения перед развертыванием самостоятельно размещаемого агента.Сохранение сеанса и состояния
Локальный диск по умолчанию теряется при перезагрузке, масштабировании или перемещении на другой узел. Для любого сеанса, который пользователь ожидает возобновить, зеркалируйте стенограмму в долговечное хранилище с помощью адаптераSessionStore. См. Эталонные реализации для адаптеров S3, Redis и Postgres, а также набор соответствия для вашего собственного.
Три вещи, которые нужно знать о том, как ведет себя SessionStore:
- Только стенограммы:
SessionStoreзеркалирует стенограммы, а не файлы памятиCLAUDE.mdили другие артефакты рабочего каталога. Смонтируйте общий том или синхронизируйте их отдельно. - Зеркалирование, а не замена: подпроцесс сначала записывает на локальный диск, а хранилище получает копию каждого пакета. Локальные записи остаются авторитетными.
- Сообщения
mirror_error: если хранилище отклоняет или истекает время ожидания, SDK выдает сообщение{ type: "system", subtype: "mirror_error" }и продолжает запрос без повтора. Оповещайте об этих сообщениях, если долговечность хранилища имеет значение.
Наблюдаемость
Агенты Agent SDK — это долгоживущие процессы, которые порождают вызовы инструментов во многих раундах API. Без телеметрии вы не можете увидеть, какие инструменты запустились, сколько времени они заняли или где сеанс застрял. SDK наследует конфигурацию OpenTelemetry из окружения. Установите переменные окружения OTEL на уровне контейнера или оркестратора, чтобы каждый вызовquery() экспортировал spans, метрики и события журнала в ваш сборщик. Пример ниже включает экспорт OTLP для всех трех сигналов. CLAUDE_CODE_ENHANCED_TELEMETRY_BETA требуется только для трассировок; опустите его, если вы экспортируете только метрики и журналы.
".env'
Аутентификация и секреты
Три проблемы аутентификации имеют значение во время размещения:- Anthropic API: подпроцесс читает
ANTHROPIC_API_KEYиз своего окружения. Предоставьте его из вашего менеджера секретов или установитеANTHROPIC_BASE_URLдля маршрутизации вызовов модели через прокси, который внедряет ключ вне контейнера. См. Управление учетными данными для шаблона прокси и Обзор SDK для поддерживаемых методов аутентификации. - Входящие: поместите аутентификацию на шлюз перед контейнером агента. Агент должен получать предварительно аутентифицированные запросы и не должен быть компонентом, который проверяет токены пользователя.
- Исходящие инструменты: держите учетные данные инструмента вне окружения агента. Маршрутизируйте исходящие вызовы через прокси, который внедряет ключи API после того, как запрос покидает контейнер. Агент делает вызов; прокси добавляет учетные данные.
Масштабирование и параллелизм
Каждый сеанс работает в своем собственном подпроцессе, поэтому параллелизм на хосте ограничен тем, сколько подпроцессов его ОЗУ может вместить. Размер каждого хоста по этой формуле:sessionId. Закрепленный сеанс продолжает попадать на один и тот же контейнер, и, следовательно, на один и тот же работающий подпроцесс, пока он не будет вытеснен или контейнер не перезагрузится.
Большие разветвления параллельных подагентов из одного сеанса могут достичь ограничений скорости API. Разбейте работу на меньшие пакеты, а не выполняйте одну широкую отправку.
Стоимость
Стоимость токенов Anthropic обычно превосходит стоимость инфраструктуры контейнера на порядок или больше. Минимально подготовленный контейнер работает примерно $0,05 в час, в то время как один долгий сеанс агента может потратить доллары на токены. См. Отслеживание стоимости для учета токенов на сеанс.Изоляция мультитенантности
Поведение SDK по умолчанию читает параметры и файлы памятиCLAUDE.md из файловой системы. В общем контейнере, который обслуживает нескольких арендаторов, эти файлы могут утечь контекст одного арендатора в сеанс другого арендатора.
Для изоляции арендаторов внутри общего контейнера:
- Передайте
settingSources: []в TypeScript илиsetting_sources=[]в Python, чтобы не загружались параметры файловой системы. - Установите
CLAUDE_CODE_DISABLE_AUTO_MEMORY=1вenv. Автоматическая память в~/.claude/projects/<project>/memory/загружается в системную подсказку независимо отsettingSources. См. Что settingSources не контролирует для других входных данных, которые загружаются безусловно. - Укажите
CLAUDE_CONFIG_DIRна каталог для каждого арендатора, чтобы арендаторы не делили глобальный конфиг~/.claude.json. - Используйте рабочий каталог для каждого арендатора. Передайте
cwdявно при каждом вызовеquery(). - Применяйте правила исходящего трафика для каждого арендатора на вашем прокси, такие как различные исходящие IP-адреса, учетные данные или списки разрешенных доменов, чтобы скомпрометированный арендатор не мог экспортировать данные через политику исходящего трафика другого арендатора.
tenantDir и configDir так, чтобы каждый арендатор получил путь, который не может прочитать никакой другой арендатор. В TypeScript env заменяет окружение подпроцесса, поэтому распространите ...process.env, чтобы сохранить унаследованные переменные, такие как PATH и ANTHROPIC_API_KEY. В Python env объединяется с унаследованным окружением.
Известные ограничения
Учитывайте их при проектировании развертывания.| Ограничение | Что делать |
|---|---|
| Нет тайм-аута сеанса верхнего уровня | Сеанс не истекает автоматически. Установите maxTurns в Options для ограничения количества раундов использования инструментов, которые агент выполняет перед остановкой. |
| Рост памяти при длительных сеансах | Ограничьте длину сеанса или периодически перезапускайте подпроцессы. См. Масштабирование и параллелизм. |
| Большие параллельные развертывания подагентов могут достичь ограничений скорости | Разбейте работу на меньшие пакеты вместо выполнения одного широкого развертывания. |
| Нет дедлайна реального времени для каждого подагента | Ограничьте каждый подагент с помощью maxTurns в его AgentDefinition. Только для фоновых подагентов CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS устанавливает сторожевой таймер зависания, который срабатывает, когда подагент run_in_background перестает выдавать выходные данные; это не дедлайн общего времени выполнения. |
Следующие шаги
- Hosting cookbook: пошаговое руководство в виде notebook с развертываемым кодом для Docker, Modal и Kubernetes.
- Session storage: сохранение транскриптов между хостами с помощью адаптера
SessionStore. - Observability: экспорт OTEL трассировок, метрик и логов в ваш сборщик.
- Secure deployment: сетевые элементы управления, управление учетными данными и усиление изоляции.
- Cost tracking: учет токенов и затрат для каждого сеанса.