AWS 기술 블로그

Strands Agents와 오픈 소스 AI 에이전트 SDK 살펴보기

이 글은 AWS Open Source Blog에 게시된 Introducing Strands Agents, an Open Source AI Agents SDK 을 한국어 번역 및 편집 하였습니다.

오늘 저는 Strands Agents를 출시한다는 기쁜 소식을 전합니다. Strands Agents는 모델 중심 접근 방식으로 단 몇 줄의 코드만으로 AI 에이전트를 구축하고 실행할 수 있는 오픈 소스 SDK입니다. Strands는 간단한 사용 사례부터 복잡한 에이전트 사용 사례까지, 그리고 로컬 개발부터 프로덕션 환경 배포까지 확장 가능합니다. AWS의 여러 팀은 이미 Amazon Q Developer, AWS Glue, VPC Reachability Analyzer 등에서 프로덕션 환경의 AI 에이전트를 위해 Strands를 사용하고 있습니다. 이제 여러분이 자신만의 AI 에이전트를 구축할 수 있도록 Strands를 공유하게 되어 기쁩니다.

개발자가 에이전트를 위해 복잡한 워크플로우를 정의해야 하는 다른 프레임워크와 달리, Strands는 최신 모델의 계획, 사고 연결, 도구 호출 및 성찰 능력을 활용하여 에이전트 개발을 단순화합니다. Strands를 사용하면 개발자는 코드에서 프롬프트와 도구 목록만 정의하여 에이전트를 구축한 다음, 로컬에서 테스트하고 클라우드에 배포할 수 있습니다. DNA의 두 가닥처럼, Strands는 에이전트의 두 핵심 요소인 모델과 도구를 연결합니다. Strands는 모델의 고급 추론 기능을 사용하여 에이전트의 다음 단계를 계획하고 도구를 실행합니다. 더 복잡한 에이전트 사용 사례의 경우, 개발자는 Strands에서 에이전트의 동작을 사용자 정의할 수 있습니다. 예를 들어, 도구 선택 방법을 지정하고, 컨텍스트 관리 방법을 사용자 정의하며, 세션 상태와 메모리가 저장되는 위치를 선택하고, 다중 에이전트 애플리케이션을 구축할 수 있습니다. Strands는 어디서든 실행할 수 있으며, Amazon Bedrock, Anthropic, Ollama, Meta 및 LiteLLM을 통한 다른 제공업체의 모델을 포함하여 추론 및 도구 사용 기능이 있는 모든 모델을 지원할 수 있습니다.

Strands Agents는 열린 커뮤니티이며, Accenture, Anthropic, Langfuse, mem0.ai, Meta, PwC, Ragas.io, Tavily 등 여러 회사가 지원과 기여로 함께하게 되어 기쁩니다. 예를 들어, Anthropic은 이미 Anthropic API를 통해 모델을 사용하기 위한 지원을 Strands에 기여했으며, Meta는 Llama API를 통한 Llama 모델 지원을 기여했습니다. GitHub에서 우리와 함께 Strands Agents를 시작해보세요!

저는 주로 소프트웨어 개발을 위한 생성형 AI 기반 어시스턴트인 Amazon Q Developer로 일하고 있습니다. 제 팀과 저는 2023년 초, 원래의 ReAct(Reasoning and Acting) 과학 논문이 발표될 무렵 AI 에이전트 구축을 시작했습니다. 이 논문은 대규모 언어 모델이 환경 내에서 추론하고, 계획하고, 행동을 취할 수 있다는 것을 보여주었습니다. 예를 들어, LLM은 작업을 완료하기 위해 API 호출이 필요하다고 추론한 다음 해당 API 호출에 필요한 입력을 생성할 수 있었습니다. 우리는 대규모 언어 모델이 복잡한 소프트웨어 개발 및 운영 문제 해결을 포함한 다양한 유형의 작업을 완료하기 위한 에이전트로 사용될 수 있다는 것을 깨달았습니다.

