Hệ thống sinh mô tả sản phẩm bằng AI cho Canifa — từ Sheets đến Chatbot. Tài liệu này giải thích tại sao pipeline chia làm 2 giai đoạn AI riêng biệt, cách mỗi endpoint hoạt động, và cách tích hợp toàn bộ luồng.
Team Ecom/Thiết kế tạo danh sách SP mới: Mã SP, Link ảnh, Tên SP, Chất liệu, Form, Tính năng. Tại bước này chưa có mô tả marketing nào — đây là dữ liệu thô từ nhà sản xuất.
Chất liệu, chứng chỉ, thành phần — chỉ có ở đây, trước khi lên web. AI không được phép bịa bất kỳ thông số nào. Dữ liệu từ bước này là mandatory input cho cả 2 lần AI generate.
POST /generate-web-desc
AI Vision nhìn ảnh SP → AI Writer đọc toàn bộ data từ Sheets → sinh mô tả marketing cho khách hàng đọc trên canifa.com. Output ghi ngược về cột "AI Description" trong Sheets.
Team Ecom copy mô tả từ Sheets vào Magento (hoặc qua n8n tự động). SP live trên canifa.com. Khách hàng đọc được mô tả marketing hoàn chỉnh.
SP được ETL vào bảng magento_product_dimension_with_text_embedding. Từ đây các hệ thống nội bộ (chatbot AI, dashboard) có thể truy vấn theo magento_ref_code.
/generate tra StarRocks để lấy ảnh, tên SP, chất liệu, giới tính, dòng SP. Nếu SP chưa sync → API báo lỗi "không tìm thấy sản phẩm".
POST /generate
AI tra DB lấy đầy đủ context → Vision nhìn ảnh → Writer sinh 28 trường structured JSON. Output lưu vào PostgreSQL. AI chatbot đọc data này để tư vấn khách hàng chính xác, đa chiều.
| Đầu ra phục vụ | Khách hàng trên web |
| Input yêu cầu | Ảnh + data từ Sheets |
| Output format | Text marketing (4 trường) |
| Cần StarRocks DB? | ❌ Không |
| Lưu kết quả vào | Google Sheets (qua n8n) |
| Trigger | SP mới, chưa lên web |
| Đầu ra phục vụ | AI chatbot tư vấn |
| Input yêu cầu | Mã SP (tra DB tự động) |
| Output format | 28 trường JSON structured |
| Cần StarRocks DB? | ✅ Bắt buộc |
| Lưu kết quả vào | PostgreSQL |
| Trigger | SP đã live, đã sync DB |
Câu trả lời nằm ở vòng đời của sản phẩm và ai là người đọc output. Hai lần AI phục vụ hai audience hoàn toàn khác nhau, ở hai thời điểm khác nhau trong vòng đời SP.
Hai giai đoạn AI không thể chạy đồng thời vì phụ thuộc vào nhau theo chuỗi tuần tự bắt buộc trong hệ thống.
SP mới chỉ nằm trong Sheets. Không có StarRocks record, không có Magento ID, không có vector embedding. AI lần 2 (/generate) tra StarRocks để lấy data — nhưng record đó chưa tồn tại. Nếu gọi lần 2 lúc này → 404 không tìm thấy SP.
Để sinh 28 trường chính xác (giá, category, related products cho cross-sell...), AI lần 2 cần đọc từ StarRocks với đầy đủ metadata. Dữ liệu này chỉ có sau khi SP đã live trên Magento và đã sync DB — thường cách AI lần 1 vài giờ đến vài ngày.
Khách hàng đọc bằng mắt. AI chatbot đọc bằng code. Hai audience này cần hai format đầu ra căn bản khác nhau.
Khách cần văn xuôi hấp dẫn, có cảm xúc, storytelling. "Form regular fit vừa vặn, tôn dáng mà không gò bó..."
Đặt vào Magento description field → render trực tiếp cho khách đọc trên web.
Chatbot cần data có cấu trúc để tư vấn theo ngữ cảnh: "phối với quần gì?", "dịp nào mặc?", "size gì với chiều cao 1m70?"
28 trường riêng biệt → chatbot query trực tiếp từng trường phù hợp với câu hỏi của khách.
AI lần 1 viết mô tả cho 1 SP cụ thể. AI lần 2 cần hiểu SP trong bối cảnh toàn bộ catalog.
Trường cross_sell trong Ultra Desc gợi ý "Quần Chinos Slim, Giày Loafer Da, Thắt Lưng Da Reversible" — chatbot cần biết Canifa đang bán những sản phẩm đó thật sự. AI lần 2 đọc từ StarRocks catalog nên có thể gợi ý đúng dòng SP thực tế đang có hàng. AI lần 1 ở giai đoạn Sheets không có thông tin này.
Tách thành 2 pipeline độc lập là intentional architecture, không phải over-engineering. Mỗi pipeline có trigger riêng, input source riêng, output destination riêng, và phục vụ một người dùng hoàn toàn khác nhau. Gộp lại thành 1 sẽ tạo ra hard dependency khiến SP không thể lên web cho đến khi toàn bộ AI pipeline (kể cả Ultra Desc phức tạp hơn) chạy xong.
Dành cho team Ecom gọi khi SP mới, chưa cần có trong DB. AI Vision nhìn ảnh + AI Writer đọc data Sheets → sinh mô tả khách hàng đọc trên web.
chat_lieu → AI dùng verbatim, không thêm không bớt. Nếu không có → AI ghi "Theo thông tin nhà sản xuất", không được đoán. Đây là hard rule để tránh thông tin sai lệch cho khách hàng.
Sinh 28 trường structured JSON từ mã SP. SP bắt buộc phải có trong StarRocks DB. Pipeline 3 pha: Vision → Writer → Self-critique.
AI chatbot đọc toàn bộ 28 trường này để trả lời câu hỏi theo từng ngữ cảnh: styling, size, chất liệu, dịp mặc. Mỗi nhóm phục vụ một intent khác nhau.
n8n chạy theo lịch (VD: mỗi 30 phút) hoặc trigger khi Sheets được cập nhật. Đọc tất cả dòng chưa có giá trị trong cột "AI Description".
/generate-web-desc cho từng SPVới mỗi dòng: map cột Sheets → request body → POST → nhận response JSON. Recommend batch size 5-10 SP để tránh timeout.
n8n update cột "AI Description" với mo_ta_web. Ecom review → approve → copy vào Magento. Cột "Số ký tự" có thể tự tính bằng =LEN().