# Journey Shopping — Phễu 5 Mode Tâm Lý Khách Hàng

Lead Search Agent được thiết kế theo mô hình **Phễu bán hàng (Sales Funnel)**, chia hành trình khách hàng thành 5 giai đoạn tâm lý. Mục tiêu cuối cùng: thu thập Contact (Lead) hoặc chốt đơn (Sales).

## Tại sao phải chia 5 Mode?

Nếu hệ thống không nhận biết khách đang ở trạng thái tâm lý nào, AI sẽ hành xử sai hoàn toàn:

- Khách mới chào "Hi" nhưng AI nhảy xổ ra đòi số điện thoại — gây hoảng sợ, mất khách.
- Khách đang hỏi kỹ chất vải để chốt nhưng AI lại hỏi "Anh tìm đồ cho nam hay nữ?" — gây bực mình.

Việc chia 5 Mode là để tạo **dây cương** kìm hãm LLM, ép nó bơm đúng Tone giọng và Chiến thuật phù hợp với từng nấc của phễu.

## Sơ đồ phễu (Funnel Diagram)

```mermaid
graph LR
    M1["1. BROWSE (Lạnh)"] --> M2["2. IDENTIFYING (Ấm)"]
    M2 --> M3["3. CONSIDERING (Nóng)"]
    M3 --> M4["4. CLOSING (Chín muồi)"]
    M4 --> M5["5. RETENTION (Kết thúc)"]

    style M1 fill:#334155,stroke:#64748b,color:#e2e8f0
    style M2 fill:#0c4a6e,stroke:#0ea5e9,color:#e0f2fe
    style M3 fill:#5b21b6,stroke:#8b5cf6,color:#ede9fe
    style M4 fill:#92400e,stroke:#f59e0b,color:#fef3c7
    style M5 fill:#14532d,stroke:#22c55e,color:#dcfce7
```

## Chi tiết từng Mode

### Mode 1: BROWSE (Awareness — Dạo quanh)

| Thuộc tính | Giá trị |
|---|---|
| **Trạng thái** | Lạnh — Khách vô tình lướt qua, chưa có ý định mua |
| **InsightJSON.STAGE** | `BROWSE` |
| **STAGE_NUM** | `1` |
| **TONE** | `Friendly` |
| **Chiến thuật AI** | Cấm quăng list sản phẩm. Chỉ chào hỏi, rã đông, gợi mở câu chuyện |
| **Ví dụ AI** | "Dạ chào bạn! Bạn đang tìm đồ cho nam, nữ hay bé ạ?" |

### Mode 2: IDENTIFYING (Interest — Gom nhu cầu)

| Thuộc tính | Giá trị |
|---|---|
| **Trạng thái** | Ấm — Khách nhả manh mối ("Mình tìm áo khoác") nhưng thông tin còn thiếu |
| **InsightJSON.STAGE** | `IDENTIFYING` |
| **STAGE_NUM** | `2` |
| **TONE** | `Consultant` |
| **Chiến thuật AI** | Hạn chế gọi Tool tìm kiếm. Đặt câu hỏi lấp đầy InsightJSON |
| **Ví dụ AI** | "Dạ áo khoác mặc đi làm hay đi du lịch ạ? Tầm giá bao nhiêu?" |

### Mode 3: CONSIDERING (Cân nhắc — Xử lý từ chối)

| Thuộc tính | Giá trị |
|---|---|
| **Trạng thái** | Nóng — Khách cung cấp đủ nhu cầu, bắt đầu soi xét, chê đắt, hỏi chất liệu |
| **InsightJSON.STAGE** | `CONSIDERING` |
| **STAGE_NUM** | `3` |
| **TONE** | `Persuasive` |
| **Chiến thuật AI** | Gọi ProductSearchEngine 7 tầng. Gợi ý combo từ `ai_matches`. Kích hoạt Upsell (nhân giá 1.5x) nếu hết đồ rẻ |
| **Ví dụ AI** | "Dạ mẫu dưới 500k đang hết size, nhưng có mẫu này nhỉnh hơn chút xíu mặc cực kỳ ấm!" |

### Mode 4: CLOSING (Decision — Chốt hạ)

| Thuộc tính | Giá trị |
|---|---|
| **Trạng thái** | Chín muồi — Khách đã ưng ("Lấy anh cái đầu tiên") |
| **InsightJSON.STAGE** | `CLOSING` |
| **STAGE_NUM** | `4` |
| **TONE** | `Action-oriented` |
| **Chiến thuật AI** | Bỏ văn hoa tư vấn. Chuyển sang giọng chốt sale: xin SĐT, xin Email, lên đơn |
| **Ví dụ AI** | "Dạ form này mặc siêu tôn dáng! Anh cho em xin SĐT để lưu thông tin ưu đãi nhé!" |

### Mode 5: RETENTION (Hậu mãi)

| Thuộc tính | Giá trị |
|---|---|
| **Trạng thái** | Kết thúc — Khách đã để lại SĐT hoặc từ chối |
| **InsightJSON.STAGE** | `RETENTION` |
| **STAGE_NUM** | `5` |
| **TONE** | `Warm` |
| **Chiến thuật AI** | Thành công: Lưu DB, cảm ơn, hứa Telesale gọi. Thất bại: Mở đường lùi, không chèo kéo |
| **Ví dụ AI** | "Dạ không sao ạ, khi nào có nhu cầu anh cứ nhắn lại em nhé!" |

## InsightJSON — Bộ nhớ khách hàng

Đây là đối tượng lưu trữ toàn bộ thông tin đã thu thập được về khách trong suốt phiên chat. Classifier đọc nó để phân loại Mode, Stylist cập nhật nó sau mỗi turn.

```python
class InsightJSON(BaseModel):
    USER: str         # Thông tin người dùng (tên, xưng hô)
    TARGET: str       # Đối tượng mua hàng (cho bản thân, cho con, cho vợ)
    GOAL: str         # Mục đích mua (đi làm, đi du lịch, đi tiệc)
    CONSTRAINS: str   # Ràng buộc rõ ràng (budget < 500k, chỉ màu đen)
    STAGE: str        # Mode hiện tại (BROWSE / IDENTIFYING / CONSIDERING / CLOSING / RETENTION)
    STAGE_NUM: int    # Số thứ tự Mode (1-5)
    TONE: str         # Giọng điệu AI đang dùng
    BEHAVIORAL_HINTS: list[str]  # Dấu hiệu hành vi (hay hỏi giá, thích xem ảnh)
    LATEST_PRODUCT_INTEREST: str # Sản phẩm vừa xem gần nhất
    LAST_ACTION: str             # Hành động cuối (xem sản phẩm, hỏi size, chốt đơn)
    SUMMARY_HISTORY: str         # Tóm tắt lịch sử hội thoại
```

File tham chiếu: `backend/agent/lead_stage_agent/graph.py` — class `InsightJSON`