당시 LLM은 일반적으로 에이전트처럼 행동하도록 훈련되지 않았습니다. 주로 자연어 대화를 위해 훈련되었습니다. LLM을 성공적으로 추론하고 행동하게 하기 위해서는 도구 사용 방법에 대한 복잡한 프롬프트 지침, 모델 응답을 위한 파서, 그리고 오케스트레이션 로직이 필요했습니다. 당시에는 LLM이 구문적으로 올바른 JSON을 안정적으로 생성하게 하는 것조차 어려웠습니다! 에이전트를 프로토타이핑하고 배포하기 위해, 우리 팀은 초기 모델로 에이전트가 작업을 안정적으로 성공시키는 데 필요한 스캐폴딩과 오케스트레이션을 처리하는 다양한 복잡한 에이전트 프레임워크 라이브러리에 의존했습니다. 이러한 프레임워크를 사용하더라도 에이전트를 프로덕션 준비 상태로 만들기 위해 몇 달 동안의 튜닝과 조정이 필요했습니다.

그 이후로, 우리는 대규모 언어 모델이 추론하고 작업을 완료하기 위해 도구를 사용하는 능력이 크게 향상되는 것을 보았습니다. 모델이 이제 기본적으로 도구 사용 및 추론 기능을 갖추고 있기 때문에 에이전트를 구축하기 위한 복잡한 오케스트레이션이 더 이상 필요하지 않다는 것을 깨달았습니다. 실제로 우리가 에이전트를 구축하는 데 사용하던 일부 에이전트 프레임워크 라이브러리는 새로운 LLM의 기능을 완전히 활용하는 데 방해가 되기 시작했습니다. LLM이 극적으로 개선되고 있었지만, 그러한 개선이 우리가 사용하던 프레임워크로 에이전트를 더 빠르게 구축하고 반복할 수 있다는 것을 의미하지는 않았습니다. 여전히 에이전트를 프로덕션 준비 상태로 만드는 데 몇 달이 걸렸습니다.

우리는 Q Developer의 팀들을 위해 이러한 복잡성을 제거하기 위해 Strands Agents 구축을 시작했습니다. 복잡한 오케스트레이션 로직으로 에이전트를 구축하는 것에 비해, 최신 모델의 기능에 의존하여 에이전트를 구동하는 것이 시장 출시 시간을 크게 단축하고 최종 사용자 경험을 개선한다는 것을 발견했습니다. 이전에는 Q Developer 팀이 새로운 에이전트로 프로토타입에서 프로덕션으로 이동하는 데 몇 달이 걸렸지만, 이제 Strands를 사용하여 며칠 또는 몇 주 내에 새로운 에이전트를 출시할 수 있게 되었습니다.

에이전트의 가장 간단한 정의는 세 가지 요소의 조합입니다: 1) 모델, 2) 도구, 3) 프롬프트. 에이전트는 이 세 가지 구성 요소를 사용하여 종종 자율적으로 작업을 완료합니다. 에이전트의 작업은 질문에 답변하거나, 코드를 생성하거나, 휴가를 계획하거나, 재정 포트폴리오를 최적화하는 것일 수 있습니다. 모델 중심 접근 방식에서 에이전트는 모델을 사용하여 지정된 작업을 수행하기 위해 자체 단계를 동적으로 지시하고 도구를 사용합니다.

agent definition diagram

Strands Agents SDK로 에이전트를 정의하려면 코드에서 다음 세 가지 구성 요소를 정의합니다:

  1. 모델: Strands는 유연한 모델 지원을 제공합니다. 도구 사용과 스트리밍을 지원하는 Amazon Bedrock의 모든 모델, Anthropic API를 통한 Anthropic의 Claude 모델 계열, Llama API를 통한 Llama 모델 계열, 로컬 개발을 위한 Ollama, 그리고 LiteLLM을 통한 OpenAI와 같은 다른 많은 모델 제공업체를 사용할 수 있습니다. 또한 Strands로 자신만의 사용자 정의 모델 제공업체를 정의할 수도 있습니다.
  2. 도구: 에이전트의 도구로 사용할 수 있는 수천 개의 게시된 Model Context Protocol (MCP) 서버 중에서 선택할 수 있습니다. Strands는 또한 파일 조작, API 요청 생성, AWS API와의 상호 작용을 위한 도구를 포함하여 20개 이상의 사전 구축된 예제 도구를 제공합니다. Strands의 @tool 데코레이터를 사용하여 모든 Python 함수를 도구로 쉽게 사용할 수 있습니다.
  3. 프롬프트: 최종 사용자의 질문에 답변하는 것과 같이 에이전트의 작업을 정의하는 자연어 프롬프트를 제공합니다. 또한 에이전트에 대한 일반적인 지침과 원하는 동작을 제공하는 시스템 프롬프트도 제공할 수 있습니다.

