Гайд по AI-агенту Strands + Amazon Bedrock: развертывание в облаке | AiManual
AiManual Logo Ai / Manual.
01 Июл 2026 Инструмент

Собираем AI-агента с Strands и Amazon Bedrock: полный гайд по развертыванию в облаке

Как собрать AI-агента на открытом фреймворке Strands и запустить в облаке через Amazon Bedrock. Примеры кода, сравнение с альтернативами, советы по настройке.

Реклама
cliv1

Умные агенты перестали быть игрушкой. За последние полгода я перепробовал штук десять фреймворков — от тяжеловесного LangGraph до переоцененного AutoGPT. Почти везде одно и то же: либо ты утопаешь в бойлерплейте, либо агент тупит на первом же сложном запросе. Strands от AWS в этом плане — глоток воздуха. Открытый исходник, легковесный SDK, и главное — родная интеграция с Amazon Bedrock AgentCore. Сегодня разберемся, как собрать рабочего AI-агента на этих двух китах и задеплоить его в облаке так, чтобы он не развалился под нагрузкой.

Что такое Strands и почему это не очередной велосипед

Strands — это open-source SDK для построения агентных систем, который AWS выкатила в конце 2025 года. К середине 2026 вышла версия 0.9, и она уже стабильна. Суть простая: ты описываешь агента как набор инструментов (tools), системный промпт и правила цикла принятия решений. SDK сам разруливает вызов LLM, парсинг ответов, исполнение действий и передачу контекста между шагами.

Главная фишка — Strands не заставляет тебя тянуть монолитный фреймворк. Это библиотека, а не платформа. Можно встроить в FastAPI, Lambda, ECS — куда угодно. И она сразу умеет работать с Bedrock AgentCore, который даёт доступ к моделям вроде Claude 4 Sonnet или Llama 4 405B без возни с API ключами.

Важный момент: Strands не заменяет Bedrock AgentCore — он надстройка. AgentCore отвечает за исполнение агента в безопасном окружении (IAM, шифрование, мониторинг), а Strands — за логику самого агента (выбор действий, обработку ошибок). Вместе они работают как единый механизм.

Сравнение с альтернативами: честно без прикрас

Фреймворк Облачная привязка Сложность старта Гибкость Производственная готовность
Strands SDK Bedrock (нативно) Низкая (10 строк кода) Высокая Да (версия 0.9)
LangGraph Любая (через провайдера) Средняя Очень высокая Да
CrewAI Любая (через провайдера) Низкая Средняя Ограниченно
AutoGPT (классический) Локально / OpenAI Средняя Низкая Нет (эксперимент)

Лично я после месяца мучений с LangGraph (там граф — это ад в отладке, если у тебя больше 5 узлов) перешел на Strands. Да, LangGraph мощнее, но для 80% задач эта мощь избыточна. CrewAI слишком завязан на роли, а AutoGPT банально глючит на длинных циклах.

Strands берёт ровно то, что нужно: простой агентный цикл, тулы как функции Python, понятный system prompt. И да, он умеет в мультиагентность — если хочется собрать толпу агентов, как в нашем гайде.

Практический пример: агент для сбора данных из нескольких источников

Допустим, нужно написать агента, который по запросу пользователя собирает последние новости по теме, ищет похожие статьи в корпоративной базе (OpenSearch) и отдаёт краткий дайджест. Типичный use case из гибридного RAG. Начнём с установки Strands.

pip install strands-sdk==0.9.0  # последняя на 1 июля 2026

Следующий шаг — описать тулы. В Strands это обычные функции с декораторами. Пример тула для веб-поиска (используем Exa, как в статье про Exa):

from strands import tool  @tool  def search_web(query: str) -> list[dict]:      """            Ищет новости по запросу через Exa API.          Args:              query: текст запроса          Returns:              список новостей (заголовок, url, сниппет)          """      # тут вызов Exa (опустим реализацию)      return [{"title": "...", "url": "..."}]

Тул для поиска по внутренней базе (OpenSearch) вытащим из статьи про гибридный RAG — там уже готовый код с фильтрацией.

@tool  def search_internal(query: str, top_k: int = 5) -> list[dict]:      """Поиск по корпоративной базе знаний (OpenSearch)."""      # используем OpenSearch клиент      return opensearch_client.search(query, size=top_k)

