# Cơ chế hoạt động của Prompt Optimizer

Prompt Optimizer là một công cụ mạnh mẽ sử dụng trí tuệ nhân tạo (AI) để tự động đánh giá và cải thiện System Prompt của chatbot dựa trên kết quả chạy test thực tế. Thay vì đoán mò lý do bot trả lời sai, hệ thống này sử dụng quy trình **Test-Driven Prompt Engineering (TDPE)** gồm 3 bước: chạy thử nghiệm, đánh giá bằng AI, và tự động tối ưu hóa.

## Quy trình 3 bước (Logic Flow)

Quy trình hoạt động được mô tả chi tiết qua biểu đồ Sequence Diagram dưới đây:

```mermaid
sequenceDiagram
    autonumber
    participant UI as Giao diện Web
    participant PO as Prompt Optimizer API
    participant Chatbot as Chatbot API (Remote)
    participant Data as Internal Data APIs
    participant Judge as AI Judge (Codex / Flash-Lite)
    participant OptLLM as AI Optimizer (Gemini)

    Note over UI, OptLLM: Bước 1: Chạy Test Case (Run Test)
    UI->>PO: POST /run-test (prompt, test_input)
    PO->>Chatbot: POST /api/agent/chat-dev
    Chatbot-->>PO: AI response & Product IDs
    PO-->>UI: Kết quả (output, product_ids)

    Note over UI, OptLLM: Bước 2: Đánh giá bằng AI (Judge)
    UI->>PO: POST /judge (test_input, chatbot_output, product_ids...)
    PO->>Data: Lấy dữ liệu thực tế (Search & Stock API)
    Data-->>PO: Product specs & stock status
    PO->>Judge: Phân tích chéo (Câu hỏi + Trả lời + Dữ liệu thật)
    Judge-->>PO: Điểm 5 tiêu chí & Giải thích
    PO-->>UI: Kết quả Judge (metrics, tổng điểm, issues)

    Note over UI, OptLLM: Bước 3: Tối ưu Prompt (Optimize)
    UI->>PO: POST /optimize (current_prompt, test_results)
    PO->>OptLLM: Phân tích ca Test Pass/Fail
    OptLLM-->>PO: Phân tích, các thay đổi đề xuất, New Prompt
    PO-->>UI: Prompt mới (new_prompt) & Phân tích
```

## Chi tiết từng giai đoạn (Dựa trên Source Code)

### Bước 1: Run Test (Chạy thử nghiệm)
Hệ thống gọi API `run-test` để gửi câu hỏi (`test_input`) tới Chatbot Remote API (`/api/agent/chat-dev`). Quá trình này mô phỏng trải nghiệm thực tế của người dùng.
- Trả về câu trả lời của AI (`output`).
- Trích xuất danh sách các mã sản phẩm (`product_ids`) mà bot đã nhắc đến trong câu trả lời.

### Bước 2: AI Judge (Đánh giá chéo)
Sử dụng một mô hình LLM độc lập (Codex / Gemini Flash-Lite) đóng vai trò làm Giám khảo (Judge). Điểm đặc biệt của quy trình này là **xác minh sự thật (Fact-Checking)**:
1. Hệ thống ngầm gọi Internal APIs (`/api/products/list` và `/api/stock/check`) để lấy dữ liệu thực tế của sản phẩm mà bot nhắc đến.
2. Cung cấp cho AI Judge: Câu hỏi, Câu trả lời của bot, Dữ liệu thật từ database, và các Từ khóa kỳ vọng.
3. Chấm điểm từ `0.0` đến `1.0` trên 5 tiêu chí:
   - **factual**: Thông tin có chính xác với dữ liệu thật không? (Kiểm tra chéo với API nội bộ).
   - **relevance**: Có trả lời đúng trọng tâm câu hỏi không?
   - **tone**: Giọng điệu có chuẩn tư vấn viên thời trang Việt Nam không (sử dụng "dạ", "ạ", "bạn", "nhé")?
   - **helpfulness**: Có đưa ra lời khuyên hữu ích hay lựa chọn thay thế không?
   - **hallucination**: Bot có bịa đặt thông tin sản phẩm/giá/khuyến mãi không?

### Bước 3: Optimize (Tối ưu tự động)
Dựa trên điểm số từ bước Judge, các bài test được chia thành **Failing** (điểm < 0.7) và **Passing** (điểm >= 0.7).
Hệ thống cung cấp toàn bộ lịch sử lỗi, lý do bị trừ điểm cho mô hình AI Optimizer (Gemini).
Mô hình sẽ tự động:
- Phân tích ngắn gọn nguyên nhân sai sót từ những test case bị fail.
- Đề xuất danh sách các thay đổi (`changes`).
- Viết lại toàn bộ System Prompt (`new_prompt`) sao cho khắc phục được lỗi của nhóm Failing mà không làm hỏng nhóm Passing. Prompt mới sẽ tự động được bổ sung các quy tắc chống hallucination và giữ nguyên hướng dẫn về tone giọng (thân thiện, chuyên nghiệp).
