# Tự Động Test và Train Prompt Lead Bot & Hiển thị Hết Hàng (Vòng lặp Vô Tận)

## 🧠 Ngữ cảnh & Triết lý thiết kế (Cho AI đọc hiểu)
**Tại sao phải làm thế này?**
Thay vì để con người phải ngồi kiểm tra bằng tay từng log lỗi của Lead Bot và lọ mọ copy-paste để sửa System Prompt, ta sẽ tận dụng triết để **Cơ chế Sub-Agent của Claude** (Dựa theo chuẩn Evaluator-Optimizer pattern của Anthropic).
Hệ thống sẽ chạy một **vòng lặp vô tận (infinite loop)**: Test -> Chấm Điểm -> Đề xuất sửa đổi (Prompt/Thuật toán) -> Áp dụng -> Test lại. Nó chỉ dừng lại khi điểm Pass Rate đạt 100%.

**Sự khác biệt của Sub-Agent Pattern (Claude):**
Chúng ta không dùng 1 Prompt nhồi nhét. Chúng ta tách việc ra làm 2 Sub-Agents có Prompt chuyên biệt.
1. **Sub-Agent 1 (The Evaluator - Người chấm thi):** Làm nhiệm vụ cầm bộ `test_cases.json`, đối chiếu với kết quả Bot trả về, chấm điểm cực kỳ khắt khe. Trả về báo cáo lỗi chi tiết.
2. **Sub-Agent 2 (The Optimizer - Coder/Prompt Engineer):** Chỉ đọc báo cáo lỗi của Evaluator, lấy file nguồn (như `prompts.py` hoặc `lead_search_tool.py`) ra và tự đưa ra quyết định: *Sửa System Prompt hay Sửa thuật toán lấy Data?*. Sau đó tự động overwrite file.

---

## 📋 THIẾT KẾ CHI TIẾT CÁC SUB-AGENTS (CÂN LÀM)

### 1. The Evaluator Sub-Agent (Role: Khám bệnh)
**Nhiệm vụ:** Chạy 20 câu test.
**System Prompt của Evaluator:**
```text
Bạn là một AI Evaluator tối cao chuyên đánh giá chất lượng của một Fashion Retail Chatbot (Lead Bot).
Nhiệm vụ của bạn là lấy đầu vào từ User, so sánh với đầu ra của Bot và đối chiếu với Thực tế Data (Stock, Product Line).
Tiêu chí chấm:
1. Context Match (0-10): Bot có hiểu đúng bối cảnh (Ví dụ: "Trời mưa" phải gợi ý áo gió/chống nước, "Đám cưới" phải gợi ý đồ formal/lịch sự).
2. Data Accuracy (0-10): Bot có gợi ý sản phẩm hết hàng mà KHÔNG báo trước cho khách không?
3. Tool Usage (Pass/Fail): Bot có điền đúng các biến số vào Search Tool không?

Nếu phát hiện lỗi, hãy chỉ định rõ:
- Lỗi do System Prompt (Thiếu instruction ngữ cảnh).
- Lỗi do Data/Algorithm (Search tool thiếu cột stock, lấy nhầm category).
Trả về rập khuôn định dạng JSON chứa Feedback và Danh sách các case bị Fail.
```

### 2. The Optimizer Sub-Agent (Role: Bốc thuốc & Phẫu thuật)
**Nhiệm vụ:** Nhận JSON Feedback bên trên. Đọc code hiện hành. Ghi đè file.
**System Prompt của Optimizer:**
```text
Bạn là AI Optimizer. Bạn nhận được một bản án (Feedback) từ Evaluator chỉ ra rằng Lead Bot hiện tại đang hoạt động sai ở một số test case.
Trong tay bạn là mã nguồn hiện tại của System Prompt (`prompts.py`) và Search Algorithm (`lead_search_tool.py`).
Nhiệm vụ:
- Nếu lỗi là do Bot tư duy sai ngữ cảnh (vd: không biết trời mưa phải mặc gì): Hãy Viết lại (Rewrite) file `prompts.py`. Cập nhật thêm instruction, rule để che chắn lỗi này.
- Nếu lỗi là do Data thiếu (vd: Gợi ý sản phẩm hết hàng mà không biết): Hãy đề xuất việc thay đổi file thuật toán SQL `lead_search_tool.py` (vd: Join thêm `stock_quantity` và tự hardcode gắn `[TẠM HẾT HÀNG]` vào tool message) để Bot biết.

BẮT BUỘC trả về nội dung code hoàn chỉnh để tôi tự động ghi đè file. Không được làm hỏng các logic đang hoạt động tốt.
```

---

## 🚀 KẾ HOẠCH HÀNH ĐỘNG (ACTION ITEMS)

- [ ] Nghiên cứu và Cập nhật SQLite Mock (`canifa_ai_dump.sqlite`):
  - [Only SQLite] Kiểm tra xem cần chèn cột `stock_quantity` vào SQLite (bảng mock của Postgres / StarRocks) bằng lệnh SQL.
  - Cập nhật một số SKU ngẫu nhiên thành `0` để có sản phẩm hiển thị trạng thái "Hết hàng". Tuyệt đối chỉ thao tác với DB trong `backend/database`.
- [ ] Chỉnh sửa Thuật Toán Vòng Lặp (`lead_search_tool.py`):
  - Nếu `stock_quantity = 0`, gắn cứng nội dung `(Lưu ý: Mẫu này hiện TẠM HẾT HÀNG)` vào ngay lập tức trong dữ liệu list string trả về cho Prompt/AI.
- [ ] Xây dựng Loop Chạy Vô Tận (Infinite Loop Script):
  - Khởi tạo script `auto_train_lead_prompt.py`. Code thuật toán: `while true: run Evaluator -> if pass 100% break -> else run Optimizer -> overwrite files -> reload server -> sleep(3) -> continue`.
- [ ] Tích hợp Entrypoint Script:
  - Cập nhật lại `D:\cnf\chatbot-canifa-feedback\backend\plan\run_train_lead.ps1` có hỗ trợ logging vòng lặp rõ ràng.
