Перейти к основному содержанию
Agent SDK порождает и контролирует подпроцесс claude CLI, который владеет оболочкой, рабочей директорией и файлами сеанса на диске. Размещение его не похоже на размещение stateless API-обертки. Каждый работающий агент — это долгоживущий процесс, привязанный к локальному состоянию, что определяет, как вы распределяете ресурсы, сохраняете сеансы и масштабируете несколько арендаторов. На этой странице рассматривается самостоятельное размещение на вашей собственной инфраструктуре: поймите модель подпроцесса, выберите шаблон сеанса, подготовьте контейнер и обработайте производственные проблемы, такие как сохранение, наблюдаемость, аутентификация и изоляция нескольких арендаторов. Для развертываемых Dockerfile и манифестов Kubernetes см. руководство по размещению. Если вам не требуется контроль инфраструктуры, пользовательская изоляция или собственная плоскость данных, рассмотрите вместо этого Managed Agents: размещенный REST API, где Anthropic запускает агента и sandbox, поэтому ваше приложение отправляет события и получает результаты обратно без необходимости управления инфраструктурой размещения.
Для усиления безопасности сверх базового sandboxing, включая сетевые элементы управления, управление учетными данными и варианты изоляции, см. Безопасное развертывание.

Модель подпроцесса

Каждое решение о размещении на этой странице следует из того, как SDK запускает агента. Когда ваш код вызывает query(), SDK порождает отдельный процесс CLI claude и взаимодействует с ним через stdio. Этот подпроцесс владеет оболочкой, рабочей директорией и транскриптами сеанса JSONL на локальном диске. Поток запроса: от клиента к вашему приложению, которое порождает подпроцесс claude CLI через stdio внутри контейнера; подпроцесс записывает на локальный диск и вызывает api.anthropic.com через HTTPS Один сеанс агента соответствует одному подпроцессу. Запуск N одновременных сеансов означает N подпроцессов, каждый со своим деревом процессов и файлом транскрипта. По умолчанию они все наследуют рабочую директорию вашего приложения, поэтому передавайте cwd при каждом вызове query(), когда сеансам нужны отдельные файловые системы:
query({ prompt, options: { cwd: "/work/session-a" } })

Состояние, которое находится на локальном диске

Три вида состояния агента по умолчанию находятся на файловой системе контейнера. Ни одно из них не сохраняется при перезагрузке контейнера, масштабировании вниз или перемещении на другой узел.
СостояниеРасположение по умолчанию
Транскрипты сеанса~/.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.
import { query } from "@anthropic-ai/claude-agent-sdk";

const prompt = process.env.TASK_PROMPT!;
for await (const message of query({ prompt, options: { maxTurns: 20 } })) {
  console.log(message);
}

Long-running sessions

Запускайте постоянные экземпляры контейнеров, часто размещая несколько процессов SDK на контейнер, для обслуживания текущей работы. Лучше всего подходит для агентов, которые выполняют автономные действия, предоставляют контент или обрабатывают высокообъемные потоки сообщений. Примеры рабочих нагрузок включают агента электронной почты, который сортирует и отвечает на входящую почту, конструктор сайтов, который размещает редактируемый для каждого пользователя сайт через порты контейнера, и чат-бота, который обрабатывает непрерывный трафик с платформы, такой как Slack. Контейнер предоставляет HTTP или WebSocket endpoint и сопоставляет каждую активную сессию с долгоживущим запросом и подпроцессом позади него. В TypeScript используйте streamInput() для добавления ходов в активную сессию и startup() для предварительного прогрева подпроцессов перед входящим трафиком. В Python используйте ClaudeSDKClient для сохранения сессии открытой между ходами. Размер контейнера должен быть таким, чтобы он мог вмещать максимальное количество одновременных сессий в памяти.

Hybrid sessions

Ephemeral контейнеры, которые гидрируют из SessionStore при запуске и сохраняют обновления обратно. Лучше всего подходит для сессий, которые охватывают много взаимодействий, но остаются неактивными между ними. Контейнер выключается в периоды простоя и снова включается, когда пользователь возвращается. Примеры рабочих нагрузок включают личного менеджера проектов с периодическими проверками, глубокое исследование, которое приостанавливается и возобновляется в течение часов, и агента поддержки клиентов, который загружает историю билетов между взаимодействиями. Настройте timeout простоя вашего провайдера в соответствии с тем, как часто вы ожидаете возвращения пользователей. Выключение контейнера без настроенного SessionStore приводит к потере транскрипта вместе с ним, поэтому хранилище требуется для этого паттерна, а не опционально. Паттерн основан на возобновлении сессии по ID с подключенным общим хранилищем:
import { query, type SessionStore } from "@anthropic-ai/claude-agent-sdk";

declare const userInput: string;
declare const sessionId: string;          // looked up from your database by user
declare const sessionStore: SessionStore; // S3, Redis, Postgres, or your own adapter

for await (const message of query({
  prompt: userInput,
  options: { resume: sessionId, sessionStore },
})) {
  // ...
}
Смотрите Session storage для полного интерфейса SessionStore и справочных адаптеров.

Multi-agent container

Запускайте несколько подпроцессов SDK внутри одного контейнера. Лучше всего подходит для агентов, которые должны тесно сотрудничать, например для многоагентных симуляций, где агенты взаимодействуют друг с другом в общей среде. Дайте каждому агенту свой рабочий каталог, чтобы они не перезаписывали файлы друг друга, и изолируйте загрузку параметров, чтобы файлы CLAUDE.md для каждого агента не утекали между агентами. Смотрите Multi-tenant isolation для конкретных опций.

Подготовка контейнера

Изоляция на основе контейнера

