Умные агенты перестали быть игрушкой. За последние полгода я перепробовал штук десять фреймворков — от тяжеловесного 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) 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-среде. А пока — берите и пробуйте, код на десять строк не обманет.