Elevate: Qwen을 스스로 운영되는 상점의 두뇌로 만들기
요약
Qwen 모델을 활용하여 로고 하나만으로 브랜드 디자인부터 상점 구조(LayoutDSL) 생성, 상품 배치까지 수행하는 자율 운영 상점 에이전트 구축 사례를 소개합니다. 모델의 환각 문제를 방지하기 위해 3단계 검증 레이어를 도입하여 구조적 안정성을 확보했습니다.
핵심 포인트
- Qwen-VL 및 Qwen-Max를 활용한 브랜드 DNA 추출 및 자동 디자인
- LayoutDSL을 통한 상점 구조의 JSON 기반 정의 및 생성
- 모델 환각 방지를 위한 3단계 데이터 정규화 및 검증 프로세스
- 사용자가 승인만 하면 되는 Human-in-the-loop 방식의 에이전트 설계
로고로부터 상점 디자인을 설계하고, 실시간 쇼핑객 행동을 바탕으로 운영하며, 무엇이 팔리는지 학습하는 AI를 어떻게 구축했는지 — 상인을 Human-in-the-loop(인간 참여형)로 두어 구현했습니다.
Qwen Cloud와 함께한 Global AI Hackathon을 위해 구축되었습니다 — Track 4: Autopilot Agent.
문제점: 상점을 운영하는 것은 전업 업무입니다
모든 소상공인은 동일한 벽에 부딪힙니다. 온라인 상점을 구축하는 것은 일입니다. 하지만 상점을 운영하는 것 — 무엇이 팔리는지 파악하고, 쇼핑객의 행동에 반응하며, 적절한 순간에 적절한 프로모션을 출시하고, 이 모든 것이 실제로 효과가 있었는지 아는 것은 아무도 시간을 낼 수 없는 일입니다.
현재의 "커머스를 위한 AI (AI for commerce)" 물결은 이 문제를 해결하지 못합니다. 대시보드에 챗봇을 덧붙이는 수준입니다. 당신은 여전히 질문해야 하고, 여전히 결정해야 하며, 여전히 모든 것을 직접 해야 합니다.
우리는 그 반대를 원했습니다. 당신이 대화하는 어시스턴트가 아니라, 소유자는 승인만 하면 되는 **상점을 운영하는 에이전트 (Agent)**를 원했습니다. 우리의 모든 결정을 형성한 한 줄의 논제는 다음과 같습니다:
코드베이스는 신체이고, Qwen은 두뇌이다.
파트 1 — Qwen이 상점을 구축합니다 (쉬운 부분)
상인이 로고를 업로드합니다. 그것이 유일한 입력값입니다.
qwen-vl-max가 이미지를 읽고 구조화된 브랜드 DNA — 주요 색상, 분위기, 에너지, 산업적 단서 — 를 반환합니다. 그런 다음 qwen-max가 이를 완전한 브랜드로 변환합니다: 팔레트, 타이포그래피, 브랜드 보이스, SVG 아이콘, 그리고 — 이 부분이 재미있는 부분인데 — LayoutDSL: 상점의 _구조(structure)_를 설명하는 JSON 기술입니다. 어떤 히어로 섹션, 어떤 제품 그리드, 어떤 카드 스타일, 어떤 내비게이션을 어떤 순서로 배치할지를 결정합니다. 별도의 qwen-max 호출이 그 위에 범위가 지정되고 정제된(sanitized) 커스텀 CSS를 작성합니다.
결과: 어떤 두 브랜드도 동일한 상점을 갖지 않습니다. Haree는 가볍고 편집적인 느낌으로 나오고, Crest는 어둡고 구조적인 느낌으로 나옵니다. 40개의 로고는 시각적으로 구별되는 40개의 상점 전면을 만들어낼 것입니다. 이것은 단순히 색상만 바꾼 템플릿이 아닙니다. Qwen이 디자이너입니다.
하지만 구조를 반환하는 모델은 _환각 (Hallucination)_을 일으킬 수 있습니다: 잘못된 변형 이름, 섹션 없음, 8개의 섹션, 혹은 히어로 섹션이 있어야 할 자리에 내비게이션이 오는 경우 등입니다. 따라서 렌더러(renderer)는 모델의 가공되지 않은 출력값을 절대 신뢰하지 않습니다. 모든 LayoutDSL은 세 가지 레이어를 통과합니다:
coerce_variant— 타입 인식(type-aware); 환각되거나 다른 타입을 가진 변수는 해당 슬롯의 기본값으로 되돌아갑니다.normalize_dsl— 렌더러가 유일하게 신뢰하는 구조적 보장(최대 하나의 메인 히어로, 최소 하나의 그리드, 2~5개의 섹션, 인접한 배너 없음).fallback_dsl_from_token— 결정론적이며, 브랜드 시딩된 청사진(상점 이름 + 분위기 + 산업으로 해시됨). Qwen 호출이 완전히 실패하더라도, 여전히 독특하고 브랜드에 맞는 상점을 얻을 수 있습니다.
상점 생성 호출은 절대 예외를 발생시키지 않습니다. 구조적으로 결함 있는 쇼룸은 불가능합니다.
파트 1½ — Qwen이 사진 폴더에서 상점에 상품을 채우다
브랜드 외관(brand shell)만으로는 충분하지 않습니다. 빈 상점은 여전히 비어있기 때문입니다. 그래서 저희는 질문했습니다. 실제 상인에게 재고가 실제로 어떻게 도착하는가? 깔끔하게 정리된 스프레드시트가 아니라 — 사진 폴더로요. 우리는 실제로 판매자로부터 정확히 그것을 받았습니다: 브랜드 신발 98장의 사진, 아무것도 인쇄되지 않은 이름들, 가격 정보는 전무합니다.
그래서 qwen-vl-max는 모든 사진을 읽습니다. 각 사진에 대해 구조화된 초안을 반환하는데, 이는 볼 수 있는 것 (상자 위의 브랜드, 유형, 눈에 띄는 디자인)으로부터 판매 가능한 제품 이름, 사진 속 색상 조합, 상점 자체의 브랜드 목소리로 작성된 설명, 카테고리, 그리고 제안된 가격입니다. 하나의 폴더가 들어가면, 완전히 분류되고, 문구가 작성된 카탈로그가 나옵니다.
흥미로운 결정은 가격 책정이었습니다. 명백한 기능인
그리고 모델은 자신의 판단에 대해 정직함을 유지합니다. 한 번은 실제 브랜드 이름인 "SUICOKE" 스트랩 라벨을 "Suicide"로 잘못 읽은 적이 있었는데, 아주 확신에 찬 태도로 오독했습니다. 바로 그 이유 때문에, 신뢰도가 낮은 판독 결과는 조용히 잘못된 추측을 내놓으며 실시간으로 적용되는 대신, 비활성(inactive) 상태로 초안이 작성되어 판매자가 확인할 수 있도록 다시 전달됩니다. Qwen은 98%의 지루한 작업을 수행하며, 인간은 중요한 소수의 작업에 대해 최종 결정권을 유지합니다.
그리고 이러한 검토 과정은 단순한 부연 설명이 아니라 제품의 실질적인 단계입니다. 카탈로그가 생성된 후, Qwen은 **자신의 가져오기(import) 결과물을 스스로 검토(reviews its own import)**하여 인간의 손길이 필요한 제품들—이미지가 로드되지 않는 링크, 누락된 가격 등—만을 수정, 숨김 또는 유지할 수 있는 옵션 카드(option cards) 형태로 제시합니다. (이미지 깨짐 확인은 판매자의 브라우저에서 실행되므로, 고객이 실제로 마주하게 될 데드 링크를 정확하게 잡아냅니다.)
파트 2 — Qwen이 상점을 운영한다 (핵심 목적)
상점을 구축하는 것은 준비 단계일 뿐입니다. Elevate가 존재하는 이유는 그다음 단계에 있습니다.
상점이 활성화되면, 쇼핑객의 이벤트가 WebSocket을 통해 Redis로 스트리밍됩니다. 결정론적 임계값(deterministic threshold)이 패턴—장바구니 이탈 급증, 판매 속도 급증 등—을 감시합니다. 임계값을 넘어서는 패턴이 나타나면, Qwen은 **의사결정 사이클(decision cycle)**을 실행합니다.
그리고 이 부분이 Elevate를 단순한 자동 완성 기능이 아닌 _에이전트(agent)_로 만드는 지점입니다: 결정을 내리기 전에, 모델은 자신의 메모리를 읽습니다. 이 상점을 위해 수행했던 모든 과거 행동—무엇을 시도했는지, 그리고 그것이 매출을 유도했는지 여부—이 프롬프트(prompt)에 다시 입력됩니다. 따라서 Qwen의 제안은 이 특정 상점에 실제로 효과가 있었던 데이터에 근거합니다.
Qwen은 판매자의 터미널에 하나의 행동을 옵션 카드(option card) 형태로 반환합니다: 실행 방안(고객 복귀 제안, 깜짝 세일, 레이아웃 변경), 이를 유발한 트리거, 예상 매출, 신뢰도 점수, 그리고 브랜드 안전성(brand-safety) 체크 결과입니다. 그 후 모델은 동작을 멈춥니다.
그 예상 매출(estimated-revenue) 수치는 우리가 의도적으로 모델로부터 제거한 것입니다. 모델에게 직접 생성하게 내버려 두면, Qwen은 동일한 트리거에 대해 760달러, 175달러, 285달러와 같이 확신에 차 있지만 의미 없는 답변을 내놓을 것입니다. 따라서 이 수치는 실제 신호(real signals)를 기반으로 계산됩니다. 즉, 실제로 탐지된 이상 징후(anomaly)의 크기에 상점의 실제 평균 가격과 조정 가능한 비율(tunable rate)을 곱하는 방식입니다. 가격 책정(pricing)과 동일한 원리입니다. Qwen이 무엇을 할지는 결정하게 하되, 상인이 약속으로 받아들일 숫자를 환각(hallucinate)하지 않도록 하는 것입니다.
상인이 **승인(Approve)**을 누릅니다. 상점의 모습이 실시간으로 변합니다. 이것이 바로 Track 4가 지향하는 인간 참여형(human-in-the-loop) 방식입니다: Qwen이 제안하고, 상인이 결정합니다(Qwen proposes, the merchant disposes). 소유자의 동의 없이 뒤에서 일어나는 일은 아무것도 없습니다.
그러고 나서 루프(loop)가 완결됩니다. 조치된 프로모션이 해결되면, 백그라운드 결과 관찰자(outcome observer)가 해당 조치에 귀속된 주문 수를 집계하고 메모리 항목(memory entry)을 작성합니다. 다음 결정 시 이 항목을 읽어 들입니다. Qwen은 시간이 지남에 따라 상점별로 진정으로 더 똑똑해집니다.
이 루프는 가짜가 아닙니다. 실제 돈을 읽어 들입니다. 데모 상점에서 테스트를 실행했을 때, 장바구니 이탈(cart-abandon) 급증 → 승인된 고객 복귀(win-back) 제안 → 해당 제안을 통한 쇼퍼의 결제 완료 과정이 단 한 번의 결정으로 대시보드에 실시간으로 $74.70를 귀속시켰습니다. 총 매출은 $150.50에서 $225.20로 이동했으며, 플랫폼 수수료 10%($7.47)가 해당 주문에 대해 계산되었습니다. 이것이 전체 루프의 핵심입니다. 에이전트가 이끌어낸 수치를 _상인이 지켜보는 정확한 경로를 통해 측정하는 것_이지, 단순히 주장하는 것이 아닙니다.
Part 3 — 무시할 수 없는 가드레일(Guardrails), 그리고 망가지지 않는 상점
비즈니스 결정을 내리는 에이전트에게는 제동 장치가 필요합니다. Elevate에는 상인도, Qwen도 우회할 수 없는 불변의 **3계층 인터셉터(three-layer interceptor)**가 있습니다.
- Layer 1 — 브랜드 가드 (Brand Guard): Qwen이 작성한 규칙이며, 클라이언트에서 즉시 확인됩니다 (지연 시간 0). 따라서 브랜드 일관성을 해치는 색상 변경 등이 발생하면 Qwen의 언어로 경고를 보냅니다.
- Layer 2 — 비즈니스 제약 사항 (Business Constraints): 마진 하한선과 할인 상한선이 설정되어 있으며, 가시적인 경고와 함께 자동으로 제한(clamped)됩니다.
- Layer 3 — 시스템 안전 (System Safety): 원가 미만으로 판매될 수 있는 모든 행위는 강력하게 차단됩니다. 예외는 없습니다.
이것들은 이론적인 제동 장치가 아닙니다. 테스트 과정에서 한 결정 사이클이 **75%**의 고객 재유치(win-back) 할인을 제안했습니다. Layer 2는 이 제안이 고객에게 도달하기 전, 해당 상점의 상한선인 **40%**로 제한했습니다. Qwen의 수치와 상점의 제한이 결합되었고, 그 이유가 함께 표시되었습니다. 이것이 바로 자율 주행(autopilot)에 실제 제어권을 맡겨도 안전하게 만드는 핵심입니다. 제동 장치가 실제로 존재하며 에이전트가 이를 건드릴 수 없기 때문에 에이전트는 자유롭게 제안할 수 있는 것입니다.
견고함(Robustness)은 인터셉터보다 더 깊은 곳에 존재합니다. 왜냐하면 조용히 실패하는 데모는 개념 전체를 망치기 때문입니다. 모든 Qwen 호출은 강화되어 있습니다. 일시적인 오류에 대해서는 **유계 지수 백오프 재시도 (bounded exponential-backoff retries)**를 수행하고, 영구적인 오류는 즉시 표면화하며 (4xx 오류를 재시도하며 시간을 낭비하지 않음), 모델이 텍스트(prose)로 감싸더라도 유효한 객체를 복구하는 JSON 추출기(extractor)를 갖추고 있습니다. Qwen 서비스 중단 시에는 가져오기(import)를 차단하는 대신 제품 설명을 일반 텍스트로 격하시켜 유지합니다. Redis는 항상 최선 노력(best-effort) 방식으로 작동하며 Postgres를 신뢰할 수 있는 소스(source of truth)로 사용하므로, 캐시 오류로 인해 주문을 놓치는 일은 절대 발생하지 않습니다. 결제(Checkout) 시에는 조건부 업데이트(conditional update)를 통해 재고를 차감하므로, 두 명의 쇼퍼가 마지막 남은 제품을 동시에 구매할 수 없습니다.
가장 어려운 버그는 틈새에 있었다
내가 가장 좋아하는 전쟁 이야기: 전체 피칭의 대미를 장식하는 기여도 대시보드(attribution dashboard) — _"이 작업이 $X의 매출을 일으켰고, 귀하의 수수료는 $Y입니다"_라고 보여줘야 하는 부분 — 가 조용히 $0를 읽고 있었습니다.
모든 레이어는 독립적으로 작동했습니다. 단위 테스트(Unit tests)는 통과(green) 상태였습니다. 버그는 데모가 실제로 생성하는 액션 유형과 함께 전체 루프가 실행될 때만 나타났습니다. 즉, 장바구니 이탈(cart-abandon) 급증 시 Qwen이 _복구 제안(recovery offer)_으로 응답하지만, 오직 _번개 세일(flash sales)_만이 기여 가능한 프로모션으로 등록되고 있었습니다. 결과적으로 심사위원이 클릭할 정확한 경로에서 결정적인 장면(money-shot)이 비어 있게 된 것입니다. 수정 작업을 통해 모든 수익 액션이 기여 가능하도록(attributable) 만들었습니다. 그리고 교훈은 명확했습니다. 해피 패스(happy path)는 흥미로운 경로가 아닙니다. 어떤 실패들은 오직 컴포넌트 사이의 이음새(seams)에서만 존재합니다.
실시간으로 작동하며, 수익성이 있는가?
모든 "자율 주행(autopilot)" 시스템에 던져지는 공정한 질문은 이것입니다.
그래서 — 우리가 처음에 소개했던 '대시보드 위의 챗봇'을 이겼을까요? 그 패턴은 당신에게 더 빠른 키보드를 쥐여줄 뿐입니다. 당신은 여전히 질문하고, 여전히 결정하며, 여전히 직접 일을 해야 합니다. Elevate는 이를 뒤집습니다. Qwen이 이미 상점을 구축하고, 재고를 채우고, 가격을 책정하며, 상점을 지켜보고 있습니다. 상인의 모든 업무는 _예외 사항을 승인하는 것_으로 축소됩니다. 하나는 당신을 더 나은 운영자로 만들지만, 다른 하나는 당신에게 운영자를 제공합니다. 이것이 당신의 상점 '안에 있는(in)' AI와 상점을 '운영하는(running)' AI 사이의 경계입니다.
핵심은 이미 여기에 있습니다. 인간이 승인 버튼을 쥐고 있는 상태에서, 상점을 구축하고, 운영하며, 스스로를 측정하고, 학습하는 AI 말입니다.
Elevate. 스스로 운영되는 상점.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기