에이전트는 프롬프트에서 제공한 작업을 완료할 때까지 모델 및 도구와 루프 내에서 상호 작용합니다. 이 에이전트 루프는 Strands 기능의 핵심입니다. Strands 에이전트 루프는 LLM이 얼마나 강력해졌는지와 그들이 얼마나 잘 자연스럽게 추론하고, 계획하고, 도구를 선택할 수 있는지를 최대한 활용합니다. 각 루프에서 Strands는 프롬프트와 에이전트 컨텍스트, 그리고 에이전트 도구에 대한 설명과 함께 LLM을 호출합니다. LLM은 에이전트의 최종 사용자를 위해 자연어로 응답하거나, 일련의 단계를 계획하거나, 에이전트의 이전 단계를 성찰하거나, 사용할 하나 이상의 도구를 선택할 수 있습니다. LLM이 도구를 선택하면 Strands는 도구를 실행하고 결과를 LLM에 다시 제공하는 역할을 합니다. LLM이 작업을 완료하면 Strands는 에이전트의 최종 결과를 반환합니다.

Strands agentic loop

Strands의 모델 중심 접근 방식에서 도구는 에이전트의 동작을 사용자 정의하는 방법의 핵심입니다. 예를 들어, 도구는 지식 베이스에서 관련 문서를 검색하거나, API를 호출하거나, Python 로직을 실행하거나, 추가 모델 지침이 포함된 정적 문자열을 반환할 수 있습니다. 도구는 또한 다음과 같은 Strands Agents 예제 사전 구축 도구를 통해 모델 중심 접근 방식에서 복잡한 사용 사례를 달성하는 데 도움이 됩니다:

  • 검색 도구(Retrieve tool) : 이 도구는 Amazon Bedrock Knowledge Bases를 사용한 의미 검색을 구현합니다. 문서 검색을 넘어, 검색 도구는 의미 검색을 사용하여 다른 도구를 검색함으로써 모델이 계획하고 추론하는 데 도움을 줄 수 있습니다. 예를 들어, AWS의 한 내부 에이전트는 6,000개 이상의 도구 중에서 선택할 수 있습니다! 오늘날의 모델은 그렇게 많은 도구 중에서 정확하게 선택할 수 있는 능력이 없습니다. 모델에 6,000개의 모든 도구를 설명하는 대신, 에이전트는 의미 검색을 사용하여 현재 작업에 가장 관련성이 높은 도구를 찾아 모델에게 해당 도구만 설명합니다. 많은 도구 설명을 지식 베이스에 저장하고 모델이 검색 도구를 사용하여 현재 작업에 관련된 도구의 하위 집합을 검색하도록 함으로써 이 패턴을 구현할 수 있습니다.
  • 사고 도구(Thinking tool): 이 도구는 모델이 여러 사이클을 통해 깊은 분석적 사고를 하도록 유도하여 에이전트의 일부로 정교한 사고 처리와 자기 성찰을 가능하게 합니다. 모델 중심 접근 방식에서 도구로써 사고를 모델링하면 모델로 하여금 작업이 깊은 분석을 필요로 하는지 여부와 시기에 대해 추론할 수 있게 합니다.
  • 다중 에이전트(Multi-agent) 도구(워크플로우, 그래프, 스웜 도구와 같은): 복잡한 작업을 위해 Strands는 다양한 다중 에이전트 협업 패턴에서 여러 에이전트를 오케스트레이션할 수 있습니다. 하위 에이전트와 다중 에이전트 협업을 도구로써 모델링하면, 모델 중심 접근 방식은 모델이 작업이 정의된 워크플로우, 그래프 또는 하위 에이전트 스웜을 필요로 하는지 여부와 시기에 대해 추론할 수 있게 합니다. Strands는 다중 에이전트 애플리케이션을 위한 Agent2Agent(A2A) 프로토콜에 대한 지원을 곧 제공될 예정입니다.