1 Создаём системный промпт

Без хорошего system prompt агент будет делать глупости. Вот работающий шаблон:

SYSTEM_PROMPT = """  Ты — исследовательский ассистент. Твоя задача:  1. Получить запрос пользователя.  2. Если запрос касается внешних новостей — используй search_web.  3. Параллельно ищи в корпоративной базе через search_internal.  4. Собери результаты и напиши краткий дайджест из 3-5 пунктов.  5. Если по запросу ничего не найдено — честно скажи, что данных нет.  Не выдумывай то, чего нет в источниках.  """

2 Собираем агента и цикл

from strands import Agent, AgentCore, ToolRegistry  from strands.runtime import BedrockRuntime    llm = BedrockRuntime(      model_id="anthropic.claude-4-sonnet-20260601",  # Claude 4 Sonnet на 1 июля      region="us-east-1"  )    registry = ToolRegistry()  registry.register(search_web)  registry.register(search_internal)    agent = Agent(      name="news-digest-agent",      system_prompt=SYSTEM_PROMPT,      tools=registry,      max_iterations=5  # ограничение на число шагов  )

Агентный цикл запускается одной строкой:

result = agent.run("Собери последние новости по Amazon Bedrock и найди похожие статьи в нашей базе")  print(result)
💡
Strands сам решает, когда вызывать следующий тул, а когда завершить. max_iterations спасает от бесконечного цикла, если агент застрял.

Как развернуть это в облаке на Bedrock

Локально всё работает, но прод требует managed решения. Amazon Bedrock AgentCore — сервис, который берёт на себя запуск агента в безопасном окружении. Strands SDK умеет экспортировать агента в формат, понятный AgentCore.

from strands.deployment import BedrockAgentExporter    exporter = BedrockAgentExporter(      agent=agent,      role_arn="arn:aws:iam::123456789012:role/BedrockAgentRole",      alias_name="production"  )  agent_id = exporter.deploy()  print(f"Агент развёрнут, ID: {agent_id}")

После деплоя ты получаешь endpoint, к которому можно цеплять Slack, веб-форму или Telegram — как в нашем гайде по интеграции со Slack. AgentCore сам масштабирует реплики, управляет шифрованием и логирует все вызовы в CloudWatch.

Типичная ошибка: забыть добавить права на вызов тулов. Убедитесь, что IAM роль содержит политики на Exa API (если используете) и на OpenSearch.

Что реально бесит в Strands (честный минус)

Первое — документация. Она есть, но написана сухо, примеров катастрофически мало. Приходится лезть в исходники SDK на GitHub. Второе — отладка цикла. Если агент выбрал неверный тул, трейс не всегда понятный. Пришлось прокидывать свой логгер, чтобы понять, почему он вызывает search_web, когда должен search_internal.

Третье — лимит в 20 шагов (hardcoded). Для простых сценариев нормально, но для сложной мультиагентки приходится вручную увеличивать через конфиг. Разработчики обещали убрать это ограничение в 0.10, но пока ждём.

Кому это реально сдалось

  • Инженерам ML/AI — чтобы быстро прототипировать агенты и не писать велосипед с циклами. Strands сокращает код в 3-4 раза по сравнению с LangGraph.
  • Командам, уже сидящим на AWS — нативная интеграция с Bedrock AgentCore даёт безопасность, мониторинг и отказоустойчивость без шаманства.
  • Биоинформатикам — да, мы уже делали агента для белков на Strands. Там как раз нужен был гибкий цикл для смешанного поиска.

Не советую использовать, если у тебя только одна модель и один простой запрос — хватит обычного API вызова. Strands оправдан, когда есть цепочка действий и несколько тулов.

Прогноз: куда качнётся Strands к концу 2026

Судя по роадмапу, в релизе 0.10 появится встроенный agent memory (сейчас его нет, приходится колхозить через внешнюю БД). Ещё обещают graph-based planning — вместо линейного цикла агент сможет строить план из параллельных шагов. Если это сделают удобно, Strands обойдёт LangGraph по популярности в AWS-среде. А пока — берите и пробуйте, код на десять строк не обманет.

Подписаться на канал