본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 25. 02:30

하드웨어 제어에 대해 알고 있던 모든 것을 다시 생각하게 만든 AI 에이전트 프레임워크 (Part 2)

요약

Strands Labs의 AI 함수(AI Functions) 개념을 통해 자연어로 Python 함수를 구현하고 런타임 검증을 수행하는 전략을 소개합니다. 테스트를 먼저 작성하면 AI 에이전트가 구현을 담당하는 TDD 방식의 새로운 개발 패러다임을 제시합니다.

핵심 포인트

  • 독스트링을 구현 명세로 사용하여 함수 본문을 자동 생성
  • 런타임 검증 및 사후 조건(post-condition)을 통한 자동 재시도 메커니즘
  • 프롬프트 엔지니어링 대신 테스트 주도 개발(TDD) 방식의 AI 활용
  • 복잡한 데이터 파싱 및 예외 처리를 위한 실질적인 구현 로드맵 제공

Part 2: AI 함수 및 실질적인 구현 전략

학습 내용

Part 1에서 우리는 Strands Labs가 어떻게 물리적 로봇과 시뮬레이션 환경에 대한 자연어 제어를 가능하게 하는지 살펴보았습니다. Part 2에서는 Strands Labs 출시에서 가장 과소평가된 프로젝트인 **AI 함수 (AI Functions)**를 깊이 있게 다루고, 세 가지 프로젝트 모두에 대한 실질적인 구현 전략을 제공할 것입니다.

이 포스트를 마칠 때쯤이면, 여러분은 런타임 검증 (runtime validation) 기능이 포함된 신뢰할 수 있는 AI 기반 Python 함수를 구축하는 방법을 이해하게 될 것이며, 여러분의 숙련도에 따라 Strands Labs를 시작할 수 있는 명확한 로드맵을 갖게 될 것입니다.

프로젝트 3: AI 함수 — 조용히 모든 것을 변화시키는 것

이 프로젝트는 세 가지 중 가장 과소평가되어 있으며, 일반 개발자들에게 가장 폭넓은 영향을 미칠 것이라고 생각하기 때문에 마지막을 위해 남겨두었습니다.

핵심 요지: 만약 여러분이 수행해야 할 일을 평이한 영어로 설명함으로써 Python 함수를 작성하고, AI 에이전트가 실제로 작동하는지 보장하기 위한 런타임 검증 (runtime validation)과 함께 구현 코드를 생성하게 할 수 있다면 어떨까요?

핵심 개념

from ai_functions import ai_function
from pandas import DataFrame, api

...

여기서 일어나고 있는 일을 주목하십시오. 함수의 본문(body)이 비어 있습니다. 독스트링 (docstring)이 곧 구현 명세 (implementation specification)입니다. check_invoice_dataframe 함수는 사후 조건 (post-condition)이며, 무엇이 "정확한" 상태인지를 정의합니다. 만약 AI가 생성한 구현이 사후 조건을 통과하지 못하면, 프레임워크는 오류 컨텍스트 (error context)를 가지고 자동으로 재시도합니다.

다른 사고 모델

이것은 코드 내에서 LLM (Large Language Model)을 다루는 방식에 있어 근본적으로 다른 사고 모델 (mental model)입니다. 프롬프트 엔지니어링 (prompt engineering)을 통해 정답을 찾아가는 대신, 여러분은 **테스트를 먼저 작성 (writing tests first)**하고 프레임워크가 구현을 처리하도록 맡깁니다. 만약 테스트 주도 개발 (TDD, Test-Driven Development)을 해본 적이 있다면 익숙하게 느껴질 것입니다. 다만 구현을 작성하는 "개발자"가 Amazon Bedrock 기반의 AI 에이전트라는 점만 다릅니다.

실제 사례: 알 수 없는 파일 형식

저를 설득했던 실질적인 사례는 다음과 같습니다: 알 수 없는 형식의 파일에서 송장 (invoice) 데이터를 로드하는 작업입니다.

