# 2. Kiến trúc & Luồng dữ liệu (Data Flow)

Kiến trúc cốt lõi sử dụng `StateGraph` từ LangGraph với 2 node chính. Không sử dụng ReAct loop truyền thống để giảm độ trễ và tránh ảo giác vòng lặp.

```mermaid
sequenceDiagram
    participant U as User
    participant C as Classifier Node
    participant T as Tool Registry (RAG/DB)
    participant S as Stylist Node
    participant DB as StarRocks / Postgres

    U->>C: Nhập câu hỏi (Query)
    Note over C: Tiêm History (10 turns) + Insight cũ
    C->>C: Sinh Structured Output (Tool + Args)
    alt Không cần gọi Tool (Early Exit)
        C-->>U: AI Response (Chào hỏi / Tâm sự)
    else Cần gọi Tool
        C->>T: Execute Tool (ví dụ: lead_search_tool)
        T->>DB: Query DB / Vector Search
        DB-->>T: JSON Kết quả
        T-->>S: Tool Result + Context
        Note over S: Tiêm STYLIST_SYSTEM_PROMPT
        S->>S: Sinh AI Response + InsightJSON mới
        S-->>U: Trả lời kèm SP
    end
```

**Các bước cụ thể:**
1. **Tiếp nhận:** State `LeadStageState` lưu trữ `messages`, `user_insight`, `tool_result`, và `diagnostics`.
2. **Định tuyến (Classifier):** AI quyết định gọi công cụ như `lead_search_tool`, `canifa_knowledge_search` (truy xuất RAG), hoặc `check_is_stock`.
3. **Thực thi Công cụ:** Python tool chạy trực tiếp. Nếu tìm kiến thức (RAG), tool query StarRocks qua hàm `approx_cosine_similarity`.
4. **Tổng hợp (Stylist):** Đọc toàn bộ tool result, formatting lại sản phẩm và đưa ra câu trả lời cuối, đồng thời trích xuất `InsightJSON` lưu vào state.