Дата публикации
ai_products

Spring AI AgentCore SDK для Amazon Bedrock стал общедоступным: как Java‑разработчикам быстро собрать продакшн-агента

Что нового

AWS выпустила Spring AI AgentCore SDK в статусе General Availability. Это открытая Java‑библиотека, которая связывает Spring AI и Amazon Bedrock AgentCore и позволяет собирать продакшн‑агентов без недельной возни с инфраструктурой.

Ключевые новшества:

  1. Готовый контракт с AgentCore Runtime из одной аннотации

    • Аннотация @AgentCoreInvocation превращает любой метод Spring‑бина в совместимый с AgentCore endpoint.
    • SDK автоматически поднимает два обязательных маршрута:
      • POST /invocations — приём запросов и ответы в JSON или через SSE‑стриминг.
      • GET /ping — health‑проверка с состояниями Healthy и HealthyBusy.
    • Автоматическая сериализация, определение стриминга, форматирование ответа.
  2. Готовый управляемый рантайм‑контракт

    • AgentCore Runtime сам масштабирует агентов и берёт оплату по модели pay‑per‑use — нет платы за простаивающие инстансы.
    • SDK сам отслеживает асинхронные/долгие задачи и сообщает рантайму статус busy, чтобы тот не «схлопнул» инстанс посреди работы.
  3. SSE‑стриминг «из коробки»

    • Достаточно сменить тип возвращаемого значения на Flux<String>, и SDK сам переключается на Server‑Sent Events.
    • Вшита обработка фрейминга, заголовков Content-Type, backpressure и управления жизненным циклом соединения.
  4. Память агента (STM + LTM) через Spring‑советники

    • Краткосрочная память (short‑term memory) — скользящее окно последних сообщений.
    • Долгосрочная память (long‑term memory) с четырьмя стратегиями:
      • Semantic — факты о пользователе (например, «пользователь работает в финансах»).
      • User preference — явные настройки («предпочитает метрические единицы»).
      • Summary — сжатые итоги сессий для контекста.
      • Episodic — прошлые взаимодействия и «уроки» (например, «пользователь недавно разбирался с X»).
    • Авто‑дискавери LTM‑стратегий и пространств имён без ручной конфигурации.
  5. Инструменты как сервисы: браузер и кодовый интерпретатор

    • Модуль Browser для автоматизации браузера: переход по ссылкам, парсинг контента, скриншоты, взаимодействие с элементами страницы.
    • Модуль Code Interpreter для безопасного исполнения Python, JavaScript и TypeScript в песочнице. Внутри доступны numpy, pandas, matplotlib, а файлы и артефакты сохраняются в хранилище артефактов.
    • Оба инструмента экспортируются как ToolCallbackProvider и подключаются в ChatClient.
  6. Готовые механизмы для продакшна

    • Ограничение частоты запросов (rate limiting) и защита от всплесков трафика.
    • Управление SSE‑соединениями для больших ответов.
    • Встраивание в Spring Security‑подходы для авторизации по идентичности из AgentCoreContext.
  7. Гибкая схема деплоя

    • Полностью управляемый AgentCore Runtime (ARM64‑контейнеры в Amazon ECR, автоскейлинг, мониторинг).
    • Standalone‑режим — можно использовать отдельные модули (Memory, Browser, Code Interpreter) в приложениях на Amazon EKS, ECS, EC2 или on‑prem.
  8. Технологический стек и требования

    • Java 17+ (рекомендуют Java 25).
    • Spring Boot 3.5+.
    • AWS‑аккаунт.
    • Maven или Gradle.
    • Для моделей — Amazon Bedrock (в примерах используется global.anthropic.claude-sonnet-4-5-20250929-v1:0).

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

Рантайм‑контракт AgentCore

AgentCore Runtime управляет жизненным циклом агента и масштабированием. Чтобы он корректно маршрутизировал запросы, сервис должен соблюдать простой контракт:

  1. Endpoint /invocations

    • Метод POST.
    • Принимает запросы агента и возвращает:
      • либо обычный JSON‑ответ,
      • либо SSE‑стрим, если метод Spring возвращает реактивный тип (Flux<String> и т.п.).
  2. Endpoint /ping

    • Метод GET.
    • Возвращает статус здоровья: Healthy или HealthyBusy.
    • Для долгих задач агент обязан сообщать, что он занят, иначе рантайм может решить, что инстанс простаивает, и уменьшить масштаб.

