---
name: pickit-nudge-gen
description: PICKIT 프로젝트 전용 — 상품/카테고리/트리거 조합으로 Rule JSON과 넛지 카피를 LLM으로 생성합니다. rules.json과 nudge_copy.json에 추가할 수 있는 완성된 출력을 만듭니다.
license: MIT
metadata:
  author: pickit
  version: "1.0"
---

# PICKIT Nudge Generator

상품 특성, 카테고리, 고객 트리거에 맞는 Rule과 넛지 카피를 생성합니다.

## 언제 사용하는가

- 새로운 카테고리(아우터, 상의, 하의 등)에 맞는 규칙이 필요할 때
- 기존 넛지 카피의 CTR이 낮아 교체가 필요할 때
- 특정 고객 세그먼트(재방문, 로그인, 고가 상품 관심자)용 규칙을 추가할 때
- LLM 프롬프트 템플릿을 신규 트리거에 맞게 작성할 때

---

## 실행 절차

### 1. 입력 수집

사용자에게 다음을 확인 (없으면 AskUserQuestion):

```
1. 카테고리: (예: 아우터/블레이저, 상의/티셔츠, 하의/슬랙스)
2. 트리거 상황: (예: 사이즈 고민, 가격 부담, 재방문, 옵션 선택 후 이탈)
3. 타겟 고객: (비로그인/로그인/재방문자/신규)
4. 가격대: (저가 ~3만, 중가 3~8만, 고가 8만+)
5. 리뷰 데이터 여부: (실제 리뷰 텍스트 있음/없음)
```

### 2. 현재 rules.json 읽기

중복 Rule ID 방지를 위해 현재 `rules/rules.json`의 마지막 ID 번호 확인.

### 3. Rule JSON 생성

입력을 바탕으로 다음 구조의 Rule을 생성:

```json
{
  "id": "R{다음번호}",
  "name": "{카테고리}_{트리거}_{타겟}",
  "description": "언제 발동되는지 한국어로 명확히",
  "priority": {기존 규칙보다 낮은 우선순위},
  "enabled": true,
  "trigger": "{exit_intent | scroll_up | time_based | cart_abandon}",
  "conditions": [
    { "field": "pageType", "op": "eq", "value": "product" },
    { "field": "categoryName", "op": "in", "value": ["{카테고리}"] },
    추가 조건들...
  ],
  "nudge_source": "llm",
  "llm_context_fields": ["{이 상황에 필요한 컨텍스트 필드들}"],
  "nudge_id": "N_{대문자_설명}",
  "cooldown_sec": 600,
  "max_per_session": 1,
  "tags": ["{관련 태그}"]
}
```

**조건 선택 가이드**:

| 트리거 상황 | 추가해야 할 조건 |
|---|---|
| 사이즈 고민 | `sizeGuideClick: true` |
| 가격 부담 (고가) | `priceValue: { gte: 80000 }`, `productViewCount: { gte: 2 }` |
| 옵션 선택 후 망설임 | `option_click_count: { gte: 1 }`, `cartAdded: false` |
| 리뷰 확인 후 이탈 | `reviewTabClick: true`, `cartAdded: false` |
| 재방문 (고관여) | `productViewCount: { gte: 3 }` |
| 장바구니 담고 이탈 | `pageType: cart`, `timeAfterCart: { gte: 120 }` |
| 로그인 유저 전용 | `isLoggedIn: true` |

### 4. 넛지 카피 생성 (정적 폴백용)

LLM 실패 시 사용할 정적 카피를 `nudge_copy.json`에 추가할 형식으로 생성:

```json
"{NUDGE_ID}": {
  "icon": "적절한 이모지 1개",
  "tag": "PICKIT · {상황 설명}",
  "title": "15자 이내 — 공감 또는 사실 전달",
  "body": "40자 이내 — 구체적 수치나 리뷰 키워드 포함 (없으면 일반 문구)",
  "cta": "10자 이내 행동 유도",
  "cta_target": "#actionCart | #detail | #review | #prdDetail",
  "coupon": null
}
```

**카테고리별 추천 방향성**:

| 카테고리 | icon | 핵심 메시지 방향 |
|---|---|---|
| 아우터 (코트/블레이저/자켓) | 🧥 | 사이즈 정보, 세탁 내구성, 코디 활용도 |
| 상의 (티셔츠/셔츠) | 👕 | 소재 촉감, 체형 커버, 색상 후기 |
| 하의 (슬랙스/데님) | 👖 | 허리 핏, 길이 정보, 활용도 |
| 신발 | 👟 | 사이즈 (보통보다 크게/작게), 착화감 |
| 악세서리 | 💍 | 실물 색상, 사이즈 |

**가격대별 추천 방향성**:

| 가격대 | 전략 |
|---|---|
| 저가 (~3만원) | 가성비 강조, 빠른 결정 유도 ("망설이기엔 저렴") |
| 중가 (3~8만원) | 리뷰 사회적 증거, 품질 보증 |
| 고가 (8만원+) | 소재/브랜드 신뢰, 구매자 만족도 강조 |

### 5. LLM 프롬프트 템플릿 생성

해당 Rule에서 LLM이 사용할 프롬프트 템플릿을 `server/llm.py`에 추가할 형식으로 작성:

```python
NUDGE_PROMPT_{RULE_ID} = """
당신은 이커머스 전환율 최적화 전문가입니다.

## 상황
트리거: {trigger_description}
카테고리: {category_name}
상품가격: {product_price}원

## 활용 가능한 데이터
{context_fields_description}

## 출력 (JSON)
{{
  "icon": "이모지 1개",
  "tag": "PICKIT",
  "title": "15자 이내",
  "body": "40자 이내 — 반드시 실제 데이터 기반",
  "cta": "10자 이내",
  "cta_target": "{적절한 앵커}",
  "personalized": false
}}

## 규칙
- 수치는 실제 값만 (없으면 생략)
- 과장 금지, 공감과 정보 제공 우선
- 한국어로 작성
"""
```

### 6. 출력 정리

다음 세 가지를 명확히 구분해서 출력:

**① rules.json에 추가할 Rule**
```json
{ ... }
```

**② nudge_copy.json에 추가할 카피 (폴백)**
```json
{ ... }
```

**③ server/llm.py에 추가할 프롬프트 템플릿**
```python
NUDGE_PROMPT_... = """..."""
```

그리고 마지막에:
> "이 Rule을 구현하려면 `/pickit:build`를 사용하거나, `/pickit:debug`로 기존 시나리오를 먼저 검증하세요."

---

## 생성 품질 기준

- Rule 조건은 최소 3개 이상 (조건 1~2개면 오발동 위험)
- 넛지 body는 40자 이내, 실제 데이터가 없으면 일반 문구로 대체 표시
- LLM 프롬프트는 반드시 폴백 케이스(데이터 없을 때) 안내 포함
- cooldown_sec는 최소 300초 (동일 Rule 5분 쿨다운)
