# Sơ đồ hoạt động

Cách chatbot AI xử lý khi khách hàng gửi tin nhắn — từ lúc nhận câu hỏi đến khi trả lời

100%
Khách gửi tin nhắn
Tiếp nhận
Máy chủ
Đã hỏi trước?
Bộ nhớ tạm
Chưa → tiếp
Nhớ lại khách
Lịch sử + Hồ sơ
VÒNG LẶP AI
AI suy nghĩ
Cần tra?
Cần dữ liệu
Tra
Ghi
↩ Lặp
Hiển thị dần
Streaming
Ghi nhớ ngầm
4 tác vụ nền
Hoàn thành

#### 📥 Đầu vào — Nhận tin nhắn từ khách

Khách gửi tin nhắn qua cửa sổ chat trên web hoặc app. Hệ thống nhận được cả chữ lẫn ảnh — ví dụ khách chụp ảnh một chiếc áo và hỏi "có sản phẩm nào giống thế này không?", AI sẽ nhận diện được.

Hệ thống nhận diện khách bằng 2 cách song song:

• Khách đã đăng nhập → biết chính xác là ai (theo mã khách hàng)
• Khách vãng lai → nhận diện qua thiết bị đang dùng

💡 Tại sao nhận diện 2 cách?
Nếu chỉ dùng tài khoản → khách chưa đăng nhập không chat được. Nếu chỉ dùng thiết bị → đổi điện thoại là mất hết lịch sử. Làm 2 cách thì khách vãng lai vẫn chat bình thường, còn khách đăng nhập thì lịch sử đi theo tài khoản.

#### 🌐 Máy chủ tiếp nhận — Xử lý song song

Tin nhắn của khách được gửi đến máy chủ. Máy chủ chạy theo mô hình không chờ đợi: khi đang chờ AI suy nghĩ cho khách A (mất 2-20 giây), server vẫn tiếp tục nhận tin của khách B, C, D... không bị tắc nghẽn.

Máy chủ chạy 4 tiến trình song song, mỗi tiến trình phục vụ hàng trăm khách cùng lúc.

💡 Tại sao quan trọng?
Vì AI mất 2-25 giây để suy nghĩ. Nếu máy chủ chờ xong mới phục vụ khách tiếp → 4 tiến trình chỉ serve 4 khách cùng lúc. Với mô hình song song → 4 tiến trình serve hàng trăm khách vì trong lúc chờ AI trả lời, máy chủ rảnh để nhận khách khác.

#### ⚡ Kiểm tra câu hỏi trùng Tiết kiệm 30-40% chi phí

Trước khi gọi AI (tốn tiền + mất 15-20 giây), hệ thống kiểm tra: "Câu hỏi này đã có ai hỏi trước đó chưa?"

• Đã từng hỏi rồi → Trả câu trả lời cũ ngay lập tức, không cần gọi AI lại
• Chưa từng hỏi → Tiếp tục gọi AI xử lý bình thường

Câu trả lời cũ được lưu trong 1 giờ. Những câu hỏi mang tính cá nhân (VD: "đơn hàng của tôi đâu?") sẽ không lưu vì mỗi khách khác nhau.

💡 Tại sao cần bước này?
Nhiều khách hay hỏi giống nhau: "có khuyến mãi gì?", "áo polo nam?", "chính sách đổi trả?". Thống kê cho thấy ~35% câu hỏi là trùng lặp. Mỗi lần gọi AI tốn tiền + mất 15-20 giây. Nhớ lại câu trả lời cũ giúp tiết kiệm 30-40% chi phí và khách được trả lời nhanh gần như ngay lập tức.

#### 💾 Nhớ lại khách hàng là ai

Trước khi AI trả lời, hệ thống tìm lại 2 loại thông tin về khách:

1. Trí nhớ ngắn hạn — 10 tin nhắn gần nhất trong cuộc hội thoại hiện tại. Giúp AI nhớ đang nói chuyện về chủ đề gì (VD: khách đang hỏi về áo khoác → AI không nhảy sang đề xuất áo polo).

2. Trí nhớ dài hạn (Hồ sơ khách) — Bản tóm tắt ngắn gọn: giới tính, size hay mặc, phong cách yêu thích, sản phẩm đã xem. Được AI tự động cập nhật sau mỗi cuộc hội thoại.

Cả hai được đưa cho AI trước khi suy nghĩ, giúp AI tư vấn cá nhân hóa — giống nhân viên bán hàng nhớ khách quen.

💡 Tại sao tách ngắn hạn vs dài hạn?
Ngắn hạn giúp AI nhớ cuộc chat hiện tại. Dài hạn giúp AI nhớ khách xuyên suốt nhiều lần chat mà không cần lưu toàn bộ lịch sử (rất tốn kém). Nếu chỉ có ngắn hạn → mỗi lần quay lại AI "quên hết". Nếu lưu hết lịch sử → quá dài, AI xử lý không nổi.