Spring AI AgentCore SDK реализует этот контракт автоматически: поднимает оба endpoint, обрабатывает JSON и SSE, следит за асинхронными задачами и статусов busy.

Аннотация @AgentCoreInvocation

Аннотация — основной вход в SDK. Когда вы помечаете ею метод Spring‑сервиса, происходит следующее:

  • SDK регистрирует метод как обработчик POST /invocations.
  • Параметры метода автоматически мапятся на тело запроса и контекст (AgentCoreContext).
  • Возвращаемое значение сериализуется в JSON или разворачивается в SSE‑стрим, если это Flux.
  • Для стриминга SDK сам ставит правильные заголовки, разбивает поток на SSE‑события и поддерживает соединение.

Память агента через Spring‑advisors

Память интегрирована через стандартный для Spring AI паттерн advisor‑ов:

  • AgentCoreMemory предоставляет набор advisor‑ов для краткосрочной и долгосрочной памяти.
  • При вызове chatClient.prompt().advisors(...) SDK добавляет к запросу к модели контекст из STM и LTM.
  • LTM‑стратегии работают асинхронно: AgentCore сам извлекает и консолидирует факты, предпочтения, эпизоды и сводки без явных вызовов со стороны разработчика.

Краткосрочная память реализована как скользящее окно последних сообщений, долгосрочная — как отдельные хранилища по стратегиям. Идентификатор разговора (ChatMemory.CONVERSATION_ID) вы задаёте сами, например "user:" + sessionId.

Инструменты: браузер и кодовый интерпретатор

Модули Browser и Code Interpreter подключаются как ToolCallbackProvider и регистрируются в ChatClient:

this.chatClient = builder
    .defaultToolCallbacks(browserTools, codeInterpreterTools)
    .build();
``

Дальше всё делает модель в Amazon Bedrock: она видит доступные инструменты и сама решает, когда вызывать браузер (например, для поиска билетов) или интерпретатор кода (для анализа CSV и построения графиков). SDK только проводит вызовы и обеспечивает песочницу для исполнения кода.

### Авторизация и идентичность

AgentCore Runtime умеет аутентифицировать запросы двумя способами:

* **IAM SigV4** — для сервис‑к‑сервису внутри AWS.  
* **OAuth2** — для пользовательских приложений.

Spring‑приложение получает уже аутентифицированную личность в `AgentCoreContext` и может использовать её в Spring Security для тонкой авторизации. При standalone‑развёртывании аутентификацию и авторизацию полностью берёт на себя ваше приложение, а вызовы к сервисам AgentCore (Memory, Browser, Code Interpreter) подписываются стандартными AWS‑креденшелами.

### Подключение MCP‑инструментов через AgentCore Gateway

Для доступа к корпоративным инструментам по Model Context Protocol (MCP) AgentCore предлагает Gateway. Он берёт на себя:

* outbound‑аутентификацию к downstream‑сервисам;  
* реестр инструментов на семантическом уровне.

Spring AI настраивается на Gateway так:

