Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 3 — Xây Knowledge Base để Deflect chuẩn xác

Đã đọc 0/8 mục · còn khoảng 3 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

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.
Ví dụ một bài KB tốt:

---
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.
Bài 4, ta sẽ viết prompt và bộ luật để agent biết khi nào deflect, khi nào route, khi nào escalate.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi