Kiến trúc Lead Stage AI được thiết kế theo dạng **Micro-modular pipeline** dựa trên LangGraph, tách biệt hoàn toàn giữa việc *phân loại ý định* (Classifier) và *sinh ngôn ngữ* (Stylist).

<div class="mermaid">
graph TD
    %% Styling
    classDef user fill:#a5d8ff,stroke:#4a9eed,stroke-width:2px,color:#000,rx:8,ry:8
    classDef classifier fill:#d0bfff,stroke:#8b5cf6,stroke-width:2px,color:#000,rx:8,ry:8
    classDef tools fill:#fff3bf,stroke:#f59e0b,stroke-width:2px,color:#000,rx:8,ry:8
    classDef stylist fill:#b2f2bb,stroke:#22c55e,stroke-width:2px,color:#000,rx:8,ry:8

    U[👤 User Chat]:::user
    C[🧠 Classifier Agent<br/>(Fast Router)]:::classifier
    T[🔍 Search Tools<br/>(Meilisearch / DB)]:::tools
    S[👗 Stylist Agent<br/>(Combo Maker)]:::stylist

    U -- "1. Gửi tin nhắn" --> C
    C -- "2. Rút trích tham số<br/>(Gọi Tool)" --> T
    T -- "3. Trả về Danh sách<br/>sản phẩm thô" --> S
    S -- "4. Tổng hợp &<br/>Gợi ý Combo" --> U
</div>

### Thiết kế hai tầng (Two-Stage Agent)
Thay vì dùng một Agent to (monolith) để làm mọi thứ, hệ thống chia làm 2 AI:
1. **AI #1 (Classifier + Tool Router):** Chuyên trách đọc câu hỏi của user, lịch sử chat (`user_insight`, `chat_history_summary`) để quyết định xem user đang ở Stage nào (Awareness, Interest, Consideration, Decision, Retention) và gọi Tool tương ứng (ví dụ: `lead search tool`, `check is stock`).
2. **AI #2 (Stylist):** Nhận kết quả từ Tool và kết luận của Classifier, tập trung hoàn toàn vào việc sinh ra câu trả lời mềm mỏng, đúng `tone_directive` và đúng nghiệp vụ chốt sale.

### Tracing & Observability
Toàn bộ quá trình được trace qua **Langfuse** thông qua controller `lead_stage_chat_controller`. Điều này cho phép monitoring chi tiết thời gian thực thi của từng node (`classifier_ms`, `stylist_ms`, `total_ms`).

### Quản lý phiên (Identity & Persistence)
Dùng `device_id` (persistent từ localStorage hoặc middleware) hoặc `user_id` (nếu đã login) để duy trì lịch sử chat qua Postgres. Điều này giúp ngăn chặn các vấn đề bị reset session như đối với memory-cache.