#### 🤖 AI suy nghĩ — Vòng lặp Agent ⭐ Trái tim hệ thống

Đây là phần quan trọng nhất của toàn bộ hệ thống. AI đóng vai trò một tư vấn viên thông minh — tự đọc câu hỏi, tự phân tích ý định, tự quyết định cần tra gì, và tra bao nhiêu lần cho đến khi đủ thông tin trả lời.

🧠 Tại sao cần AI làm việc này? Tư vấn viên con người đắt, không scale — và catalog Canifa có hàng nghìn sản phẩm, không ai nhớ hết. Bot AI đứng trước, tự phân tích câu hỏi và tra cứu thay.

📸 Ví dụ 1 sản phẩm trên web Canifa. Nhìn kỹ: mô tả sản phẩm chỉ ghi "Áo phông nữ" — không có thông tin nào về phong cách, chất liệu, dáng, hay dịp mặc.

#### ⚠️ Thực trạng: Data sản phẩm nghèo

Mô tả sản phẩm trong DB Canifa chỉ ghi tên ngắn gọn ("Áo phông nữ", "Quần soóc nam"). Không có phong cách, chất liệu, dáng, dịp mặc. Bot bắt buộc phải dùng các trường có sẵn (tên, màu, giá, giới tính) để sinh query.

🚀 Cơ hội: Bổ sung metadata
Nếu thêm: phong cách (casual, công sở), chất liệu (cotton, lụa), dáng (slim, oversize), dịp mặc (hẹn hò, đi biển) → bot lọc chính xác thay vì đoán. Data càng giàu → Bot càng thông minh.

#### 🔍 Hybrid Search — 2 cách tìm cùng lúc

Bot dùng 2 kỹ thuật song song, mỗi cách bù yếu điểm của cách kia:

Kỹ thuật | Cách hoạt động | ✅ Mạnh | ❌ Yếu
--- | --- | --- | ---
Semantic Search | AI viết mô tả → chuyển thành vector → so sánh với tất cả SP → lấy top 200 giống nhất | Hiểu ý nghĩa mơ hồ: "xinh xinh", "đi chơi" | Có thể sai màu, sai giá
SQL Filter | AI điền filter → `WHERE color='trắng' AND gender='men' AND price≤500K` | Lọc chính xác 100% màu/giá/giới tính | Không hiểu "thanh lịch", "tối giản"

→ Kết hợp: Semantic tìm top 200 giống ý → SQL lọc chính xác (đúng màu, giá, giới tính) → Kết quả vừa đúng ý vừa chính xác

#### 📋 Ví dụ: AI điền query như nào?

Khách: "Có áo phông nam trắng regular không?"
📝 description: "Áo phông regular fit" product_name: Áo phông gender: men color: trắng
Khách: "Set đồ công sở nữ" → AI tách 2 query song song
Q1: Áo công sở women Smart Casual
Q2: Quần công sở women Smart Casual
Khách: "Em muốn gì đó xinh xinh đi chơi cuối tuần" (mơ hồ)
📝 description: "đi chơi thoải mái trẻ trung" style: Dynamic

📌 Khách nói tự nhiên, viết tắt, dùng từ đồng nghĩa ("áo thun"→"áo phông", "quần bò"→"quần jean") — AI vẫn hiểu và tự điền query chính xác.

#### ⚙️ Sau khi phân tích xong, AI làm gì tiếp?

AI liên tục lặp qua 3 bước Suy nghĩ → Quyết định → Hành động cho đến khi đủ thông tin:

Bước 1: Đọc + Phân tích — AI đọc câu hỏi, kết hợp với trí nhớ ngắn hạn + dài hạn, phân tích ra các tiêu chí tìm kiếm (như ví dụ trên).

Bước 2: Quyết định — AI tự hỏi: "Cần tra thêm thông tin gì không?"
• Cần → Gọi công cụ tra cứu phù hợp
• Đủ rồi → Viết câu trả lời cho khách

Bước 3: Tra cứu — AI có 6 "công cụ" để tra:

🔍
Tìm sản phẩm Tên, loại, màu, giá
📚
Kiến thức Canifa Chính sách, đổi trả, bảo hành
🎁
Khuyến mãi Giảm giá, voucher hiện có
📦
Tồn kho Còn hàng không, size nào có
🏪
Cửa hàng Chi nhánh gần nhất
📋
Thu thập liên hệ Ghi lại SĐT, tên khách

