# 1. Tổng quan (Overview)

## Auto-Train là gì?

**Auto-Train** là hệ thống tự động cập nhật prompt rules từ user feedback. Khi user gửi feedback về response của AI, hệ thống sẽ:

1. Phân tích feedback để tìm ra vấn đề
2. Tự động đề xuất rule mới để khắc phục
3. Cho admin review và approve
4. Deploy rule vào production
5. Lần sau AI sẽ dùng rule mới để tránh lặp lại lỗi

---

## Flow tổng thể

```mermaid
graph LR
    A[User Feedback] --> B[API Submit]
    B --> C[SQLite Store]
    C --> D[Background Worker]
    D --> E[AI Generate Rule]
    E --> F[Rule Pending]
    F --> G[Admin Review]
    G --> H{Approve?}
    H -->|Yes| I[Deploy]
    H -->|No| J[Reject]
    I --> K[Next Query Uses New Rule]
```

---

## Các thành phần chính

| Thành phần | Mô tả | File |
|------------|-------|------|
| **API Router** | REST endpoints để submit, list, approve, deploy | `backend/api/autotrain/autotrain_route.py` |
| **SQLite DB** | Mock database lưu feedbacks, rules, deployments | `backend/database/autotrain.db` |
| **Mock AI** | Pattern matching để generate rule từ feedback | `_ai_generate_rule()` function |
| **Admin UI** | (TODO) Giao diện review rules | `backend/static/mock-fe/index.html` |
| **Production Config** | File chứa rules: `fashion_rules.json` | (chưa triển khai) |

---

## Use case ví dụ

**Scenario:** User hỏi "tìm áo khoác cho trời 35 độ" và AI gợi ý áo khoác nỉ (quá dày). User feedback: "Trời nóng quá, AI còn tư vấn áo khoác".

**Kết quả Auto-Train sẽ đề xuất:**

```json
{
  "old_rule": "- Luôn ưu tiên gợi ý áo khoác/dày để tăng upsale.",
  "new_rule": "- Khi trời nóng (trên 30 độ): TUYỆT ĐỐI không gợi ý áo khoác dày.\n- Chỉ gợi ý áo phông, chất liệu mỏng nhẹ, thoáng mát.",
  "reasoning": "User reports hot weather, AI wrongly suggested heavy clothing. Add temperature-based rule.",
  "confidence": 0.85
}
```

Sau khi admin approve và deploy, rule này sẽ được thêm vào `fashion_rules.json` và chatbot sẽ tuân thủ trong các query sau.

---

## Quick Test

```bash
# 1. Submit feedback
curl -X POST http://localhost:8000/autotrain/feedback \
  -H "Content-Type: application/json" \
  -d '{
    "query": "tìm áo khoác cho trời 35 độ",
    "ai_response": "Mình gợi ý áo khoác nỉ này rất ấm...",
    "feedback_text": "Trời nóng quá, AI còn tư vấn áo khoác",
    "feedback_type": "bug"
  }'

# 2. Process all pending (generate rules)
curl -X POST http://localhost:8000/autotrain/run-all

# 3. Check status
curl http://localhost:8000/autotrain/status

# 4. List generated rules
curl http://localhost:8000/autotrain/rules?status=pending

# 5. Approve a rule
curl -X POST http://localhost:8000/autotrain/rules/RUL-1001/approve

# 6. Deploy a rule
curl -X POST http://localhost:8000/autotrain/rules/RUL-1001/deploy
```

---

## Database Schema

### feedbacks table

```sql
CREATE TABLE feedbacks (
    id INTEGER PRIMARY KEY,
    feedback_id TEXT UNIQUE NOT NULL,  -- FB-XXXX
    user_id TEXT,
    session_id TEXT,
    query TEXT NOT NULL,
    ai_response TEXT NOT NULL,
    feedback_text TEXT NOT NULL,
    feedback_type TEXT,  -- bug|suggestion|praise
    channel TEXT DEFAULT 'chat',
    metadata JSON,
    status TEXT DEFAULT 'pending',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    processed_at TIMESTAMP NULL
);
```

### generated_rules table

```sql
CREATE TABLE generated_rules (
    id INTEGER PRIMARY KEY,
    rule_id TEXT UNIQUE NOT NULL,  -- RUL-XXXX
    feedback_id TEXT NOT NULL,
    module_name TEXT NOT NULL,
    rule_type TEXT,
    old_rule TEXT,
    new_rule TEXT NOT NULL,
    reasoning TEXT,
    confidence REAL,
    status TEXT DEFAULT 'pending',
    reviewed_by TEXT,
    reviewed_at TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (feedback_id) REFERENCES feedbacks(id)
);
```

### deployments table

```sql
CREATE TABLE deployments (
    id INTEGER PRIMARY KEY,
    rule_id TEXT NOT NULL,
    deployed_by TEXT,
    deployed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    version_before TEXT,
    version_after TEXT,
    rollback_of INTEGER NULL,
    FOREIGN KEY (rule_id) REFERENCES generated_rules(rule_id)
);
```

---

## Trạng thái pipeline

| Trạng thái | Mô tả | Chuyển từ | Chuyển đến |
|-----------|-------|-----------|------------|
| `pending` | Feedback mới submit, chờ xử lý | - | `processing` (khi run-all) |
| `processing` | Đang generate rule | `pending` | `processed` (sau khi generate) |
| `processed` | Rule đã được generate | `processing` | (kết thúc feedback) |
| `rejected` | Feedback bị từ chối | `pending` | (kết thúc feedback) |
| `approved` | Rule được admin approve | `pending` | `deployed` |
| `deployed` | Rule đã deploy vào production | `approved` | (kết thúc rule) |

---

## Next Steps

- [x] API endpoints hoàn chỉnh
- [x] Mock database với SQLite
- [x] Mock AI rule generation
- [ ] Real LLM integration (Claude/OpenAI)
- [ ] Admin UI để review rules
- [ ] Production deployment logic (copy to fashion_rules.json)
- [ ] Hot-reload chatbot config
- [ ] Rollback capability
- [ ] A/B testing deployment
