I Built an AI Agent That Tells Me When to Go Wing Foiling

개요

개발자는 윙 포일링(wing foiling) 활동에 최적인 날씨 및 환경 조건을 스스로 판단해주는 AI 에이전트를 Strands Agents, MQTT, DynamoDB를 사용하여 구축했습니다.

주요 내용

* 문제 정의: 윙 포일링은 장비 선택(전면 포일, 마스트 크기, 윙 크기, 보드 등)이 복잡하며, 매번 여러 앱과 수동적인 데이터 조합을 통해 최적의 활동 조건을 확인해야 하는 번거로움이 있습니다.
* 솔루션 설계: MQTT를 통해 "오늘 윙 포일링 해도 될까? (장소, 탑승자 무게)"와 같은 질문을 던지면, AI 에이전트가 바람, 조석, 장비 추천, 위험 평가 등 종합적인 분석 결과를 응답하는 시스템을 구축했습니다.
* Strands Agents 활용: AWS의 오픈소스 SDK인 Strands Agents를 사용하여 AI 에이전트를 개발했습니다. @tool 데코레이터를 이용해 Python 함수로 정의된 도구(API 연동, 로직 수행)를 에이전트가 시스템 프롬프트 기반으로 자동으로 호출하고 조합하도록 구현하여, 복잡한 조건부 로직 작성을 배제했습니다.
* 구축 도구:
* Wind/Weather: OpenWeatherMap API를 연동하여 바람 속도, 방향, 돌풍, 날씨 정보를 수집합니다.
* Tide: Storm Glass API를 통해 조석 정보 및 예측을 가져옵니다.
* Gear Recommendation: 바람 세기와 탑승자 무게를 기반으로 적절한 윙 및 포일 크기를 추천하는 자체 로직을 구현했습니다.
* Risk Assessment: 바람, 돌풍, 날씨, 조석 상태 등 수집된 데이터를 바탕으로 윙 포일링의 위험도를 평가합니다.
* MQTT 도입: IoT 장치 연동을 염두에 두고 경량 메시지 큐 프로토콜인 MQTT를 사용했습니다. 이를 통해 휴대폰 앱, 라즈베리 파이 등 다양한 소스에서 에이전트를 트리거하고 응답을 받을 수 있는 이벤트 기반 시스템을 구현했습니다.
* DynamoDB 캐싱: Storm Glass API의 제한적인 무료 티어와 OpenWeatherMap API의 호출 횟수를 절약하기 위해, DynamoDB를 사용하여 API 호출 결과를 캐싱했습니다. 동일한 조건의 요청이 반복될 경우 캐시된 데이터를 활용하도록 하여 API 호출 횟수를 줄이고 비용을 절감했습니다. TTL(Time To Live) 기능을 설정하여 오래된 데이터는 자동으로 삭제되도록 했습니다.
* 전체 워크플로우: MQTT 메시지 수신 → Strands Agent가 메시지 파싱 및 정보 추출 → 캐싱 확인 후 OpenWeatherMap/Storm Glass API 호출 → 추천 로직 및 위험 평가 수행 → 종합적인 Go/No-Go 결정 및 결과 생성 → MQTT 응답 발행. 전체 과정은 약 5~10초 소요됩니다.
* 학습 내용: Strands Agents를 사용하면 도구 활용 AI 에이전트 개발이 매우 간편하며, MQTT와 AI 에이전트의 조합은 인터페이스와 "두뇌"를 분리하는 강력한 접근 방식임을 확인했습니다. DynamoDB 캐싱은 서버리스 특성과 편리성을 제공합니다.

시사점

이 AI 에이전트 구축 사례는 Strands Agents의 개발 편의성, MQTT의 유연한 연동성, DynamoDB의 효율적인 캐싱 활용을 통해 특정 레저 활동에 최적화된 의사결정 지원 시스템을 성공적으로 구현한 기술적 성과를 보여줍니다. 또한, 해당 접근 방식은 날씨에 의존하는 다양한 야외 스포츠(카이트보딩, 서핑, 항해, 패러글라이딩 등)로 확장 적용될 수 있는 잠재력을 가집니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions