Strands Agents — Строим AI-агентов на Python легко и быстро
Разработка AI-агентов – это вам не шутки! Особенно когда нужно подружить разные LLM, научить их пользоваться инструментами и заставить работать в сложных сценариях. Знакомая ситуация, когда проект превращается в лапшу из API-вызовов и костылей, а сроки горят?
К счастью, мир Open Source постоянно подкидывает нам приятные сюрпризы, которые значительно упрощают этот путь. Одно из таких решений – Strands Agents Python SDK. Давайте разберемся, что это за зверь и как он может облегчить вашу жизнь, если вы работаете с большими языковыми моделями.
Что такое Strands Agents и кому он нужен?
Представьте, что у вас есть фреймворк, который позволяет сосредоточиться на логике вашего AI-агента, а не на бесконечном бойлерплейте интеграции с разными моделями и инструментами. Именно это и предлагает Strands Agents.
Это SDK, который использует модель-ориентированный подход для создания и запуска AI-агентов. От простых разговорных ассистентов до сложных автономных рабочих процессов, от локальной разработки до продакшн-деплоя – Strands Agents обещает масштабироваться вместе с вашими потребностями. И, что немаловажно, сделать процесс разработки гораздо более приятным.
Кому это будет полезно? Всем, кто работает с LLM и хочет создавать не просто 'промты', а полноценных, умных помощников, способных:
- Выполнять задачи, используя внешние инструменты.
- Взаимодействовать друг с другом в мультиагентных системах.
- Адаптироваться к разным моделям без переписывания кода.
- Вести сложные, многошаговые диалоги.
Ключевые особенности: за что мы его полюбим?
Strands Agents выделяется на фоне других решений несколькими мощными возможностями, которые делают его по-настоящему ценным инструментом.
Свобода выбора моделей: никакой привязки к одному LLM
Одна из самых приятных особенностей Strands Agents – его полная агностичность к моделям. Разработчики понимают, что мир LLM постоянно меняется, и сегодня популярна одна модель, а завтра – уже другая. Поэтому Strands Agents поддерживает практически все, что можно себе представить:
- Облачные гиганты: Amazon Bedrock, Anthropic, Google Gemini, OpenAI, Cohere, MistralAI, Writer.
- Локальные решения: Ollama, Llama.cpp.
- Универсальные шлюзы: LiteLLM.
Это дает вам невероятную гибкость: можно легко переключаться между провайдерами, экспериментировать с разными моделями для разных задач или даже комбинировать их в мультиагентных системах. Вам не придется переписывать половину кода, чтобы попробовать новую модель.
Пример использования разных моделей:
from strands import Agent
from strands.models import GeminiModel, OllamaModel
# Google Gemini
gemini_model = GeminiModel(
client_args={
"api_key": "YOUR_GEMINI_API_KEY", # Не забудьте указать свой ключ!
},
model_id="gemini-2.5-flash",
params={"temperature": 0.7}
)
agent_gemini = Agent(model=gemini_model)
print(agent_gemini("Расскажи об агентском ИИ в двух словах."))
# Ollama (для локального запуска Llama3)
ollama_model = OllamaModel(
host="http://localhost:11434",
model_id="llama3"
)
agent_ollama = Agent(model=ollama_model)
print(agent_ollama("Расскажи об агентском ИИ в двух словах."))
Инструменты – суперсила ваших агентов
Какой толк от умного агента, если он не может взаимодействовать с внешним миром? Strands Agents делает создание и интеграцию инструментов (tools) до неприличия простым. Вы можете научить своего агента считать, искать информацию в интернете, работать с базами данных или вызывать любые ваши API.
Легкое создание инструментов на Python:
Вы можете определить свои инструменты прямо в Python, используя декоратор @tool. И тут кроется приятный бонус: докстринги ваших функций автоматически используются LLM для понимания назначения инструмента. Это как написать инструкцию для агента, которая одновременно является и документацией для разработчика!
from strands import Agent, tool
@tool
def word_count(text: str) -> int:
"""Посчитать количество слов в тексте.
Эта докстринга используется LLM для понимания назначения инструмента.
"""
return len(text.split())
agent = Agent(tools=[word_count])
response = agent("Сколько слов в этом предложении: 'Привет, мир! Как дела?'")
print(response)
# Ожидаемый ответ: Агент вызовет word_count и вернет 5
Горячая перезагрузка инструментов:
А самое крутое – это горячая перезагрузка инструментов из директории. Просто кладете новые инструменты в папку ./tools/, и агент автоматически их подхватывает! Это просто мечта для быстрой итерации и экспериментов с новыми возможностями агента.
from strands import Agent
# Агент будет отслеживать изменения в директории ./tools/
agent = Agent(load_tools_from_directory=True)
response = agent("Используй любые инструменты, которые найдешь в директории tools")
print(response)
MCP: тысячи готовых инструментов под рукой
Помимо создания собственных инструментов, Strands Agents нативно поддерживает Model Context Protocol (MCP) серверы. Что это значит? Это открывает доступ к тысячам уже готовых инструментов!
Представьте, что ваш агент может читать документацию AWS, взаимодействовать с различными сервисами или использовать другие специализированные функции, просто подключившись к соответствующему MCP-серверу. Это как дать вашему агенту огромную библиотеку навыков, которые он может использовать по своему усмотрению, не требуя от вас написания каждой функции с нуля.
from strands import Agent
from strands.tools.mcp import MCPClient
from mcp import stdio_client, StdioServerParameters # Предполагаем, что mcp установлен
# Подключаемся к MCP-серверу с документацией AWS
aws_docs_client = MCPClient(
lambda: stdio_client(StdioServerParameters(command="uvx", args=["awslabs.aws-documentation-mcp-server@latest"]))
)
with aws_docs_client:
agent = Agent(tools=aws_docs_client.list_tools_sync())
response = agent("Расскажи мне про Amazon Bedrock и как его использовать с Python")
print(response)
Двунаправленная потоковая передача (Bidirectional Streaming): будущее голосовых AI-агентов
Это экспериментальная, но очень перспективная функция, которая, на мой взгляд, заслуживает отдельного внимания. Bidirectional Streaming позволяет создавать голосовых AI-агентов, которые могут вести настоящие, живые диалоги.
В отличие от обычных систем 'вопрос-ответ', где вы ждете, пока агент закончит говорить, а потом уже отвечаете, здесь поддерживается постоянное соединение. Пользователь может перебивать, давать непрерывный ввод, а агент отвечает в реальном времени, даже голосом. Это открывает двери для создания по-настоящему интерактивных голосовых помощников, служб поддержки и других приложений, где важен естественный, динамичный диалог.
Поддерживаются такие модели, как Amazon Nova Sonic, Google Gemini Live и OpenAI Realtime API. Это настоящий прорыв для тех, кто мечтает о 'разговорном' ИИ, который звучит и ощущается максимально естественно.
import asyncio
from strands.experimental.bidi import BidiAgent
from strands.experimental.bidi.models import BidiNovaSonicModel
from strands.experimental.bidi.io import BidiAudioIO, BidiTextIO
from strands.experimental.bidi.tools import stop_conversation
from strands_tools import calculator # Пример инструмента
async def main():
# Создаем двунаправленного агента с аудио-моделью
model = BidiNovaSonicModel() # Или BidiGeminiLiveModel, BidiOpenAIRealtimeModel
agent = BidiAgent(model=model, tools=[calculator, stop_conversation])
# Настраиваем аудио и текстовый ввод/вывод
audio_io = BidiAudioIO()
text_io = BidiTextIO()
# Запускаем с потоковой передачей аудио в реальном времени
# Скажите "stop conversation", чтобы вежливо завершить разговор
await agent.run(
inputs=[audio_io.input()],
outputs=[audio_io.output(), text_io.output()]
)
if __name__ == "__main__":
asyncio.run(main())
Практическое применение: где пригодится Strands Agents?
С таким набором возможностей Strands Agents становится универсальным инструментом для создания самых разных AI-агентов. Вот несколько идей, где он может проявить себя во всей красе:
- Умные ассистенты для бизнеса: Автоматизация рутинных задач, ответы на вопросы сотрудников, помощь в работе с корпоративными системами.
- Автономные рабочие процессы: Агенты, которые могут самостоятельно планировать и выполнять сложные многошаговые задачи, например, обработка заказов, анализ данных из разных источников.
- Чат-боты с расширенными функциями: Создание продвинутых чат-ботов для поддержки клиентов, которые могут не только отвечать на вопросы, но и выполнять действия (бронирование, покупки, поиск информации в реальном времени).
- Голосовые интерфейсы нового поколения: Интерактивные системы для умных домов, автомобилей, или специализированных колл-центров, способные вести естественный и прерывающийся диалог.
- Научные исследования и анализ данных: Агенты, которые могут собирать данные, обрабатывать их с помощью специализированных инструментов и представлять результаты в удобном формате.
- Образовательные платформы: Создание интерактивных учителей или репетиторов, способных адаптироваться к стилю обучения пользователя.
Выводы: Стоит ли попробовать?
Strands Agents Python SDK – это не просто еще одна обертка для LLM. Это полноценный, продуманный фреймворк для создания гибких, мощных и масштабируемых AI-агентов. Он решает многие головные боли, с которыми сталкиваются разработчики при работе с современными языковыми моделями.
Если вы устали от рутины при интеграции моделей и инструментов, хотите сосредоточиться на логике вашего агента, а не на технической обвязке, то Strands Agents определенно стоит вашего внимания. Его модель-ориентированный подход, поддержка множества LLM, простота создания инструментов и интеграция с MCP делают его очень привлекательным выбором для любого Python-разработчика, увлеченного миром AI-агентов.
Загляните в их документацию и примеры, чтобы начать экспериментировать. Возможно, именно Strands Agents станет вашим следующим любимым инструментом в арсенале для покорения мира умных помощников!