Strands Agents SDK를 사용하여 에이전트를 구축하는 예제를 살펴보겠습니다. 오래전부터 이야기되어 왔듯이, 이름 짓기는 컴퓨터 과학에서 가장 어려운 문제 중 하나입니다. 오픈 소스 프로젝트의 이름을 짓는 것도 예외는 아닙니다! Strands Agents 프로젝트의 잠재적인 이름을 브레인스토밍하는 데 도움을 주기 위해, 저는 Strands를 사용하여 이름 짓기 AI 어시스턴트를 만들었습니다. 이 예제에서는 Strands를 사용하여 Amazon Bedrock의 기본 모델, MCP 서버 및 사전 구축된 Strands 도구를 활용하여 이름 짓기 에이전트를 구축할 것입니다.

agent.py라는 파일을 다음 코드로 만드세요:

from strands import Agent
from strands.tools.mcp import MCPClient
from strands_tools import http_request
from mcp import stdio_client, StdioServerParameters

# Define a naming-focused system prompt
NAMING_SYSTEM_PROMPT = """
You are an assistant that helps to name open source projects.

When providing open source project name suggestions, always provide
one or more available domain names and one or more available GitHub
organization names that could be used for the project.

Before providing your suggestions, use your tools to validate
that the domain names are not already registered and that the GitHub
organization names are not already used.
"""

# Load an MCP server that can determine if a domain name is available
domain_name_tools = MCPClient(lambda: stdio_client(
    StdioServerParameters(command="uvx", args=["fastdomaincheck-mcp-server"])
))

# Use a pre-built Strands Agents tool that can make requests to GitHub
# to determine if a GitHub organization name is available
github_tools = [http_request]

with domain_name_tools:
    # Define the naming agent with tools and a system prompt
    tools = domain_name_tools.list_tools_sync() + github_tools
    naming_agent = Agent(
        system_prompt=NAMING_SYSTEM_PROMPT,
        tools=tools
    )

    # Run the naming agent with the end user's prompt
    naming_agent("I need to name an open source project for building AI agents.")

에이전트를 실행하려면 GitHub 개인 액세스 토큰이 필요합니다. 환경 변수 GITHUB_TOKEN에 GitHub 토큰 값을 설정하세요. 또한 us-west-2 리전에서 Anthropic Claude 3.7 Sonnet을 위한 Bedrock 모델 액세스와 로컬에 구성된 AWS 자격 증명이 필요합니다.

이제 에이전트를 실행하세요:

pip install strands-agents strands-agents-tools
python -u agent.py

다음과 같은 에이전트의 출력이 표시될 것입니다:

Based on my checks, here are some name suggestions for your 
open source AI agent building project:

## Project Name Suggestions:

1. **Strands Agents** 
- Available domain: strandsagents.com 
- Available GitHub organization: strands-agents 

Strands Agents SDK를 사용하여 선호하는 AI 지원 개발 도구에서 오늘 바로 새로운 에이전트 구축을 시작할 수 있습니다. 빠르게 시작할 수 있도록, Q Developer CLI 또는 Cline과 같은 MCP 지원 개발 도구와 함께 사용할 수 있는 Strands MCP 서버를 게시했습니다. Q Developer CLI의 경우, 다음 예제를 사용하여 CLI의 MCP 구성에 Strands MCP 서버를 추가하세요. GitHub에서 더 많은 구성 예제를 볼 수 있습니다.

{
  "mcpServers": {
    "strands": {
      "command": "uvx",
      "args": ["strands-agents-mcp-server"]
    }
  }
}

프로덕션 환경에서 에이전트를 실행하는 것은 Strands 설계의 핵심 원칙입니다. Strands Agents 프로젝트에는 에이전트를 프로덕션으로 이전하는 데 도움이 되는 참조 구현 세트가 포함된 배포 툴킷이 포함되어 있습니다. Strands는 프로덕션 환경에서 다양한 아키텍처를 지원할 수 있을 만큼 유연합니다. Strands를 사용하여 대화형 에이전트 뿐만 아니라 이벤트에 의해 트리거되거나, 일정에 따라 실행되거나, 지속적으로 실행되는 에이전트를 구축할 수 있습니다. Strands Agents SDK로 구축된 에이전트를 에이전트 루프와 도구 실행이 동일한 환경에서 실행되는 모놀리스로 배포하거나 마이크로서비스 세트로 배포할 수 있습니다. AWS 내부에서 Strands Agents와 함께 사용하는 네 가지 에이전트 아키텍처를 설명하겠습니다.