Запустите SDK внутри изолированного контейнера для изоляции процессов, ограничения ресурсов, управления сетью и эфемерной файловой системы. Несколько поставщиков специализируются на изолированных контейнерных средах, которые соответствуют модели Agent SDK. Вопросы, на которые следует ответить при выборе поставщика:
  • Кто управляет sandbox: поставщик sandbox-as-a-service управляет инфраструктурой для вас, в то время как самостоятельно размещаемые варианты предоставляют вам программное обеспечение для запуска на собственной инфраструктуре.
  • Задержка холодного старта: время от “создания sandbox” до “готовности принять первый запрос”. Эфемерные паттерны требуют запусков менее чем за секунду. Долгоживущие паттерны допускают большую задержку.
  • Постоянное хранилище: предоставляет ли поставщик долговечные тома или только эфемерный диск. Гибридный паттерн требует долговечного хранилища где-то, будь то в sandbox или рядом с ним.
  • Модель ценообразования: оплата за секунду, за запрос или фиксированная почасовая оплата. Ценообразование за секунду подходит для нестабильных эфемерных рабочих нагрузок. Почасовая оплата подходит для долгоживущих сеансов.
  • Сетевые возможности: поддержка пользовательских правил исходящего трафика, исходящих прокси и приватного VPC peering для регулируемых сред.
Поставщики для оценки: Для самостоятельно размещаемых вариантов, таких как Docker, gVisor и Firecracker, а также подробной конфигурации изоляции см. Технологии изоляции.

Зависимости среды выполнения

Контейнер требует только среду выполнения вашего SDK:
  • Python 3.10+ для Python SDK или Node.js 18+ для TypeScript SDK
  • Оба пакета SDK включают встроенный бинарный файл Claude Code для платформы хоста, поэтому отдельная установка Claude Code или Node.js не требуется для порожденного CLI
Встроенный бинарный файл привязан к версии пакета SDK, поэтому обновление SDK — это способ обновления CLI. SDK следует semver: берите патч-релизы непрерывно и просмотрите TypeScript или Python changelog перед принятием минорного релиза.

Ресурсы

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'
CLAUDE_CODE_ENABLE_TELEMETRY=1
CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1
OTEL_TRACES_EXPORTER=otlp
OTEL_METRICS_EXPORTER=otlp
OTEL_LOGS_EXPORTER=otlp
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318
Текст подсказки и входные данные инструмента по умолчанию не включаются в экспорты. См. Контроль конфиденциальных данных в экспортах для флагов согласия и Наблюдаемость для полного каталога сигналов.

Аутентификация и секреты

Три проблемы аутентификации имеют значение во время размещения:
  • Anthropic API: подпроцесс читает ANTHROPIC_API_KEY из своего окружения. Предоставьте его из вашего менеджера секретов или установите ANTHROPIC_BASE_URL для маршрутизации вызовов модели через прокси, который внедряет ключ вне контейнера. См. Управление учетными данными для шаблона прокси и Обзор SDK для поддерживаемых методов аутентификации.
  • Входящие: поместите аутентификацию на шлюз перед контейнером агента. Агент должен получать предварительно аутентифицированные запросы и не должен быть компонентом, который проверяет токены пользователя.
  • Исходящие инструменты: держите учетные данные инструмента вне окружения агента. Маршрутизируйте исходящие вызовы через прокси, который внедряет ключи API после того, как запрос покидает контейнер. Агент делает вызов; прокси добавляет учетные данные.

Масштабирование и параллелизм

Каждый сеанс работает в своем собственном подпроцессе, поэтому параллелизм на хосте ограничен тем, сколько подпроцессов его ОЗУ может вместить. Размер каждого хоста по этой формуле:
agents per host = (host RAM - overhead) / (per-session RAM ceiling)
Измерьте потолок оперативной памяти на сеанс, запустив репрезентативный сеанс до целевой длины при ожидаемой нагрузке инструмента и записав пиковое RSS. Начальная точка 1 ГиБ в Ресурсы — это минимум, а не потолок. Горизонтальное масштабирование маршрутизации зависит от вашего шаблона. Для долгоживущих сеансов, где контейнеры содержат много сеансов, запустите пул контейнеров за балансировщиком нагрузки и закрепите каждый сеанс на одном контейнере, используя последовательное хеширование на 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-адреса, учетные данные или списки разрешенных доменов, чтобы скомпрометированный арендатор не мог экспортировать данные через политику исходящего трафика другого арендатора.
Пример ниже применяет четыре опции уровня SDK вместе. Создайте tenantDir и configDir так, чтобы каждый арендатор получил путь, который не может прочитать никакой другой арендатор. В TypeScript env заменяет окружение подпроцесса, поэтому распространите ...process.env, чтобы сохранить унаследованные переменные, такие как PATH и ANTHROPIC_API_KEY. В Python env объединяется с унаследованным окружением.
import { query } from "@anthropic-ai/claude-agent-sdk";

declare const prompt: string;
declare const tenantDir: string;
declare const configDir: string;

for await (const message of query({
  prompt,
  options: {
    cwd: tenantDir,
    settingSources: [],
    env: {
      ...process.env,
      CLAUDE_CONFIG_DIR: configDir,
      CLAUDE_CODE_DISABLE_AUTO_MEMORY: "1",
    },
  },
})) {
  // ...
}
Для сетевых элементов управления для каждого арендатора см. Безопасное развертывание.

Известные ограничения

Учитывайте их при проектировании развертывания.
ОграничениеЧто делать
Нет тайм-аута сеанса верхнего уровняСеанс не истекает автоматически. Установите 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: учет токенов и затрат для каждого сеанса.