# 2. Chi tiết luồng Dual-Agent (Ver 2)

Hệ thống sử dụng mô hình Planner → Tool → Responder để đảm bảo tính nhất quán và hiệu suất cao.

## Sơ đồ chi tiết luồng dữ liệu

![Dual-Agent Architecture](data/29-new-agent_architect/agent_architecture.svg)

---

## Các giai đoạn xử lý (Phân rã)

### 1. Agent 1: Classifier (The Brain)
Nhiệm vụ chính là chuyển đổi ngôn ngữ tự nhiên của người dùng thành các tham số kỹ thuật.
*   **Input:** Câu hỏi của khách hàng (VD: "Tìm cho mình set đồ đi tiệc sang trọng").
*   **Logic:** Phân tích intent → trích xuất tags (Đi tiệc, Sang trọng) → xác định giới tính/độ tuổi.
*   **Output:** Một cấu trúc JSON chứa đầy đủ các filter cần thiết để gọi Tool.

### 2. Tool Layer (The Hands)
Hệ thống lấy JSON từ Agent 1 để "đi chợ" dữ liệu:
*   **Lead Search:** Tìm kiếm các SKU trong kho phù hợp với filter.
*   **Stock Check:** Lọc bỏ những món đã hết hàng.
*   **Styling Engine:** Tìm kiếm các món phối (match) tương ứng để tạo thành set đồ hoàn chỉnh.

### 3. Agent 2: Stylist (The Voice)
Nhiệm vụ cuối cùng là biến đống dữ liệu thô thành một trải nghiệm tư vấn đẳng cấp.
*   **Context:** Nhận đầy đủ lịch sử chat + Ý định của khách + Danh sách sản phẩm thực tế.
*   **Logic:** Áp dụng Canifa Persona (Thân thiện, am hiểu thời trang, tinh tế).
*   **Output:** Câu trả lời cuối cùng giúp khách hàng chốt đơn.

---

## Tại sao thiết kế này "Đẹp"?

1.  **Tính Predictable:** Chúng ta luôn biết Agent 1 sẽ gọi gì. Nếu nó gọi sai, ta chỉ cần sửa schema hoặc prompt của Agent 1 mà không lo làm hỏng giọng điệu của bot.
2.  **Tính Scalable:** Muốn thêm Tool mới (ví dụ: Tool gợi ý size theo chiều cao cân nặng)? Chỉ cần cập nhật Agent 1 để nó biết khi nào cần dùng Tool đó.
3.  **Tính Resilient:** Nếu Tool gặp lỗi hoặc không tìm thấy sản phẩm, Agent 2 vẫn có đủ ngữ cảnh để xin lỗi khách một cách khéo léo hoặc gợi ý hướng khác.