전통적인 방식은 어떨까요? 다음과 같은 작업이 필요했을 것입니다:

  • 파일 형식 감지
  • 각 형식에 대한 변환 로직 작성
  • 예외 케이스 (edge cases) 처리
  • LLM 응답 파싱 (parse)
  • 재시도 오케스트레이션 (orchestrate)
  • 수십 줄의 코드

AI Functions를 사용하면:

# JSON 파일 로드
df = import_invoice('data/invoice.json')

...

동일한 함수가 두 가지를 모두 처리합니다. 에이전트가 파일을 검사하고, 형식을 결정하며, 적절한 파싱 코드를 생성하고, 사후 조건 (post-conditions)에 따라 출력을 검증하며, 무언가 실패할 경우 재시도합니다.

신뢰의 격차 해결하기

제가 워크숍에서 개발자들에게 듣는, 프로덕션 워크플로우 (production workflows)에 LLM을 사용하는 것에 대한 가장 큰 반대 의견 중 하나는 다음과 같습니다: "그것이 올바르게 수행되었는지 어떻게 알 수 있나요?"

AI Functions는 이 문제를 직접적으로 해결합니다. 여러분은 LLM이 정확할 것이라고 믿는 것이 아니라, LLM이 정확하지 않을 때 이를 잡아낼 여러분 자신의 사후 조건 (post-conditions)을 믿는 것입니다. LLM은 코드 생성기이며, 여러분의 어설션 (assertions)은 안전망 역할을 합니다.

비동기 멀티 에이전트 워크플로우

이 라이브러리는 비동기 멀티 에이전트 (async multi-agent) 워크플로우도 지원하며, 이는 진정으로 강력한 패턴들을 가능하게 합니다:

