실제로 물건을 구매하는 AI 쇼핑 에이전트 구축하기
요약
ReAct 패턴, LangGraph, BuyWhere MCP 서버를 활용하여 단순 정보 제공을 넘어 실제 구매 단계까지 수행하는 AI 쇼핑 에이전트 구축 방법을 설명합니다. 실시간 데이터 접근과 추론 루프를 통해 사용자 의도에 맞는 최적의 제품을 추천하고 주문을 준비하는 과정을 다룹니다.
핵심 포인트
- ReAct 패턴을 통한 추론(Reason)과 행동(Act)의 반복 루프 구현
- LangGraph를 이용한 에이전트의 상태 머신 및 제어 흐름 관리
- MCP 서버를 활용한 마켓플레이스 데이터의 추상화 및 도구 통합
- 무한 루프 방지 및 신뢰도 기반의 종료 규칙 설계
대부분의 AI 쇼핑 어시스턴트는 "여기 몇 가지 결과가 있습니다" 단계에서 멈춥니다. 진짜 어려운 부분은 그다음 단계인 옵션 평가, 트레이드오프 (trade-offs)에 대한 추론, 그리고 실제로 구매를 완료하는 것입니다. 이 포스트에서는 ReAct 패턴, LangGraph, 그리고 BuyWhere MCP 서버를 사용하여 자연어 요청부터 결제 준비가 된 추천까지 이어지는 AI 쇼핑 에이전트를 구축하는 방법을 살펴봅니다.
챗봇 스타일 쇼핑의 문제점
ChatGPT에게 "가장 저렴한 AirPods Pro 2를 찾아줘"라고 물으면 링크 목록을 받게 되는데, 이는 종종 오래되었거나 때로는 환각 (hallucination)된 정보일 수 있습니다. 모델은 실시간 가격에 접근할 수 없고, 여러 판매자를 비교할 능력이 없으며, 행동을 취할 메커니즘도 없습니다.
당신이 실제로 원하는 것은 다음과 같은 에이전트입니다:
- 당신의 쇼핑 의도(무엇을, 어디서, 예산, 제약 조건)를 이해함
- 실제 제품 카탈로그를 실시간으로 검색함
- 결과에 대해 추론함 (가격, 배송, 판매자 평점)
- 순위가 매겨진 추천을 제시하거나 주문을 넣음
ReAct (Reason + Act) 패턴은 이를 구현하는 가장 단순한 아키텍처입니다.
쇼핑을 위한 ReAct 패턴의 모습
ReAct 에이전트는 두 가지 단계 사이를 교차하며 진행됩니다:
- Reason (추론): LLM이 현재 상태를 분석하고, 필요한 정보가 무엇인지 결정하며, 계획을 수립합니다.
- Act (행동): 에이전트가 해당 정보를 얻기 위해 도구 (API, 검색 함수, MCP 도구)를 호출합니다.
- Observe (관찰): 에이전트가 도구의 응답을 처리하고 이를 다시 추론 과정에 반영합니다.
쇼핑 에이전트의 경우, 이 루프는 다음과 같습니다:
사용자: "200달러 미만이고 싱가포르에서 구매 가능한 노이즈 캔슬링 헤드폰이 필요해"
생각: 예산 제약 조건 내에서 싱가포르의 노이즈 캔슬링 헤드폰을 검색해야겠다.
...
LangGraph를 이용한 구축
LangGraph는 이 루프를 상태 머신 (State Machine)으로서 명시적으로 만들어 줍니다. 다음은 최소한의 구현 예시입니다:
from typing import Annotated, TypedDict
from langgraph.graph import StateGraph, END
from langgraph.prebuilt import ToolNode
...
주요 설계 결정 사항
1. 데이터 레이어로서의 MCP
에이전트는 Shopee, Lazada, Amazon 또는 특정 마켓플레이스에 대해 알 필요가 없습니다. BuyWhere MCP 서버가 이 모든 것을 단일 products_search 도구 뒤로 추상화합니다. 이는 다음을 의미합니다:
- 새로운 마켓플레이스를 추가하는 것은 에이전트의 변경이 아닌 서버 측의 변경입니다.
- 에이전트의 도구 스키마 (Tool Schema)는 9개국에 걸쳐 안정적으로 유지됩니다.
- 속도 제한 (Rate Limiting), 중복 제거 (Deduplication), 통화 변환 (Currency Conversion)은 상위 단계 (Upstream)에서 처리됩니다.
2. 상태 관리의 중요성
LangGraph의 상태 머신 접근 방식은 에이전트의 결정 루프에 대한 명시적인 제어권을 제공합니다. 단순한 AgentExecutor와 달리 다음과 같은 작업이 가능합니다:
- 최대 검색 반복 횟수 강제 (무한 루프 방지)
- 사용자의 프로필로부터 예산 제약 조건 주입
- 디버깅을 위해 모든 추론 단계 기록
- 제품 카테고리에 따라 서로 다른 전략으로 분기
3. 신뢰도 기반 종료
에이전트가 영원히 검색해서는 안 됩니다. 좋은 중단 규칙은 다음과 같습니다: 만약 LLM이 도구 호출 (Tool Call) 없이 최종 답변을 생성한다면, 충분한 정보를 확보한 것입니다. 퇴보적인 루프 (Degenerate Loops)를 방지하기 위해 하드 캡 (예: 도구 호출 5회 제한)과 신뢰도 확인을 추가하십시오.
추천을 넘어
동일한 ReAct 아키텍처는 다음과 같이 확장될 수 있습니다:
- 가격 하락 모니터링 (Price-drop monitoring): 에이전트가 크론(cron) 작업에 따라 재실행되도록 예약하고, 이전 가격과 비교하여 임계값이 넘었을 때 알림을 보내도록 설정합니다.
- 다중 상품 쇼핑 리스트 (Multi-product shopping lists): 아이템 리스트를 입력하면, 에이전트가 여러 국가에 걸친 전체 장바구니 비용을 최적화하도록 합니다.
- 선물 찾기 (Gift finder): 자연어 제약 조건("요리를 좋아하는 어머니를 위한 50달러 미만의 선물")을 제품 검색 쿼리로 매핑합니다.
핵심 통찰: 일단 에이전트가 MCP를 통해 실시간 구조화된 제품 데이터(structured product data)에 접근할 수 있게 되면, 차별점은 데이터 획득이 아니라 추론 계층(reasoning layer, LLM + ReAct)이 됩니다.
직접 시도해 보세요
# MCP 서버 설치
npx -y @buywhere/mcp-server
...
BuyWhere MCP 서버는 오픈 소스입니다: github.com/BuyWhere/buywhere-mcp
이 글은 MCP를 활용한 AI 쇼핑 에이전트 구축에 관한 4부작 시리즈 중 세 번째 포스트입니다. 마지막 포스트인 'MCP 생태계와 향후 전망'을 확인하시려면 dev.to에서 BuyWhere를 팔로우하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기