Architecture Design

Outfit Worker Pipeline (A-Z)

Giải quyết bài toán "1 Áo Polo có tới 100 Quần Khaki phù hợp" bằng thuật toán Hard-Filter & Soft-Scoring thay vì lưu trữ toàn bộ.

Bài toán (The Problem)

Kho hàng có hàng ngàn sản phẩm. Nếu theo Rule số 5 (Áo Polo -> Cần Quần Khaki), Magento có thể trả về 150 mẫu quần Khaki nam khác nhau. Nếu worker lưu cả 150 mẫu này cho 1 chiếc áo Polo:

  • Bảng DB sẽ phình to khủng khiếp (Blowing up the database).
  • Khách hàng bị ngợp, gợi ý thiếu tính cá nhân hóa và độ chính xác (Ngẫu nhiên hiện 5 quần Khaki xấu nhất).

Worker Flow & Scoring Logic

1

Trigger & Load Rule

CRON / EVENT

Worker nhận diện sản phẩm Anchor mới hoặc quét định kỳ. Đọc bảng `ai_outfit_rules` để lấy công thức.

// Input
Anchor: 8TS23S001 (Áo Polo Be)
Rule Loaded: ID 5 (Polo -> Khaki | Neutral+Dark)
2

Hard-Filtering (Lọc Cứng)

SQL QUERY

Query trực tiếp vào CSDL sản phẩm (`magento_product...`) để lấy TẤT CẢ sản phẩm thỏa mãn điều kiện CƠ BẢN của Rule.

  • Category = 'Quần Khaki'
  • Gender = 'Male'
  • Stock > 0
Kết quả ban đầu: 150 Sản phẩm
3

Scoring System (Chấm Điểm & Xếp Hạng)

PYTHON LOGIC

Đây là trái tim của Worker. Chấm điểm 150 sản phẩm dựa trên các tiêu chí "Mềm" (Soft Rules) và Business Logic.

Color Harmony
Áo Be + Quần Xanh Than/Đen (+40đ). Áo Be + Quần Be (+10đ).
Business Value
Hàng mới về - New Season (+20đ). Bán chạy (+10đ).
Availability
Đủ > 4 sizes (+15đ). Chỉ còn 1 size (-20đ).
Action: Sắp xếp (Sort by Score DESC)
4

Limiting & Persistence (Lưu Trữ)

SQL INSERT

Chỉ lấy TOP 3 - 5 sản phẩm có điểm số cao nhất để ghi vào DB.

Rank Match Code Score AI Reason (Generated)
#1 8BK23S005 (Navy) 85.5 Màu Xanh Than tương phản hoàn hảo với màu Be. Đủ size.
#2 8BK23S012 (Đen) 75.0 Quần Khaki đen cơ bản, dễ mặc, hợp môi trường công sở.
#3 8BK23S001 (Xám) 60.0 Tone xám trung tính, an toàn và thanh lịch.

Khi Chatbot / API gọi (The Runtime)

Lúc khách hàng xem áo Polo 8TS23S001, Chatbot KHÔNG CẦN CHẠY AI MATCHING nữa. Nó chỉ cần query:

SELECT match_product_code, match_role, ai_reason 
FROM pg__dashboard_canifa__ai_outfit_product_matches 
WHERE anchor_product_code = '8TS23S001' 
ORDER BY id ASC; -- Đã được Worker sort sẵn lúc insert
Độ trễ: < 10ms (Không cần gọi LLM, hoàn toàn là Database Lookup).