AI Sparkup

최신 AI 쉽게 깊게 따라잡기⚡

Strands Agents 시작하기, LLM이 알아서 판단하는 AI 에이전트 프레임워크

AI 에이전트를 만들 때 가장 까다로운 부분은 뭘까요? 어떤 도구를 언제 사용할지, 여러 단계의 작업을 어떤 순서로 진행할지 일일이 코드로 정의하는 겁니다. Strands Agents는 이런 복잡한 워크플로우 설계를 LLM에게 맡기는 프레임워크입니다. 개발자는 에이전트의 역할과 사용 가능한 도구만 정의하면, 나머지는 LLM이 상황에 맞게 알아서 판단하고 실행합니다.

사진 출처: Analytics Vidhya

AWS 팀이 개발한 이 오픈소스 프레임워크는 실제로 Amazon Q, AWS Glue 같은 AWS 서비스에서 프로덕션 환경에 사용되고 있습니다. Analytics Vidhya가 초보 개발자를 위한 실전 가이드를 발표했습니다.

출처: Getting Started with Strands Agents – Analytics Vidhya

Strands Agents란?

Strands의 핵심 철학은 ‘모델 중심(LLM-first)’ 접근입니다. 전통적인 에이전트 프레임워크들이 개발자가 작업 흐름을 미리 설계하도록 요구하는 반면, Strands는 LLM의 추론 능력을 믿고 계획과 실행을 맡깁니다.

에이전트는 세 가지 핵심 요소로 구성됩니다:

1. 언어 모델(LLM)
에이전트의 두뇌로, 요청을 해석하고 행동을 결정합니다. Amazon Bedrock의 Claude, GPT-4, Llama 같은 오픈소스 모델까지 다양한 LLM을 사용할 수 있죠.

2. 도구(Tools)
에이전트가 실행할 수 있는 기능들입니다. 웹 검색, 계산기, 데이터베이스 조회, API 호출 등 무엇이든 가능합니다. Python의 @tool 데코레이터로 간단히 정의할 수 있습니다.

3. 메모리(Memory)
대화 맥락과 이전 상호작용을 기억하는 시스템입니다. 사용자가 “그 결과에 50을 더해줘”라고 말하면, 에이전트는 이전 계산 결과를 기억하고 있습니다.

주요 특징

도구 통합의 유연성
Strands는 MCP(Model Context Protocol)를 지원합니다. 이는 수천 개의 외부 도구에 커스텀 코딩 없이 접근할 수 있다는 뜻입니다. 웹 검색, AWS 서비스, 데이터베이스까지 표준화된 방식으로 연결됩니다.

멀티 에이전트 아키텍처
단일 에이전트뿐 아니라 여러 에이전트가 협력하는 시스템도 구축할 수 있습니다. 오케스트레이터(조정자) 에이전트가 전문 분야별 에이전트들에게 작업을 위임하는 방식이죠. 마치 팀장이 팀원들에게 업무를 분배하는 것처럼요.

프로덕션 수준의 관찰성
OpenTelemetry 표준을 사용해 에이전트의 모든 행동을 추적할 수 있습니다. 어떤 도구를 호출했는지, 얼마나 시간이 걸렸는지, 토큰을 얼마나 사용했는지 실시간으로 모니터링하고, AWS X-Ray나 CloudWatch로 시각화할 수 있습니다.

에러 처리와 재시도
도구 실행이 실패하면 자동으로 재시도하고, 예외 상황을 관리합니다. 프로덕션 환경에서 안정적으로 작동하도록 설계됐죠.

실전 사용법: 리서치 에이전트 만들기

실제로 웹 검색이 가능한 리서치 에이전트를 만들어 볼까요? 코드는 놀랍도록 간단합니다.

from langchain.agents import initialize_agent, Tool
from langchain_openai import ChatOpenAI
from langchain_community.tools import DuckDuckGoSearchRun

# 검색 도구 초기화
search = DuckDuckGoSearchRun()

# 도구 정의
tools = [
    Tool(
        name="Web Search",
        func=search.run,
        description="인터넷에서 최신 정보를 검색합니다."
    )
]

# LLM 초기화
llm = ChatOpenAI(temperature=0.7, model="gpt-4o-mini")

# 에이전트 생성
agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# 실행
response = agent.run("재생 에너지 분야의 최신 동향은?")

이게 전부입니다. 에이전트는 질문을 받으면 스스로 “이 질문에 답하려면 웹 검색이 필요하겠군”이라고 판단하고, 검색 도구를 사용해 정보를 찾아 답변을 정리합니다. 개발자가 “1단계: 검색해라, 2단계: 요약해라”라고 지시할 필요가 없죠.

