# Nghiệp vụ hướng dẫn chọn size — Tại sao cần AI sinh size guide?

> **Tóm tắt:** Tại sao không copy-paste bảng size Magento? Tại sao "áo phông cotton nên đúng size" nhưng "jean slim fit nên tăng 1 size"? Phân tích logic chất liệu → size và cách AI biến bảng HTML khô khan thành hướng dẫn tự nhiên.

---

## 1. Vấn đề: Bảng size Magento không đủ

Mỗi sản phẩm Canifa trên website có **bảng size** (HTML table) từ Magento chứa thông số kỹ thuật: chiều cao, cân nặng, vòng ngực, vòng eo...

**Nhưng bảng này có 3 vấn đề:**

| Vấn đề | Mô tả | Hậu quả |
|--------|-------|---------|
| **Khô khan** | Chỉ là bảng số, không có gợi ý | Khách không biết chọn size nào |
| **Thiếu context** | Không biết loại SP (áo rộng hay ôm) | "Size M" của áo phông ≠ "Size M" của áo blazer |
| **Thiếu tips** | Không có lời khuyên chất liệu → size | Khách mua jean ôm đúng size → bị chật |

### Ví dụ thực tế:

**Bảng size Magento (raw):**
```
Size S: Cao 155-160cm, Nặng 45-50kg
Size M: Cao 160-165cm, Nặng 50-58kg
Size L: Cao 165-170cm, Nặng 58-65kg
```

**Khách hàng hỏi AI:** *"Em cao 163, nặng 56kg, mặc size gì ạ?"*

Nếu bot chỉ quăng bảng → khách rơi giữa M và L, không biết chọn.  
Nếu bot có **size guide thông minh** → *"Chị cao 163cm nặng 56kg nên chọn Size M. Áo này chất cotton co giãn nên đúng size sẽ ôm body đẹp. Nếu thích thoải mái hơn thì tăng 1 size lên L ạ!"*

---

## 2. Giải pháp: AI Stylist sinh size guide

Hệ thống kết hợp **3 nguồn data** để sinh hướng dẫn tự nhiên:

![Size Guide Pipeline](data/38-size-guide-logic/size_guide_pipeline.svg)

### 3 nguồn data:

| Nguồn | Vai trò | Ví dụ |
|-------|---------|-------|
| **Bảng Size Magento** | Thông số kỹ thuật chính xác | S=155cm, M=160cm... |
| **Thông tin SP** | Loại sản phẩm + chất liệu + phong cách | Áo phông, cotton, casual |
| **Size Scale** | Các size có sẵn | S, M, L, XL |

### Logic chất liệu → gợi ý size:

Đây là phần **nghiệp vụ thời trang** quan trọng nhất. Không phải size M nào cũng giống nhau:

| Chất liệu | Đặc tính | Gợi ý size |
|-----------|---------|-----------|
| **Cotton, Thun** | Co giãn tốt | Chọn **đúng size** — vải sẽ tự co theo body |
| **Kaki, Denim** | Ít co giãn | Nên **tăng 1 size** — đặc biệt jean slim fit |
| **Len, Nỉ** | Dày, ít co giãn | Chọn **đúng size** — không cần rộng |
| **Phao, Khoác gió** | Mặc ngoài | Nên **tăng 1 size** — để layer áo trong |
| **Linen** | Mỏng, thông thoáng | Chọn **đúng size** hoặc **rộng 1 size** cho phong cách relaxed |

### Logic loại SP → gợi ý:

| Loại sản phẩm | Tips đặc biệt |
|--------------|--------------|
| **Áo phông trẻ em** | Nên chọn **rộng hơn 1 size** để bé thoải mái vận động |
| **Váy/Đầm** | Chọn theo vòng eo, KHÔNG theo chiều cao |
| **Áo blazer/Vest** | Chọn theo vòng ngực + chiều dài tay |
| **Bộ mặc nhà** | Ưu tiên thoải mái → **tăng 1 size** |

---

## 3. 2 chế độ hoạt động

### Chế độ 1: Tích hợp trong Ultra Description Pipeline

Khi sinh mô tả SP mới → Size Guide là **Bước 4** trong pipeline 5 bước.
- Input: Bảng size Magento + metadata SP
- Output: Trường `luu_y_size` trong `description_data` JSON
- Model: GPT-OSS 20B (nhẹ, nhanh)

### Chế độ 2: Batch Worker riêng biệt

Khi cần cập nhật size guide hàng loạt (VD: đầu mùa, thêm bảng size mới):
- Worker chạy nền từ Redis queue
- Xử lý song song 5 SKU cùng lúc
- Cập nhật trực tiếp vào PostgreSQL

---

## 4. Tại sao cần AI thay vì rule-based?

Bro có thể hỏi: "Tại sao không viết if/else đơn giản?"

| Cách tiếp cận | Ưu điểm | Nhược điểm |
|--------------|---------|-----------|
| **Rule-based** | Nhanh, dễ hiểu | Cứng nhắc, thiếu tự nhiên, không cover edge cases |
| **AI Stylist** | Tự nhiên, đa dạng, cover mọi loại SP | Chậm hơn ~1 giây |

**Ví dụ edge case AI xử lý tốt hơn:**
- "Áo khoác gió unisex trẻ em" → AI biết kết hợp cả logic "khoác → tăng size" + "trẻ em → rộng hơn"
- "Quần jean slim fit nữ chất liệu cotton pha spandex" → AI cân bằng giữa "jean → tăng size" và "spandex co giãn → đúng size"

Rule-based phải viết hàng chục if/else lồng nhau. AI tự suy luận từ context.

---

## 5. Kết quả thực tế

Ví dụ output cho **Áo Sơ Mi Nam Dài Tay - Chất liệu Cotton**:

> **Bảng thông số:**
> - Size S: Cao 160-165cm, Nặng 50-55kg
> - Size M: Cao 165-170cm, Nặng 55-63kg
> - Size L: Cao 170-175cm, Nặng 63-70kg
>
> **Gợi ý chọn size:**
> Anh cao 172cm, nặng 65kg → nên chọn **Size L** để vừa vặn lịch sự.
>
> **Tips mặc đẹp:**
> Áo sơ mi này chất cotton mềm, co giãn nhẹ → chọn đúng size sẽ ôm body gọn gàng. Nếu anh thích thoải mái hơn khi mặc đi du lịch, có thể tăng 1 size.
>
> **Lưu ý:** Số đo có thể chênh 1-2cm tùy độ co giãn của vải.

---

## 6. Tổng kết

| Quyết định thiết kế | Lý do nghiệp vụ |
|---------------------|-----------------|
| AI thay vì copy-paste bảng | Bảng số khô khan, không giúp khách chọn |
| Logic chất liệu → size | Cotton ≠ Kaki ≠ Phao → gợi ý khác nhau |
| Logic loại SP → size | Áo phông ≠ Blazer ≠ Đầm → tiêu chí khác |
| Model nhẹ (20B) | Chỉ cần suy luận đơn giản, không cần 120B |
| 2 chế độ hoạt động | Tích hợp pipeline + batch worker linh hoạt |

---

## References

1. Canifa Engineering. *"Size Guide Worker"* — `worker/size_guide_worker.py`
2. Canifa Engineering. *"Ultra Description Agent: node_size_guide"* — `agent/ultra_descriptions_agent/agent.py`
3. Magento Product Schema. *"magento_product_size_scale_with_sizeguide"* — Bảng size HTML từ web.
