- Дата публикации
Spring AI AgentCore SDK для Amazon Bedrock стал общедоступным: как Java‑разработчикам быстро собрать продакшн-агента
Что нового
AWS выпустила Spring AI AgentCore SDK в статусе General Availability. Это открытая Java‑библиотека, которая связывает Spring AI и Amazon Bedrock AgentCore и позволяет собирать продакшн‑агентов без недельной возни с инфраструктурой.
Ключевые новшества:
-
Готовый контракт с AgentCore Runtime из одной аннотации
- Аннотация
@AgentCoreInvocationпревращает любой метод Spring‑бина в совместимый с AgentCore endpoint. - SDK автоматически поднимает два обязательных маршрута:
POST /invocations— приём запросов и ответы в JSON или через SSE‑стриминг.GET /ping— health‑проверка с состояниямиHealthyиHealthyBusy.
- Автоматическая сериализация, определение стриминга, форматирование ответа.
- Аннотация
-
Готовый управляемый рантайм‑контракт
- AgentCore Runtime сам масштабирует агентов и берёт оплату по модели pay‑per‑use — нет платы за простаивающие инстансы.
- SDK сам отслеживает асинхронные/долгие задачи и сообщает рантайму статус
busy, чтобы тот не «схлопнул» инстанс посреди работы.
-
SSE‑стриминг «из коробки»
- Достаточно сменить тип возвращаемого значения на
Flux<String>, и SDK сам переключается на Server‑Sent Events. - Вшита обработка фрейминга, заголовков
Content-Type, backpressure и управления жизненным циклом соединения.
- Достаточно сменить тип возвращаемого значения на
-
Память агента (STM + LTM) через Spring‑советники
- Краткосрочная память (short‑term memory) — скользящее окно последних сообщений.
- Долгосрочная память (long‑term memory) с четырьмя стратегиями:
- Semantic — факты о пользователе (например, «пользователь работает в финансах»).
- User preference — явные настройки («предпочитает метрические единицы»).
- Summary — сжатые итоги сессий для контекста.
- Episodic — прошлые взаимодействия и «уроки» (например, «пользователь недавно разбирался с X»).
- Авто‑дискавери LTM‑стратегий и пространств имён без ручной конфигурации.
-
Инструменты как сервисы: браузер и кодовый интерпретатор
- Модуль Browser для автоматизации браузера: переход по ссылкам, парсинг контента, скриншоты, взаимодействие с элементами страницы.
- Модуль Code Interpreter для безопасного исполнения Python, JavaScript и TypeScript в песочнице. Внутри доступны
numpy,pandas,matplotlib, а файлы и артефакты сохраняются в хранилище артефактов. - Оба инструмента экспортируются как
ToolCallbackProviderи подключаются вChatClient.
-
Готовые механизмы для продакшна
- Ограничение частоты запросов (rate limiting) и защита от всплесков трафика.
- Управление SSE‑соединениями для больших ответов.
- Встраивание в Spring Security‑подходы для авторизации по идентичности из
AgentCoreContext.
-
Гибкая схема деплоя
- Полностью управляемый AgentCore Runtime (ARM64‑контейнеры в Amazon ECR, автоскейлинг, мониторинг).
- Standalone‑режим — можно использовать отдельные модули (Memory, Browser, Code Interpreter) в приложениях на Amazon EKS, ECS, EC2 или on‑prem.
-
Технологический стек и требования
- 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 управляет жизненным циклом агента и масштабированием. Чтобы он корректно маршрутизировал запросы, сервис должен соблюдать простой контракт:
-
Endpoint
/invocations- Метод
POST. - Принимает запросы агента и возвращает:
- либо обычный JSON‑ответ,
- либо SSE‑стрим, если метод Spring возвращает реактивный тип (
Flux<String>и т.п.).
- Метод
-
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
-
Вы Java/Spring‑команда и хотите продакшн‑агента, а не демо.
SDK снимает рутину: health‑чеки, SSE, rate limiting, контракт с рантаймом. Можно сосредоточиться на бизнес‑логике и промптах. -
Нужно масштабирование без ручного DevOps.
AgentCore Runtime сам масштабирует контейнеры по нагрузке и берёт оплату только за реальное использование. Это удобно, если трафик неравномерный. -
Важна память и контекст на уровне пользователя.
STM + LTM позволяют строить агентов, которые помнят пользователя, его предпочтения и прошлые сессии. Это полезно для:- ассистентов поддержки;
- персонализированных обучающих систем;
- внутренних помощников по корпоративным данным.
-
Нужна автоматизация с браузером и кодом.
Примеры сценариев:- travel‑ и expense‑агент, который ищет билеты в браузере и анализирует расходы в Code Interpreter;
- аналитический ассистент, который тянет данные с веб‑страниц и строит графики в Python;
- внутренний AI‑оператор, который может проверить сайт, снять скриншоты и подготовить отчёт.
-
Вы уже на AWS и используете Amazon Bedrock.
Интеграция с Bedrock родная. В примерах используется Claude Sonnet 4.5global.anthropic.claude-sonnet-4-5-20250929-v1:0, но Spring AI позволяет подключить и другие LLM‑провайдеры, если вам нужно комбинировать модели.
Когда это может не подойти
-
Нет доступа к AWS или Bedrock.
Для работы AgentCore Runtime и памяти нужен AWS‑аккаунт. В России доступ к AWS часто требует VPN и юридически аккуратной настройки. Если вы не можете использовать AWS, часть возможностей SDK (Memory, Browser, Code Interpreter как сервисы AgentCore) будет недоступна. -
Нужен максимально простой локальный бот без облака.
Если вы хотите просто поднять локальный чат с LLM без масштабирования и сложных инструментов, Spring AI без AgentCore может быть проще. -
У вас уже есть другой оркестратор агентов.
Если инфраструктура построена вокруг другого решения (например, собственного оркестратора, Kubernetes‑оператора или стороннего SaaS), миграция на AgentCore Runtime потребует переезда контейнеров и политик безопасности. -
Нет экспертизы в Java/Spring.
SDK заточен под Spring Boot и Spring AI. Если команда живёт в Python, возможно, проще использовать фреймворки из Python‑экосистемы и вызывать Bedrock напрямую.
Практический совет
Если вы — Java‑команда, которая уже использует Spring Boot и AWS, можно начать с малого:
- Подключить Spring AI AgentCore SDK к существующему сервису.
- Добавить один метод с
@AgentCoreInvocationи простым чатом. - Затем включить STM/LTM‑память и по шагам подключить Browser и Code Interpreter.
- На последнем шаге перенести контейнер в 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 (управляемый)
- Соберите Spring Boot‑приложение в ARM64‑контейнер.
- Запушьте образ в Amazon Elastic Container Registry (ECR).
- Создайте AgentCore Runtime и укажите образ.
- Рантайм возьмёт на себя масштабирование, 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, так что вы можете свободно изучать код, форкать и вносить правки под свои задачи.