Documentation

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à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 (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đ)
Business Value
Hàng mới về (+20đ). Bán chạy (+10đ)
Availability
Đủ > 4 sizes (+15đ). 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)