Khả năng deflect của agent chỉ tốt bằng knowledge base của nó. Một KB lộn xộn sẽ khiến bot trả lời sai hoặc bịa. Bài này bạn xây KB theo kiểu RAG (Retrieval-Augmented Generation): agent tìm đoạn liên quan rồi trả lời dựa trên đoạn đó, kèm nguồn.
Nguyên tắc vàng: Grounding
Agent chỉ được trả lời bằng thông tin lấy ra được từ KB. Nếu KB không chứa câu trả lời, agent phải nói "tôi chưa có thông tin này" và chuyển sang route — TUYỆT ĐỐI không tự bịa. Đây gọi là grounding (neo câu trả lời vào nguồn).
Chuẩn bị nội dung KB
- Gom top 20 câu hỏi lặp lại từ Bài 1.
- Viết mỗi câu hỏi thành một bài KB ngắn, cấu trúc: Tiêu đề (dạng câu hỏi) → Trả lời trực tiếp → Các bước → Ngoại lệ.
- Một bài = một chủ đề. Đừng nhồi "chính sách đổi trả + hoàn tiền + bảo hành" vào một bài dài.
- Thêm metadata: danh mục, ngày cập nhật, đường link nguồn chính thức.
---
category: order
updated: 2026-06-01
---
# Làm sao để theo dõi đơn hàng của tôi?
Bạn có thể theo dõi đơn tại mục "Đơn hàng của tôi" sau khi đăng nhập.
Các bước:
1. Đăng nhập vào tài khoản.
2. Vào "Đơn hàng của tôi".
3. Bấm vào đơn cần xem để thấy trạng thái vận chuyển.
Ngoại lệ: Đơn giao qua đối tác ngoài (Grab, Ahamove) sẽ hiển thị mã theo dõi riêng, tra tại app của đối tác.
Chunking & Embedding
Chia nhỏ (chunk) và tạo vector để tìm kiếm theo ngữ nghĩa:
for article in kb_articles:
chunks = split_by_heading(article, max_tokens=300) # cắt theo heading
for chunk in chunks:
vector = embed(chunk.text)
vector_db.insert(
text=chunk.text,
embedding=vector,
metadata={"category": chunk.category,
"source": chunk.source_url,
"updated": chunk.updated}
)
Hàm search_kb sẽ embed câu hỏi của khách, tìm top-k chunk gần nhất, và trả về kèm điểm tương đồng (similarity score).
Ngưỡng tự tin (confidence threshold)
Đây là chốt chặn quan trọng để chống bịa:
def search_kb(query):
hits = vector_db.search(embed(query), k=3)
if hits[0].score < 0.75: # ngưỡng bạn tự hiệu chỉnh
return {"found": False} # → agent chuyển sang route
return {"found": True, "chunks": hits}
Nếu chunk tốt nhất vẫn dưới ngưỡng, coi như KB không có câu trả lời. Thà chuyển ticket còn hơn trả lời sai.
Khung đánh giá chất lượng bài KB (checklist)
- [ ] Tiêu đề là câu hỏi khách thật sự hỏi (không phải thuật ngữ nội bộ).
- [ ] Câu trả lời đứng độc lập, không cần đọc bài khác mới hiểu.
- [ ] Có bước cụ thể, không nói chung chung.
- [ ] Ghi rõ ngoại lệ / trường hợp KHÔNG áp dụng.
- [ ] Có ngày cập nhật để phát hiện nội dung cũ.
Ví dụ deflect hoàn chỉnh
Khách: "Đơn của mình đâu rồi?" → search_kb trả về bài "theo dõi đơn hàng" score 0.88 → agent trả lời theo đúng các bước, kèm câu "Nếu bạn dùng giao hàng đối tác, mã tra cứu nằm trong app của họ", rồi hỏi "Bạn đã xem được chưa?". Không tạo ticket. Đó là một lần deflect thành công.
Sai lầm thường gặp
- KB viết bằng ngôn ngữ nội bộ: Bài tên "SLA hoàn tất RMA" sẽ không match câu hỏi "làm sao trả hàng". Viết theo cách khách nói.
- Không có ngưỡng tự tin: Agent luôn trả về chunk gần nhất dù chả liên quan → bịa. Luôn có threshold.
- KB không cập nhật: Chính sách đổi từ 7 ngày lên 30 ngày mà KB cũ → agent trả lời sai, gây khiếu nại.
- Chunk quá to: Nhét cả trang dài làm điểm tương đồng loãng, tìm kiếm kém chính xác. Cắt theo heading, ~200–300 token.