다음 다이어그램은 클라이언트 애플리케이션을 통해 사용자 환경에서 완전히 로컬로 실행되는 Strands를 사용한 에이전트 아키텍처를 보여줍니다. GitHub의 예제 명령줄 도구는 에이전트 구축을 위한 CLI 기반 AI 어시스턴트를 위해 이 아키텍처를 따릅니다.

Agent architecture diagram

다음 다이어그램은 에이전트와 그 도구가 프로덕션 환경에서 API 뒤에 배포되는 아키텍처를 보여줍니다. Strands Agents SDK로 구축된 에이전트를 AWS Lambda, AWS Fargate 또는 Amazon Elastic Compute Cloud(Amazon EC2)를 사용하여 AWS의 API 뒤에 배포하는 방법에 대한 참조 구현을 GitHub에 제공했습니다.

Run agent behind an API diagram

Strands 에이전트 루프와 도구 실행을 별도의 환경에서 실행하여 관심사를 분리할 수 있습니다. 다음 다이어그램은 에이전트가 API를 통해 도구를 호출하고, 도구가 에이전트 환경과 분리된 격리된 백엔드 환경에서 실행되는 Strands를 사용한 에이전트 아키텍처를 보여줍니다. 예를 들어, 에이전트 자체는 Fargate 컨테이너에서 실행하면서 에이전트의 도구는 Lambda 함수에서 실행할 수 있습니다.

Run tools in isolated backend environment

또한 클라이언트가 도구 실행을 담당하는 제어 반환 패턴을 Strands로 구현할 수 있습니다. 이 다이어그램은 Strands Agents SDK로 구축된 에이전트가 백엔드 환경에 호스팅된 도구와 에이전트를 호출하는 클라이언트 애플리케이션을 통해 로컬로 실행되는 도구의 조합을 사용할 수 있는 에이전트 아키텍처를 보여줍니다.

Run a mix of tools

정확한 아키텍처와 관계없이, 에이전트의 관찰 가능성은 프로덕션 환경에서 에이전트가 어떻게 수행되고 있는지 이해하는 데 중요합니다. Strands는 프로덕션 에이전트에서 에이전트 궤적과 메트릭을 수집하기 위한 계측 기능을 제공합니다. Strands는 OpenTelemetry(OTEL)를 사용하여 시각화, 문제 해결 및 평가를 위해 OTEL 호환 백엔드에 원격 측정 데이터를 전송합니다. Strands의 분산 추적 지원을 통해 아키텍처의 다양한 구성 요소를 통해 요청을 추적하여 에이전트 세션의 완전한 그림을 그릴 수 있습니다.

Strands Agents는 Apache License 2.0 하에 제공되는 오픈 소스 프로젝트입니다. 이제 여러분과 함께 공개적으로 Strands를 구축할 수 있게 되어 기쁩니다. 추가 제공업체의 모델 및 도구에 대한 지원 추가, 새로운 기능 협업 또는 문서 확장을 포함하여 프로젝트에 대한 기여를 환영합니다. 버그를 발견했거나, 제안이 있거나, 기여할 것이 있다면 GitHub에서 우리와 함께해주세요.

Strands Agents에 대해 더 알아보고 Strands로 첫 번째 AI 에이전트 구축을 시작하려면, 이 문서를 참고하세요.

Youngjin Kim

Youngjin Kim

김영진 솔루션 아키텍트는 소프트웨어 개발자로써 DevOps 엔지니어 및 소프트웨어 아키텍트의 경험을 통해 엔터프라이즈 고객이 아키텍처 설계 및 AWS 서비스를 효과적으로 사용토록 지원하고 있습니다. AWS 기술 블로그 리딩과 LGE 서비스의 AWS 클라우드 전환을 지원하는 업무를 담당하고 있습니다.