```properties
spring.ai.mcp.client.toolcallback.enabled=true
spring.ai.mcp.client.initialized=false
spring.ai.mcp.client.streamable-http.connections.gateway.url=${GATEWAY_URL}

После этого агент может «открывать» и вызывать MCP‑инструменты, не управляя их креденшелами напрямую.

Что это значит для вас

Когда стоит использовать Spring AI AgentCore SDK

  1. Вы Java/Spring‑команда и хотите продакшн‑агента, а не демо.
    SDK снимает рутину: health‑чеки, SSE, rate limiting, контракт с рантаймом. Можно сосредоточиться на бизнес‑логике и промптах.

  2. Нужно масштабирование без ручного DevOps.
    AgentCore Runtime сам масштабирует контейнеры по нагрузке и берёт оплату только за реальное использование. Это удобно, если трафик неравномерный.

  3. Важна память и контекст на уровне пользователя.
    STM + LTM позволяют строить агентов, которые помнят пользователя, его предпочтения и прошлые сессии. Это полезно для:

    • ассистентов поддержки;
    • персонализированных обучающих систем;
    • внутренних помощников по корпоративным данным.
  4. Нужна автоматизация с браузером и кодом.
    Примеры сценариев:

    • travel‑ и expense‑агент, который ищет билеты в браузере и анализирует расходы в Code Interpreter;
    • аналитический ассистент, который тянет данные с веб‑страниц и строит графики в Python;
    • внутренний AI‑оператор, который может проверить сайт, снять скриншоты и подготовить отчёт.
  5. Вы уже на AWS и используете Amazon Bedrock.
    Интеграция с Bedrock родная. В примерах используется Claude Sonnet 4.5 global.anthropic.claude-sonnet-4-5-20250929-v1:0, но Spring AI позволяет подключить и другие LLM‑провайдеры, если вам нужно комбинировать модели.

Когда это может не подойти

  1. Нет доступа к AWS или Bedrock.
    Для работы AgentCore Runtime и памяти нужен AWS‑аккаунт. В России доступ к AWS часто требует VPN и юридически аккуратной настройки. Если вы не можете использовать AWS, часть возможностей SDK (Memory, Browser, Code Interpreter как сервисы AgentCore) будет недоступна.

  2. Нужен максимально простой локальный бот без облака.
    Если вы хотите просто поднять локальный чат с LLM без масштабирования и сложных инструментов, Spring AI без AgentCore может быть проще.

  3. У вас уже есть другой оркестратор агентов.
    Если инфраструктура построена вокруг другого решения (например, собственного оркестратора, Kubernetes‑оператора или стороннего SaaS), миграция на AgentCore Runtime потребует переезда контейнеров и политик безопасности.

  4. Нет экспертизы в Java/Spring.
    SDK заточен под Spring Boot и Spring AI. Если команда живёт в Python, возможно, проще использовать фреймворки из Python‑экосистемы и вызывать Bedrock напрямую.

Практический совет

Если вы — Java‑команда, которая уже использует Spring Boot и AWS, можно начать с малого:

  1. Подключить Spring AI AgentCore SDK к существующему сервису.
  2. Добавить один метод с @AgentCoreInvocation и простым чатом.
  3. Затем включить STM/LTM‑память и по шагам подключить Browser и Code Interpreter.
  4. На последнем шаге перенести контейнер в AgentCore Runtime для автоскейлинга.

Так вы избежите большого «большого взрыва» и сможете поэтапно наращивать функциональность.

Место на рынке

Spring AI AgentCore SDK занимает нишу Java/Spring‑инструмента для агентных систем поверх Amazon Bedrock AgentCore.

По ключевым параметрам:

  • Язык и фреймворк — это решение для Java 17+ и Spring Boot 3.5+. Для команд, уже живущих в Spring, порог входа ниже, чем при переходе на Python‑фреймворки.
  • Инфраструктура — тесная связка с AWS: AgentCore Runtime, Amazon Bedrock, Amazon ECR, EKS/ECS/EC2. Если инфраструктура уже на AWS, дополнительного облака не нужно.
  • Модели — в примерах используется Claude Sonnet 4.5 в Bedrock (global.anthropic.claude-sonnet-4-5-20250929-v1:0). Spring AI поддерживает и других LLM‑провайдеров, но конкретных сравнений по скорости или цене с GPT‑4o, Claude 3.5 и другими в исходных данных нет.
  • Функциональность — за счёт AgentCore сервисов (Memory, Browser, Code Interpreter, Gateway для MCP) SDK даёт сразу несколько кирпичиков для полноценного агента. Это снижает объём собственной инфраструктуры.

Если у вас уже есть агентные решения на других платформах, выбор будет зависеть от трёх факторов: Java vs Python, привязка к AWS и потребность в управляемом рантайме с pay‑per‑use.

Установка

Требования

  • Java 17 или выше (рекомендуют Java 25).
  • Spring Boot 3.5 или выше.
  • Аккаунт AWS с доступом к Amazon Bedrock и AgentCore.
  • Maven или Gradle.

Добавление зависимостей (Maven)

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springaicommunity</groupId>
      <artifactId>spring-ai-agentcore-bom</artifactId>
      <version>1.0.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>org.springaicommunity</groupId>
    <artifactId>spring-ai-agentcore-runtime-starter</artifactId>
  </dependency>
</dependencies>

Для браузера и интерпретатора кода:

<dependency>
  <groupId>org.springaicommunity</groupId>
  <artifactId>spring-ai-agentcore-browser</artifactId>
</dependency>

<dependency>
  <groupId>org.springaicommunity</groupId>
  <artifactId>spring-ai-agentcore-code-interpreter</artifactId>
</dependency>

Как запустить: базовый агент

Шаг 1. Настройка Amazon Bedrock

В application.properties укажите регион и модель Bedrock:

spring.ai.bedrock.aws.region=us-east-1
spring.ai.bedrock.converse.chat.options.model=global.anthropic.claude-sonnet-4-5-20250929-v1:0

Шаг 2. Создание простого агента

@Service
public class MyAgent {

    private final ChatClient chatClient;

    public MyAgent(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    @AgentCoreInvocation
    public String chat(PromptRequest request) {
        return chatClient.prompt()
                .user(request.prompt())
                .call()
                .content();
    }
}

record PromptRequest(String prompt) {}

SDK автоматически:

  • поднимет POST /invocations и GET /ping;
  • займётся JSON‑сериализацией;
  • будет сообщать статусы здоровья в AgentCore Runtime.

Шаг 3. Локальный запуск и проверка

mvn spring-boot:run

curl -X POST http://localhost:8080/invocations \
  -H "Content-Type: application/json" \
  -d '{"prompt": "What is Spring AI?"}'

На этом этапе у вас уже есть агент, совместимый с AgentCore Runtime, без единого кастомного контроллера.

Стриминг ответов через SSE

Чтобы агент начал стримить ответы по мере генерации, достаточно поменять возвращаемый тип:

@AgentCoreInvocation
public Flux<String> streamingChat(PromptRequest request) {
    return chatClient.prompt()
            .user(request.prompt())
            .stream()
            .content();
}

SDK сам переключится на SSE‑вывод и обработает:

  • фрейминг событий;
  • заголовки Content-Type;
  • переносы строк;
  • lifecycle подключения.

Память: краткосрочная и долгосрочная

Конфигурация памяти

Включите auto‑discovery для долгосрочной памяти:

agentcore.memory.memory-id=${AGENTCORE_MEMORY_ID}
agentcore.memory.long-term.auto-discovery=true

Подключение памяти в агент

// Добавляем поле в MyAgent
private final AgentCoreMemory agentCoreMemory;

public MyAgent(ChatClient.Builder builder, AgentCoreMemory agentCoreMemory) {
    this.agentCoreMemory = agentCoreMemory;
    this.chatClient = builder.build();
}

// Обновляем метод чата
@AgentCoreInvocation
public String chat(PromptRequest request, AgentCoreContext context) {
    String sessionId = context.getHeader(AgentCoreHeaders.SESSION_ID);

    return chatClient.prompt()
            .user(request.prompt())
            .advisors(agentCoreMemory.advisors)
            .advisors(a -> a.param(ChatMemory.CONVERSATION_ID, "user:" + sessionId))
            .call()
            .content();
}

agentCoreMemory.advisors уже содержит STM и все настроенные стратегии LTM. Вам остаётся только задать идентификатор сессии.

Инструменты: браузер и интерпретатор кода

Подключение зависимостей (напоминание)

<dependency>
  <groupId>org.springaicommunity</groupId>
  <artifactId>spring-ai-agentcore-browser</artifactId>
</dependency>

<dependency>
  <groupId>org.springaicommunity</groupId>
  <artifactId>spring-ai-agentcore-code-interpreter</artifactId>
</dependency>

Финальная версия агента с памятью и инструментами

@Service
public class MyAgent {

    private final ChatClient chatClient;
    private final AgentCoreMemory agentCoreMemory;

    public MyAgent(
            ChatClient.Builder builder,
            AgentCoreMemory agentCoreMemory,
            @Qualifier("browserToolCallbackProvider") ToolCallbackProvider browserTools,
            @Qualifier("codeInterpreterToolCallbackProvider") ToolCallbackProvider codeInterpreterTools) {

        this.agentCoreMemory = agentCoreMemory;
        this.chatClient = builder
                .defaultToolCallbacks(browserTools, codeInterpreterTools)
                .build();
    }

    @AgentCoreInvocation
    public Flux<String> chat(PromptRequest request, AgentCoreContext context) {
        String sessionId = context.getHeader(AgentCoreHeaders.SESSION_ID);

        return chatClient.prompt()
                .user(request.prompt())
                .advisors(agentCoreMemory.advisors)
                .advisors(a -> a.param(ChatMemory.CONVERSATION_ID, "user:" + sessionId))
                .stream()
                .content();
    }
}

Модель в Bedrock видит инструменты браузера и интерпретатора кода как обычные tools и сама решает, когда их вызывать. Например, travel‑агент может в одном диалоге:

  • открыть сайт авиакомпании через Browser;
  • собрать цены и расписание;
  • передать данные в Code Interpreter для анализа расходов и генерации графиков.

Деплой

Вариант 1. AgentCore Runtime (управляемый)

  1. Соберите Spring Boot‑приложение в ARM64‑контейнер.
  2. Запушьте образ в Amazon Elastic Container Registry (ECR).
  3. Создайте AgentCore Runtime и укажите образ.
  4. Рантайм возьмёт на себя масштабирование, health‑чеки и аутентификацию (IAM SigV4 или OAuth2).

В репозитории SDK есть примеры Terraform (examples/terraform) с готовыми IAM‑ролями и вариантами аутентификации.

Вариант 2. Standalone

Вы можете использовать отдельные сервисы AgentCore (Memory, Browser, Code Interpreter) в уже существующей инфраструктуре:

  • Amazon EKS;
  • Amazon ECS;
  • Amazon EC2;
  • on‑prem Kubernetes или bare metal.

Такой подход подходит, если вы хотите сначала добавить память к существующему Spring‑сервису, а к AgentCore Runtime перейти позже.

Наблюдаемость и тестирование

SDK уже сейчас даёт базовую наблюдаемость AgentCore. В планах:

  • интеграция трейсов, метрик и логов Spring AI с Amazon CloudWatch;
  • поддержка внешних систем (LangFuse, Datadog, Dynatrace) через OpenTelemetry;
  • фреймворки для оценок качества ответов агентов;
  • улучшенное управление identity для Spring AI‑агентов.

Если вы строите продакшн‑агента, стоит сразу закладываться на интеграцию с системой наблюдаемости — это поможет отлавливать промахи LLM и проблемы с инструментами.

Очистка ресурсов

Если вы поднимали инфраструктуру по примеру из блога, не забудьте убрать ресурсы, чтобы не платить за них:

  • удалите агентов в AgentCore Runtime;
  • удалите образы из Amazon ECR;
  • удалите IAM‑роли и политики, созданные для деплоя;
  • если использовали Terraform‑примеры — выполните terraform destroy.

Где почитать и как попробовать

  • Репозиторий Spring AI AgentCore SDK на GitHub — с примерами приложений:
    • simple-spring-boot-app — минимальный агент с базовой обработкой запросов;
    • spring-ai-sse-chat-client — стриминг ответов через SSE;
    • spring-ai-memory-integration — примеры STM и LTM;
    • spring-ai-extended-chat-client — OAuth‑аутентификация и изоляция памяти по пользователям;
    • spring-ai-browser — возможности веб‑просмотра и скриншотов.
  • Документация Amazon AgentCore — детали по Runtime, Memory, Browser и Code Interpreter.
  • Консоль Amazon Bedrock — включение доступа к моделям и обзор доступных foundation models.
  • Workshop Building Java AI agents with Spring AI and Amazon AgentCore — за ~4 часа вы собираете ассистента для travel & expense, по шагам добавляя:
    • персону;
    • память;
    • поиск знаний;
    • веб‑просмотр;
    • исполнение кода;
    • MCP‑инструменты;
    • деплой в AgentCore Runtime с аутентификацией и наблюдаемостью.

SDK распространяется под лицензией Apache 2.0, так что вы можете свободно изучать код, форкать и вносить правки под свои задачи.


Читайте также

Spring AI AgentCore SDK для Amazon Bedrock стал общедоступным: как Java‑разработчикам быстро собрать продакшн-агента — VogueTech | VogueTech