async def research_stock(stock: str) -> StockInfo:
    # 뉴스 조사와 가격 조회를 병렬로 실행
    news, prices = await asyncio.gather(
...

이러한 각 함수는 @ai_function입니다. 여러분은 일반적인 Python 함수를 조합하는 것과 동일한 방식으로 AI 에이전트들을 조합합니다. 비동기적이고, 병렬적이며, 타입 안전 (type-safe)합니다.

시작하기

사전 요구 사항:

  • Python 3.12+ (3.14+ 권장)
  • 지원되는 모델 제공업체(AWS Bedrock, OpenAI)에 대한 유효한 자격 증명 (credentials)
  • Bedrock 접근 권한이 있는 AWS 계정

설치 (Installation):

pip install strands-ai-functions

빠른 시작 (Quick Start):
README에서 회의 요약 예제를 빌드해 보세요. 이는 사후 조건 검증 루프 (post-condition validation loop)가 실제로 작동하는 모습을 보여주는 깔끔하고 독립적인 데모입니다.

다음 단계 (Next Step):
작성하기 너무 지루해서 미뤄두었던 데이터 변환 (data transformation) 문제를 생각해 보고, 이를 AI Function으로 표현해 보세요.

더 큰 그림: Strands Labs가 중요한 이유

잠시 코드에서 벗어나 이 조직이 기술적으로뿐만 아니라 아키텍처적으로 무엇을 의미하는지에 대해 이야기해 보겠습니다.

AWS는 Strands Labs를 메인 Strands SDK와 분리하기로 의도적인 선택을 했습니다. 이는 단순히 조직적인 위생 (organizational hygiene) 차원이 아닙니다. 이는 그들이 최전선에서 어떻게 개발하고 싶은지에 대한 선언입니다. 즉, 프로덕션 출시 주기 (production release cycles)의 무게를 짊어지지 않고, 빠르고, 실험적이며, 커뮤니티 중심적인 개발을 지향한다는 것입니다.

모든 프로젝트는 다음을 포함하여 배포됩니다:

  • 명확한 유스케이스 (use cases)
  • 기능적인 코드
  • 테스트
  • 문서화 (documentation)

여러분은 미완성된 데모를 받는 것이 아니라, 그 위에 구축할 준비가 된 실험 결과물을 받는 것입니다.

개발자 어드보케이트 (Developer Advocate)로서의 나의 관점

개발자 어드보케이트 (developer advocacy) 분야에 종사하는 우리에게, 이런 일은 우리의 업무를 진정으로 흥미롭게 만드는 요소입니다. 저는 지난 몇 달 동안 APJC 지역 전역에서 **Amazon Bedrock**과 Strands를 사용하여 AI 에이전트를 구축하는 워크숍을 운영해 왔습니다. 제가 가장 자주 받는 질문은 다음과 같습니다: "다음은 무엇인가요? 이것은 어디로 향하고 있나요? 에이전트가 정말로 X를 할 수 있나요?"

Strands Labs는 이러한 질문들에 대한 AWS의 답변입니다 — 로드맵 슬라이드가 아니라, 실제로 작동하는 코드로 말이죠.

그리고 개인적으로는요? 개발자가 자신이 만든 무언가가 실제로 작동할 때 — 에이전트가 지능적으로 응답하고, 시뮬레이션이 성공적으로 완료되며, 로봇 팔이 지시한 대로 정확하게 움직일 때 — 그들의 얼굴이 환하게 밝아지는 것을 볼 때마다, 저는 거실 트랙을 주행하던 DeepRacer 자동차를 떠올립니다. "내가 이것을 만들었고, 이것이 세상에서 실제로 무언가를 하고 있다"라는 그 느낌이야말로, 우리가 이 도구들을 사용하는 모든 개발자에게 전달하고자 하는 것입니다.

시작하기: 여러분을 위한 로드맵

여러분의 현재 상황에 따른 저의 솔직한 권장 사항은 다음과 같습니다:

Strands Agents가 처음이라면

먼저 메인 **Strands SDK**부터 시작하세요. 모델 주도 방식 (model-driven approach)에 익숙해지십시오. 한두 개의 도구 (tool)를 사용하여 간단한 에이전트를 구축해 보세요. 그 후에 Strands Labs로 돌아오시면 됩니다.

Strands에 익숙하며 더 탐구하고 싶다면

옵션 1: AI Functions (하드웨어 불필요)

  1. strands-labs/ai-functions를 클론 (Clone) 합니다.
  2. 회의 요약 (meeting summarization) 예제를 실행합니다.
  3. 실제 데이터 변환 (data transformation) 문제를 해결하기 위한 자신만의 AI function을 구축합니다.

옵션 2: 시뮬레이션 (하드웨어 불필요)

  1. strands-labs/robots-sim을 클론 (Clone) 합니다.
  2. 모의 정책 (mock policy)과 함께 python examples/libero_example.py를 실행합니다.
  3. 에이전트가 시뮬레이션 내에서 작업을 완료하는 것을 관찰합니다.
  4. 더 깊이 파고들 준비가 되면 GR00T로 교체합니다.

로봇 하드웨어가 있거나 GPU 클러스터에 접근할 수 있다면

Strands Robots는 여러분의 놀이터입니다:

  1. SO-101 암 (arm)과 Jetson 장치를 설정합니다.
  2. 퀵 스타트 가이드를 따릅니다.
  3. GR00T 추론 (inference) 서비스를 설정합니다.
  4. 전체 워크플로우 (workflow) 예제를 실행합니다.
  5. 자신만의 자연어 명령 (natural language instructions)으로 실험을 시작합니다.

기여하고 싶다면

세 개의 리포지토리 (repos) 모두 Apache-2.0 라이선스를 따르며, 이슈 (issues)와 풀 리퀘스트 (pull requests)를 적극적으로 수용하고 있습니다:

  • robots-sim 프로젝트는 구현이 필요한 정책 (policy) 제공자로 ACT 및 SmolVLA를 명시적으로 언급하고 있습니다.
  • 두 기술 중 하나에 경험이 있다면, 이는 즉시 기여할 수 있는 구체적인 기회가 될 것입니다.
  • 문서 개선, 버그 수정, 그리고 새로운 예제 제공은 언제나 환영합니다.

정리 (Cleanup)

예제를 따라하며 AWS 리소스를 생성했다면 다음을 수행하세요:

AI Functions의 경우:

  • 로컬 실행 모드 (local execution mode)를 사용 중이라면 별도의 정리 작업이 필요하지 않습니다.
  • AWS Bedrock을 사용 중이라면 모델 호출 비용 (model invocation costs)을 반드시 인지하고 있어야 합니다.

Robots Sim의 경우:

  • Docker 컨테이너 중지: docker stop <container_id>
  • 더 이상 필요하지 않은 Docker 이미지 삭제: docker rmi <image_id>

Strands Robots의 경우:

  • 로봇 하드웨어의 전원을 안전하게 끕니다.
  • 카메라 및 시리얼 연결 (serial connections)을 해제합니다.
  • GR00T 추론 (inference) 서비스를 중지합니다.

지금 바로 시작하세요 (Take Action Now)

다음 단계는 여러분의 목표에 따라 달라집니다:

  1. 하드웨어 없이 실험하고 싶나요? AI Functions로 시작하세요 — pip install strands-ai-functions를 설치하고 오늘 바로 회의 요약 (meeting summarization) 예제를 실행해 보세요.
  2. 로봇이 작동하는 모습을 보고 싶나요? strands-labs/robots-sim을 클론(clone)하고 모의 정책 (mock policy)을 사용하여 Libero 예제를 실행해 보세요.
  3. 실제 무언가를 구축할 준비가 되었나요? 그동안 미뤄왔던 데이터 변환 (data transformation) 문제를 선택하여 이를 AI Function으로 표현해 보세요.
  4. 기여하고 싶나요? 세 개의 리포지토리(repos) 전체에서 open issues를 살펴보고 여러분의 전문 지식과 일치하는 것을 찾아보세요.

주요 리소스 (Key Resources):

주요 리소스 (Key Resources):

개인적인 메모 (A Personal Note)

DeepRacer 차량이 내 책장에 부딪히던 순간부터 AI 에이전트가 단 한 줄의 자연어(natural language)로 로봇 팔을 제어하는 순간까지 — 이 두 순간 사이의 거리는 불과 몇 년에 불과하지만, 가능성의 도약은 엄청난 것처럼 느껴집니다.

도구들은 극적으로 단순해졌습니다. 기능성(capabilities)은 극적으로 강력해졌습니다. 그리고 이를 기반으로 구축되는 커뮤니티는 그 어느 때보다 활력이 넘칩니다.

Strands Labs가 다음 장입니다. 직접 무언가를 만들어보세요. 무언가를 망가뜨려 보세요. 이슈를 등록하세요. 레포지토리(repos)는 공개되었고, 코드는 작동하며, 커뮤니티는 이제 막 시작하고 있습니다.

곧 함께 이 도구들을 실습해 볼 워크숍에서 뵙기를 바랍니다!

저자 소개 (About the Author)

Vishal은 APJC 지역에 기반을 둔 AWS Developer Advocate로, 현장 워크숍, 기술 콘텐츠 제작 및 강연 활동을 통해 개발자들에게 역량을 강화하고 있습니다. 그는 Amazon Bedrock과 Strands를 사용하여 AI 에이전트를 구축하는 것을 돕고 있으며, 이 지역 전역의 컨퍼런스, 미트업(meetups) 및 기술 세션을 통해 개발자 커뮤니티에 적극적으로 기여하고 있습니다. DeepRacer 차량을 가구에 부딪히게 하는 활동을 하지 않을 때는 클라우드 보안, DevOps, 로보틱스 분야에서 AI의 혁신적인 응용 사례를 탐구합니다.

면책 조항 (Disclaimer): 이 블로그 시리즈에서 표현된 모든 생각과 의견은 저 개인의 것이며, AWS 또는 Amazon의 견해를 대변하지 않습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0