메모리 기능 추가하기

대화 맥락을 기억하는 계산기 에이전트도 만들 수 있습니다:

from langchain_community.chat_message_histories import ChatMessageHistory

chat_history = ChatMessageHistory()

def calculator_agent(user_input):
    messages = [
        SystemMessage(content="당신은 계산기 도우미입니다. 이전 결과를 기억하세요.")
    ]
    messages.extend(chat_history.messages)
    messages.append(HumanMessage(content=user_input))

    response = llm.invoke(messages)
    chat_history.add_user_message(user_input)
    chat_history.add_ai_message(response.content)

    return response.content

이제 “25 곱하기 4는?”이라고 물은 뒤, “그 결과에 50을 더해줘”라고 말하면 에이전트는 이전 계산 결과(100)를 기억하고 150이라고 답합니다.

전문가 에이전트 조합하기

더 복잡한 작업에는 전문가 에이전트들을 조합할 수 있습니다. 예를 들어 화성 여행 시간을 계산하는 작업이라면:

  1. 리서치 에이전트: NASA 웹사이트에서 지구-화성 거리 정보 검색
  2. 계산 에이전트: 거리와 속도로 이동 시간 계산
  3. 오케스트레이터 에이전트: 두 에이전트의 결과를 종합해 최종 답변 생성

오케스트레이터는 작업을 분석해 필요한 전문가 에이전트를 자동으로 선택하고 결과를 통합합니다. 각 전문가 에이전트를 도구로 등록하기만 하면 됩니다:

@tool
def research_assistant(query: str) -> str:
    """웹에서 정보를 검색하는 리서치 전문가"""
    agent = Agent(
        prompt="당신은 리서치 전문가입니다.",
        tools=[retrieve, http_request]
    )
    return agent.run(query)

orchestrator = Agent(
    prompt="전문가들에게 작업을 위임하는 조정자입니다.",
    tools=[research_assistant, math_assistant]
)

LangChain과의 차이점

Strands는 LangChain 생태계 위에 구축됐지만, 접근 방식이 다릅니다. LangChain은 개발자가 체인(작업 순서)을 직접 설계하는 ‘개발자 우선’ 방식입니다. Strands는 LLM이 계획하고 실행하는 ‘모델 우선’ 방식이죠.

LangChain이 레고 블록을 주고 “원하는 대로 조립하세요”라고 한다면, Strands는 “목표만 말하면 AI가 알아서 조립합니다”라고 말하는 겁니다. 물론 세밀한 제어가 필요한 경우엔 LangChain이 더 적합할 수 있고, 빠른 프로토타이핑과 유연한 자율성이 필요하면 Strands가 유리합니다.

실무에서의 활용

Strands로 만들 수 있는 실제 애플리케이션들:

  • 고객 지원 봇: 주문 상태 확인, 환불 처리, FAQ 답변을 자율적으로 수행
  • 데이터 분석 어시스턴트: 데이터베이스 쿼리, 차트 생성, 인사이트 도출을 한 번에 처리
  • 개발 도우미: 코드 검색, 버그 수정, 테스트 작성을 자동화
  • 리서치 에이전트: 여러 소스에서 정보 수집, 요약, 보고서 작성

AWS 팀은 실제로 Strands를 Amazon Q(개발자 어시스턴트)와 AWS Glue(데이터 통합 서비스)에 적용했습니다. Lambda, Fargate, ECS 같은 AWS 서비스에 배포할 수 있고, Amazon Bedrock AgentCore를 사용하면 보안, 인증, 관찰성이 통합된 서버리스 환경에서 실행할 수 있습니다.

마무리

AI 에이전트 개발은 점점 간단해지고 있습니다. 과거엔 복잡한 상태 관리와 워크플로우 코드가 필요했지만, Strands 같은 프레임워크는 LLM의 추론 능력을 활용해 이를 자동화합니다. 개발자는 “무엇을 할 수 있는가”만 정의하면, “언제, 어떻게 할 것인가”는 에이전트가 결정합니다.

프로토타입을 빠르게 만들고 싶거나, AWS 생태계 안에서 프로덕션 수준의 에이전트를 배포하려면 Strands를 살펴볼 가치가 있습니다. 오픈소스이고, Anthropic과 Meta 같은 기업들도 기여하고 있어 생태계가 빠르게 성장하고 있으니까요.

참고자료:

Fediverse reactions

AI Sparkup 구독하기

최신 게시물 요약과 더 심층적인 정보를 이메일로 받아 보세요! (무료)

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다