Lặp lại nếu cần — VD: Khách hỏi "áo polo xanh size L" → AI phân tích (loại=polo, màu=xanh, size=L) → gọi tìm sản phẩm → check tồn kho → hết hàng size L → tự tìm sản phẩm thay thế → check tồn kho lần 2. Trung bình 2-3 lần tra/câu hỏi, tối đa 5 vòng.

💡 Tại sao để AI tự quyết thay vì lập trình sẵn?
Nếu lập trình sẵn kiểu A→B→C, phải dự đoán trước mọi kịch bản — rất khó và cứng nhắc. Catalog Canifa có hàng nghìn sản phẩm, khách hỏi đủ kiểu: hỏi theo màu, theo phong cách, theo dịp, theo giá, kết hợp nhiều tiêu chí... Không thể lập trình hết. Để AI tự phân tích + tự quyết định tra gì → linh hoạt hơn nhiều, giống nhân viên tư vấn giỏi tự suy nghĩ chứ không theo script.

#### 📡 Hiển thị câu trả lời dần dần (Streaming)

Thay vì đợi AI viết xong toàn bộ rồi mới hiện, câu trả lời được hiện ra từng chữ — giống cách ChatGPT hoạt động.

Khách thấy chữ bắt đầu xuất hiện sau 2-3 giây. Ngoài text, hệ thống cũng gửi kèm card sản phẩm (hình ảnh, giá, link mua, tồn kho) nếu AI gợi ý sản phẩm.

💡 Tại sao không đợi xong mới hiện?
Vì AI cần 15-25 giây để viết xong toàn bộ. Nếu bắt khách đợi 25 giây mới hiện → khách tưởng bị lỗi. Hiện dần dần giúp khách bắt đầu đọc ngay sau 2-3 giây — cảm giác chờ đợi giảm ~85% dù tổng thời gian không đổi.

#### ⚙️ Ghi nhớ và xử lý ngầm Chạy sau khi khách đã nhận câu trả lời

Sau khi khách đã nhận được câu trả lời, hệ thống âm thầm làm thêm 4 việc (song song, không bắt khách đợi):

1. 💾 Lưu lịch sử — Ghi lại cuộc hội thoại để lần sau AI nhớ (trí nhớ ngắn hạn ở Step 4)

2. 🧠 Cập nhật hồ sơ khách — AI dùng riêng 1 lần suy nghĩ để tóm tắt thông tin mới về khách (size, sở thích...) → bổ sung vào trí nhớ dài hạn

3. ⚡ Lưu câu trả lời — Nhớ lại để nếu khách khác hỏi giống thì trả nhanh hơn (chính là bộ nhớ tạm ở Step 3)

4. 📊 Ghi log theo dõi — Ghi lại thời gian trả lời, chi phí, công cụ đã dùng → team dùng để review chất lượng

💡 Tại sao chạy ngầm?
4 việc này mất thêm 3-8 giây. Nếu bắt khách đợi → trải nghiệm kém vì khách đã nhận câu trả lời rồi mà vẫn phải chờ. Nên chạy ngầm: khách nhận xong → xong việc với khách → server tự ghi nhớ phía sau.

#### ✅ Khách nhận câu trả lời

Khách nhận câu trả lời dạng text có định dạng đẹp, kèm card sản phẩm nếu AI gợi ý: ảnh, tên, giá, link mua, trạng thái còn hàng (thông tin tồn kho được lấy lúc AI tra cứu ở Step 5).

Mỗi câu trả lời kèm nút 👍 👎 để khách đánh giá → team dùng để review và cải thiện chất lượng.

## 🛠️ 6 công cụ — Chia 2 nhóm theo cách lưu nhớ

#### Nhóm tra cứu vs Nhóm ghi nhận

Nhóm tra cứu (5 công cụ) — Tìm sản phẩm, khuyến mãi, tồn kho, cửa hàng, kiến thức. Kết quả được nhớ lại trong 1 giờ: cùng câu "áo polo nam" hỏi lần 2 sẽ trả kết quả cũ thay vì tra lại từ đầu.

Nhóm ghi nhận (1 công cụ) — Ghi lại SĐT/tên khách khi khách muốn được tư vấn viên liên hệ. Mỗi lần ghi là thông tin mới nên không nhớ lại.

💡 Tại sao có 2 lớp nhớ (Step 3 + ở đây)?
Step 3 nhớ toàn bộ câu trả lời cuối cùng — chỉ dùng được khi câu hỏi gần giống hệt. Ở đây nhớ kết quả từng công cụ riêng — dùng được khi AI gọi cùng công cụ dù câu hỏi khác nhau. VD: "áo polo" và "áo polo size L" → câu trả lời khác nhau (không dùng được Step 3), nhưng phần tìm sản phẩm giống nhau (dùng lại được). Hai lớp nhớ bổ sung nhau.