[
{
"id": 2169,
"slug": "chunking-la-gi",
"title": "Chunking là gì? Cách chia tài liệu cho RAG trả lời chính xác",
"meta_desc": "Chunking là gì: cách chia tài liệu thành đoạn nhỏ để RAG tìm đúng thông tin. So sánh các chiến lược chia, kích thước đoạn gợi ý, xử lý bảng, PDF và lỗi thường gặp.",
"excerpt": "Trước khi AI đọc được tài liệu nội bộ, tài liệu phải được cắt thành nhiều đoạn nhỏ. Cách cắt này, gọi là chunking, ảnh hưởng trực tiếp tới việc chatbot trả lời đúng hay sai.",
"answer": "Chunking là bước chia tài liệu dài thành các đoạn nhỏ (chunk) trước khi tạo embedding và lưu vào vector database trong hệ thống RAG. Mỗi khi người dùng hỏi, hệ thống tìm vài chunk liên quan nhất để đưa cho AI. Chunk quá dài làm loãng ý và tốn token, chunk quá ngắn làm mất ngữ cảnh. Cách phổ biến là chia theo cấu trúc tài liệu như mục, tiêu đề, điều khoản, giữ mỗi đoạn khoảng vài trăm từ và cho các đoạn chồng lấn một phần. Chunking tốt thường cải thiện chất lượng RAG nhiều hơn việc đổi sang mô hình đắt tiền.",
"kws": ["chunking là gì", "chia tài liệu cho RAG", "chunk size", "chiến lược chunking", "text splitting"],
"sections": [
{"h2": "Chunking là gì và vì sao RAG cần chia tài liệu", "html": "<p>Chunking là việc cắt một tài liệu thành nhiều mảnh văn bản nhỏ, mỗi mảnh được xử lý và tìm kiếm như một đơn vị độc lập. Trong RAG, hệ thống không đưa nguyên cuốn sổ tay nhân viên 80 trang vào prompt mỗi lần có câu hỏi. Nó chỉ lấy vài đoạn liên quan.</p><p>Có ba lý do khiến chunking bắt buộc:</p><ul><li><strong>Giới hạn ngữ cảnh và chi phí:</strong> dù context window ngày càng lớn, đưa toàn bộ kho tài liệu vào mỗi câu hỏi vẫn tốn token và chậm.</li><li><strong>Độ chính xác tìm kiếm:</strong> một embedding đại diện cho cả chương dài sẽ trộn nhiều chủ đề, khó khớp với câu hỏi cụ thể.</li><li><strong>Trích dẫn nguồn:</strong> chunk nhỏ cho phép chatbot chỉ rõ thông tin lấy từ mục nào, trang nào.</li></ul><h3>Một ví dụ dễ hình dung</h3><p>Quy chế lương thưởng của công ty 40 người có các mục: lương cơ bản, phụ cấp, thưởng Tết, thưởng doanh số. Nếu cả quy chế là một chunk, câu hỏi về thưởng Tết sẽ kéo theo toàn bộ nội dung phụ cấp. Nếu mỗi mục là một chunk, hệ thống lấy đúng phần thưởng Tết.</p>"},
{"h2": "Các chiến lược chunking phổ biến", "html": "<p>Không có cách chia nào tốt cho mọi loại tài liệu. Dưới đây là các chiến lược hay dùng, xếp từ đơn giản đến phức tạp.</p>", "table": {"caption": "So sánh chiến lược chunking", "head": ["Chiến lược", "Cách làm", "Hợp với", "Nhược điểm"], "rows": [["Kích thước cố định", "Cắt mỗi N token, có chồng lấn", "Văn bản thuần, thử nghiệm nhanh", "Dễ cắt ngang câu, ngang bảng"], ["Đệ quy theo ký tự phân tách", "Ưu tiên cắt ở đoạn, rồi câu, rồi từ", "Đa số tài liệu văn phòng", "Chưa hiểu cấu trúc mục"], ["Theo cấu trúc", "Cắt theo tiêu đề, mục, điều khoản", "Quy chế, hợp đồng, sổ tay, Markdown", "Mục quá dài vẫn cần chia tiếp"], ["Theo ngữ nghĩa", "Dùng embedding phát hiện chỗ đổi chủ đề", "Biên bản họp, bài viết dài", "Tốn tính toán, khó dự đoán"], ["Cha con", "Tìm bằng chunk nhỏ, trả về chunk cha lớn hơn", "Tài liệu kỹ thuật nhiều chi tiết", "Cài đặt phức tạp hơn"]]}},
{"h2": "Kích thước chunk và độ chồng lấn bao nhiêu là hợp lý", "html": "<p>Đây là câu hỏi được hỏi nhiều nhất, và câu trả lời trung thực là: phụ thuộc vào tài liệu và kiểu câu hỏi. Tuy vậy, có vài điểm xuất phát hợp lý để thử.</p><ul><li><strong>Câu hỏi tra cứu ngắn</strong> (số ngày phép, thông số máy): chunk nhỏ, khoảng 150–300 từ, giúp tìm chính xác.</li><li><strong>Câu hỏi cần giải thích</strong> (quy trình xử lý khiếu nại): chunk trung bình, khoảng 300–600 từ, giữ trọn một quy trình.</li><li><strong>Chồng lấn:</strong> khoảng 10–20% độ dài chunk, để câu nằm ở ranh giới không bị mất ngữ cảnh.</li></ul><p>Lưu ý tiếng Việt thường tốn nhiều token hơn tiếng Anh cho cùng một nội dung, vì vậy nếu công cụ tính theo token, con số tương ứng sẽ lớn hơn số từ. Mô hình embedding cũng có giới hạn độ dài đầu vào; phần vượt quá có thể bị cắt mà bạn không biết.</p><h3>Cách chọn bằng thực nghiệm</h3><ol><li>Chuẩn bị 30–50 câu hỏi thật kèm đáp án.</li><li>Thử 2–3 cấu hình kích thước khác nhau.</li><li>Đo tỷ lệ chunk đúng nằm trong top kết quả.</li><li>Chọn cấu hình tốt nhất, không chọn theo cảm tính.</li></ol>"},
{"h2": "Xử lý PDF, bảng biểu và file scan trước khi chunking", "html": "<p>Chunking chỉ tốt khi văn bản đầu vào sạch. Với tài liệu doanh nghiệp Việt Nam, phần lớn rắc rối nằm ở bước chuyển đổi.</p><ul><li><strong>PDF xuất từ Word:</strong> thường trích chữ được, nhưng tiêu đề trang, chân trang, số trang lặp lại chèn vào giữa nội dung. Nên lọc bỏ trước khi chia.</li><li><strong>PDF scan, ảnh chụp:</strong> cần OCR. Kiểm tra lỗi dấu tiếng Việt sau OCR, vì 'phụ cấp' thành 'phu cap' sẽ làm tìm kiếm kém đi.</li><li><strong>Bảng biểu:</strong> cắt ngang bảng làm mất tiêu đề cột. Nên giữ trọn bảng trong một chunk, hoặc chuyển mỗi hàng thành câu có đủ tên cột, ví dụ 'Gói bảo trì Tiêu chuẩn: số lần đến tận nơi 2 lần mỗi tháng'.</li><li><strong>Excel:</strong> thường nên đưa vào công cụ truy vấn dữ liệu thay vì chunk như văn bản.</li><li><strong>Slide:</strong> mỗi slide là một chunk tự nhiên, nhớ kèm tiêu đề bài trình bày.</li></ul><h3>Gắn ngữ cảnh vào từng chunk</h3><p>Một kỹ thuật hiệu quả là thêm vào đầu mỗi chunk tên tài liệu, tên chương, mục. Chunk 'Thời hạn: 30 ngày' trở thành 'Chính sách đổi trả 2026 › Điều kiện đổi hàng › Thời hạn: 30 ngày'. Chi tiết nhỏ này giúp tìm kiếm chính xác hơn rõ rệt.</p>"},
{"h2": "Siêu dữ liệu đi kèm chunk nên có gì", "html": "<p>Mỗi chunk không chỉ là đoạn văn bản. Nó nên mang theo siêu dữ liệu (metadata) để lọc, trích dẫn và cập nhật.</p><ul><li><strong>Tên và đường dẫn tài liệu gốc:</strong> để chatbot trích dẫn và người dùng mở file kiểm tra.</li><li><strong>Vị trí:</strong> số trang, tên mục, số điều.</li><li><strong>Phiên bản và ngày hiệu lực:</strong> rất quan trọng với quy chế, bảng giá, chính sách thay đổi theo năm.</li><li><strong>Phòng ban, chi nhánh, đối tượng:</strong> để lọc đúng quy định cho nhân viên văn phòng hay công nhân, chi nhánh Thủ Đức hay Bình Dương.</li><li><strong>Mức truy cập:</strong> tài liệu chỉ dành cho kế toán không được trả cho nhân viên kinh doanh.</li></ul><p>Khi có metadata, hệ thống có thể lọc trước rồi mới tìm ngữ nghĩa. Câu hỏi 'chi nhánh Bình Dương làm ca mấy giờ' chỉ tìm trong chunk thuộc Bình Dương, tránh lấy nhầm giờ làm của văn phòng chính.</p><h3>Cập nhật tài liệu</h3><p>Khi quy chế mới thay thế quy chế cũ, cần xóa hoặc đánh dấu hết hiệu lực các chunk cũ. Nếu không, chatbot sẽ trộn quy định cũ và mới trong cùng câu trả lời.</p>"},
{"h2": "Lỗi chunking thường gặp và cách nhận biết", "html": "<ul><li><strong>Câu trả lời bị cụt:</strong> chatbot nêu bước 1–3 của quy trình nhưng thiếu bước 4–6. Thường do quy trình bị cắt thành hai chunk và chỉ một chunk được lấy.</li><li><strong>Nhầm đối tượng:</strong> chunk 'được hỗ trợ 50%' không còn câu đứng trước nói rõ áp dụng cho ai. Cần chồng lấn hoặc gắn tiêu đề mục.</li><li><strong>Chunk toàn rác:</strong> mục lục, header, chân trang, bảng chữ ký chiếm chỗ trong kết quả tìm kiếm. Lọc bỏ ở bước tiền xử lý.</li><li><strong>Trùng lặp:</strong> cùng một nội dung có trong 3 file bản nháp, bản chính, bản sửa. Kết quả tìm kiếm bị chiếm bởi các bản sao.</li><li><strong>Bảng vỡ:</strong> số liệu tách khỏi tên cột, AI đọc '2 lần' mà không biết là 2 lần gì.</li><li><strong>Dùng một cấu hình cho mọi loại file:</strong> hợp đồng, biên bản họp và FAQ có cấu trúc rất khác nhau.</li></ul><p>Cách phát hiện nhanh nhất là mở xem trực tiếp các chunk được lấy ra cho những câu hỏi trả lời sai. Phần lớn công cụ RAG như Dify, AnythingLLM, Open WebUI đều cho xem nguồn được dùng.</p>"},
{"h2": "Quy trình chunking gợi ý cho kho tài liệu nội bộ", "html": "<p>Dưới đây là quy trình thực tế cho một công ty muốn xây chatbot hỏi đáp quy định nội bộ.</p><ol><li><strong>Kiểm kê tài liệu:</strong> liệt kê file, xác định bản hiện hành, loại bỏ bản nháp và bản cũ.</li><li><strong>Chuẩn hóa định dạng:</strong> ưu tiên chuyển sang văn bản có cấu trúc như Markdown hoặc Word có heading rõ ràng.</li><li><strong>Phân nhóm theo loại:</strong> quy chế, biểu mẫu, hướng dẫn kỹ thuật, FAQ. Mỗi nhóm một cấu hình chunking.</li><li><strong>Chia theo cấu trúc trước, giới hạn kích thước sau:</strong> cắt theo mục, mục nào quá dài thì chia tiếp có chồng lấn.</li><li><strong>Gắn tiêu đề và metadata:</strong> tên tài liệu, mục, ngày hiệu lực, quyền truy cập.</li><li><strong>Kiểm tra mẫu:</strong> đọc ngẫu nhiên 20 chunk xem có tự hiểu được khi đứng một mình không.</li><li><strong>Đo bằng bộ câu hỏi:</strong> chỉnh lại nếu tỷ lệ tìm đúng thấp.</li></ol><p>Tiêu chí đơn giản nhất để đánh giá một chunk: nếu đưa riêng đoạn này cho một nhân viên mới đọc, họ có hiểu nó nói về cái gì và áp dụng cho ai không. Nếu không, chunk đó cần thêm ngữ cảnh.</p>"}
],
"tip": "Đừng chỉnh tham số chunking theo cảm giác. Hãy mở xem các chunk được lấy cho 10 câu trả lời sai gần nhất; nguyên nhân thường lộ ra ngay, như bảng bị cắt hoặc chunk thiếu tiêu đề mục.",
"faq": [
{"q": "Chunk size bao nhiêu là tốt nhất?", "a": "Không có con số chung. Điểm xuất phát hợp lý là vài trăm từ mỗi chunk với chồng lấn 10–20%, sau đó thử nghiệm bằng câu hỏi thật để điều chỉnh."},
{"q": "Context window lớn rồi có cần chunking nữa không?", "a": "Vẫn cần với kho tài liệu lớn, vì đưa toàn bộ vào mỗi câu hỏi tốn chi phí, chậm và có thể làm mô hình bỏ sót chi tiết. Với vài tài liệu ngắn, đưa nguyên văn đôi khi là lựa chọn đơn giản hơn."},
{"q": "Chunking file Excel thế nào?", "a": "Bảng tính có cấu trúc thường nên được truy vấn trực tiếp hoặc chuyển mỗi hàng thành câu có tên cột. Cắt Excel như văn bản thường làm mất quan hệ giữa cột và giá trị."},
{"q": "Chồng lấn giữa các chunk để làm gì?", "a": "Chồng lấn giữ lại phần ngữ cảnh ở ranh giới, tránh việc một câu quan trọng bị cắt đôi hoặc mất câu dẫn giải thích nó áp dụng cho ai."},
{"q": "Đổi chiến lược chunking có phải tạo lại embedding không?", "a": "Có. Mỗi lần thay cách chia, toàn bộ chunk thay đổi nên phải tạo lại embedding và lập chỉ mục lại trong vector database."},
{"q": "Công cụ không cần code có cho chỉnh chunking không?", "a": "Nhiều nền tảng như Dify, Flowise, AnythingLLM cho chỉnh kích thước chunk và độ chồng lấn trong giao diện. Mức tùy biến sâu như chia theo cấu trúc có thể cần cấu hình nâng cao hoặc lập trình."}
],
"sources": [
{"t": "LangChain – Text splitters", "u": "https://python.langchain.com"},
{"t": "LlamaIndex documentation", "u": "https://docs.llamaindex.ai"},
{"t": "Retrieval-augmented generation – Wikipedia", "u": "https://en.wikipedia.org/wiki/Retrieval-augmented_generation"}
],
"related": ["rag-la-gi", "embedding-la-gi", "vector-database-la-gi", "reranker-la-gi", "xay-kho-tri-thuc-ai-noi-bo", "context-window-la-gi", "ocr-la-gi", "cach-trich-xuat-du-lieu-tu-pdf-bang-ai"]
},
{
"id": 2170,
"slug": "hybrid-search-la-gi",
"title": "Hybrid search là gì? Kết hợp tìm từ khóa và tìm ngữ nghĩa",
"meta_desc": "Hybrid search là gì: kết hợp tìm kiếm từ khóa (BM25) và tìm kiếm ngữ nghĩa (vector) để tìm đúng cả mã sản phẩm lẫn câu hỏi tự nhiên. Cách hoạt động và triển khai.",
"excerpt": "Tìm kiếm ngữ nghĩa hiểu ý câu hỏi nhưng hay trượt với mã sản phẩm, số hợp đồng. Tìm từ khóa thì ngược lại. Hybrid search kết hợp cả hai để chatbot và công cụ tìm kiếm nội bộ ít bỏ sót hơn.",
"answer": "Hybrid search (tìm kiếm lai) là cách chạy song song tìm kiếm theo từ khóa, thường dùng thuật toán BM25, và tìm kiếm ngữ nghĩa bằng vector embedding, rồi trộn hai danh sách kết quả thành một. Tìm từ khóa bắt chính xác mã sản phẩm, số điều luật, tên riêng; tìm ngữ nghĩa hiểu câu hỏi diễn đạt khác chữ trong tài liệu. Kết hợp lại, hệ thống RAG và tìm kiếm nội bộ ít bỏ sót hơn so với dùng riêng một cách. Phần lớn vector database và công cụ tìm kiếm phổ biến hiện có hỗ trợ hybrid search.",
"kws": ["hybrid search là gì", "tìm kiếm lai", "BM25 và vector", "hybrid search RAG"],
"sections": [
{"h2": "Hybrid search là gì và giải quyết vấn đề gì", "html": "<p>Hybrid search là phương pháp tìm kiếm kết hợp hai cách tiếp cận khác nhau về bản chất: tìm theo chữ và tìm theo nghĩa. Mục tiêu là lấy điểm mạnh của bên này bù điểm yếu của bên kia.</p><p>Hãy xem hai câu hỏi gửi tới chatbot của một công ty phân phối linh kiện máy tính:</p><ul><li>'Ổ SSD mã NV2-1TB còn bảo hành bao lâu' : câu hỏi chứa mã sản phẩm. Tìm ngữ nghĩa có thể trả về tài liệu bảo hành của mã SSD khác vì về nghĩa chúng gần như giống nhau. Tìm từ khóa bắt đúng chuỗi 'NV2-1TB'.</li><li>'Máy tính khởi động mãi không lên thì làm sao' : tài liệu viết 'xử lý lỗi không boot được Windows'. Không có từ nào trùng đáng kể, tìm từ khóa trượt. Tìm ngữ nghĩa hiểu hai câu cùng ý.</li></ul><p>Một hệ thống chỉ dùng một cách sẽ thất bại ở một trong hai loại câu hỏi. Người dùng thật lại hỏi lẫn lộn cả hai kiểu, nên hybrid search thường cho kết quả ổn định hơn.</p>"},
{"h2": "Tìm từ khóa và tìm ngữ nghĩa khác nhau thế nào", "html": "<p>Hiểu rõ từng phương pháp giúp bạn biết khi nào nên tăng trọng số cho bên nào.</p>", "table": {"caption": "Tìm kiếm từ khóa BM25 so với tìm kiếm vector", "head": ["Tiêu chí", "Từ khóa (BM25)", "Ngữ nghĩa (vector)"], "rows": [["Nguyên lý", "Đếm từ trùng, ưu tiên từ hiếm", "So sánh khoảng cách giữa các vector ý nghĩa"], ["Mã số, tên riêng, viết tắt", "Rất tốt", "Không ổn định"], ["Câu hỏi diễn đạt khác chữ", "Kém", "Tốt"], ["Lỗi chính tả, không dấu", "Kém nếu không xử lý thêm", "Chịu được ở mức vừa phải"], ["Giải thích vì sao khớp", "Dễ, chỉ ra từ trùng", "Khó giải thích"], ["Chi phí lập chỉ mục", "Thấp", "Cần tạo embedding cho mọi đoạn"]]}},
{"h2": "Cách trộn kết quả trong hybrid search", "html": "<p>Khó khăn chính của hybrid search là hai phương pháp cho điểm theo thang hoàn toàn khác nhau. Điểm BM25 có thể là 12,4 trong khi độ tương đồng vector là 0,82. Không thể cộng thẳng. Có hai cách trộn phổ biến.</p><h3>Reciprocal Rank Fusion (RRF)</h3><p>RRF bỏ qua điểm số, chỉ dùng thứ hạng. Mỗi tài liệu nhận điểm dựa trên vị trí của nó trong từng danh sách, tài liệu xếp cao ở cả hai danh sách sẽ lên đầu. Ưu điểm là đơn giản, ít phải tinh chỉnh, nên rất nhiều hệ thống chọn làm mặc định.</p><h3>Trộn điểm có trọng số</h3><p>Chuẩn hóa điểm của hai bên về cùng thang, rồi cộng với trọng số, ví dụ 0,3 cho từ khóa và 0,7 cho ngữ nghĩa. Cách này cho phép điều chỉnh theo loại dữ liệu nhưng cần thử nghiệm để chọn trọng số.</p><ul><li>Kho tài liệu nhiều mã sản phẩm, số hợp đồng: tăng trọng số từ khóa.</li><li>Kho hướng dẫn, quy trình viết bằng lời tự nhiên: tăng trọng số ngữ nghĩa.</li></ul><p>Sau bước trộn, nhiều hệ thống còn đưa top kết quả qua reranker để chấm lại lần cuối. Hybrid search lo việc không bỏ sót, reranker lo việc xếp đúng thứ tự.</p>"},
{"h2": "Lưu ý riêng khi tìm kiếm tiếng Việt", "html": "<p>Tiếng Việt có một số đặc điểm khiến tìm từ khóa phức tạp hơn tiếng Anh.</p><ul><li><strong>Từ ghép nhiều âm tiết:</strong> 'máy tính xách tay' là một khái niệm gồm bốn âm tiết. Bộ tách từ mặc định có thể tách theo khoảng trắng, làm giảm độ chính xác. Một số công cụ có bộ phân tích tiếng Việt hoặc hỗ trợ tìm theo cụm từ.</li><li><strong>Có dấu và không dấu:</strong> người dùng gõ 'bao hanh' thay cho 'bảo hành'. Cân nhắc lập chỉ mục thêm phiên bản không dấu.</li><li><strong>Viết tắt:</strong> 'HĐ', 'NV', 'KH', 'BHXH'. Nên có danh sách từ đồng nghĩa và viết tắt phổ biến trong công ty.</li><li><strong>Từ địa phương, cách gọi khác nhau:</strong> 'máy lạnh' và 'điều hòa', 'bảo trì' và 'bảo dưỡng'. Phần này tìm ngữ nghĩa xử lý tốt hơn.</li></ul><p>Chính vì những điểm này, với dữ liệu tiếng Việt, hybrid search thường đáng giá hơn so với chỉ dựa vào một phương pháp. Bên ngữ nghĩa bù cho đồng nghĩa và cách diễn đạt, bên từ khóa bù cho mã số và tên riêng.</p>"},
{"h2": "Công cụ nào hỗ trợ hybrid search", "html": "<p>Tại thời điểm viết, nhiều nền tảng phổ biến đã hỗ trợ hybrid search ở mức sẵn có hoặc qua cấu hình. Tính năng thay đổi theo phiên bản, nên kiểm tra tài liệu chính thức trước khi chọn.</p><ul><li><strong>Elasticsearch và OpenSearch:</strong> vốn mạnh về tìm từ khóa, đã bổ sung tìm vector và cơ chế trộn kết quả.</li><li><strong>Vector database như Qdrant, Weaviate, Milvus:</strong> hỗ trợ vector thưa (sparse) hoặc BM25 bên cạnh vector đặc.</li><li><strong>PostgreSQL:</strong> kết hợp tìm toàn văn có sẵn với tiện ích pgvector, phù hợp khi công ty đã dùng PostgreSQL.</li><li><strong>Nền tảng RAG không cần code:</strong> một số nền tảng như Dify cho chọn chế độ tìm kiếm lai trong phần cài đặt kho tri thức.</li></ul><h3>Chọn theo hạ tầng sẵn có</h3><p>Với doanh nghiệp nhỏ, nên chọn công cụ gần với hệ thống đang chạy. Nếu website và phần mềm nội bộ đã dùng PostgreSQL, thêm pgvector đơn giản hơn dựng thêm một hệ thống mới. Nếu chỉ cần chatbot tài liệu, dùng tính năng có sẵn của nền tảng RAG là đủ.</p>"},
{"h2": "Các bước triển khai hybrid search cho chatbot nội bộ", "html": "<h3>Chuẩn bị</h3><ul><li>Kho tài liệu đã được chunking và có metadata.</li><li>Bộ câu hỏi kiểm thử gồm cả hai loại: câu có mã số, tên riêng và câu diễn đạt tự nhiên.</li></ul><h3>Các bước</h3><ol><li><strong>Đo nền:</strong> chạy bộ câu hỏi với tìm vector hiện tại, ghi tỷ lệ tìm đúng cho từng nhóm câu hỏi.</li><li><strong>Bật chỉ mục từ khóa:</strong> cấu hình BM25 hoặc tìm toàn văn, xử lý tiếng Việt và phiên bản không dấu nếu cần.</li><li><strong>Chọn cách trộn:</strong> bắt đầu với RRF vì ít tham số.</li><li><strong>Chạy lại bộ câu hỏi:</strong> so sánh từng nhóm. Kỳ vọng nhóm câu có mã số cải thiện rõ, nhóm câu tự nhiên không giảm.</li><li><strong>Tinh chỉnh:</strong> nếu cần, chuyển sang trộn có trọng số và thử vài tỷ lệ.</li><li><strong>Thêm reranker nếu thứ tự còn kém.</strong></li></ol><h3>Kiểm tra kết quả</h3><p>Xem log thực tế sau 1–2 tuần: tỷ lệ câu chatbot trả lời 'không tìm thấy' có giảm không, câu hỏi về mã sản phẩm có còn bị trả nhầm không.</p>"},
{"h2": "Khi nào chưa cần hybrid search", "html": "<p>Hybrid search thêm một chỉ mục và thêm bước xử lý. Bạn có thể chưa cần nếu:</p><ul><li><strong>Kho tài liệu rất nhỏ:</strong> vài chục trang, có thể đưa thẳng vào ngữ cảnh hoặc tìm vector là đủ.</li><li><strong>Câu hỏi gần như không có mã số, tên riêng:</strong> ví dụ chatbot tư vấn chung về chính sách chăm sóc khách hàng.</li><li><strong>Dữ liệu có cấu trúc đã nằm trong phần mềm:</strong> câu hỏi về tồn kho theo mã sản phẩm nên truy vấn trực tiếp cơ sở dữ liệu qua function calling, không cần tìm trong văn bản.</li><li><strong>Vấn đề thật nằm ở dữ liệu nguồn:</strong> nếu tài liệu thiếu hoặc lỗi thời, đổi cách tìm kiếm không giúp được.</li></ul><p>Ngược lại, hybrid search gần như nên có khi kho tài liệu chứa nhiều mã sản phẩm, model máy, số hiệu văn bản, tên khách hàng, hoặc khi người dùng thường gõ không dấu và viết tắt. Đó là tình huống rất phổ biến ở cửa hàng linh kiện, công ty phân phối và bộ phận kỹ thuật.</p>"}
],
"tip": "Khi lập bộ câu hỏi kiểm thử, hãy tách riêng nhóm câu chứa mã số và tên riêng. Hybrid search thường cải thiện mạnh nhất ở nhóm này, nếu gộp chung bạn có thể không nhìn thấy khác biệt.",
"faq": [
{"q": "Hybrid search có chậm hơn tìm vector không?", "a": "Có thêm một bước tìm và một bước trộn, nhưng tìm từ khóa vốn rất nhanh nên độ trễ thêm thường nhỏ so với thời gian mô hình ngôn ngữ sinh câu trả lời."},
{"q": "BM25 là gì?", "a": "BM25 là thuật toán xếp hạng tìm kiếm theo từ khóa, chấm điểm tài liệu dựa trên số lần xuất hiện của từ trong câu hỏi, có ưu tiên từ hiếm và điều chỉnh theo độ dài tài liệu."},
{"q": "Hybrid search có thay thế reranker không?", "a": "Không. Hybrid search giúp lấy được nhiều ứng viên đúng hơn, còn reranker sắp xếp lại các ứng viên đó cho chính xác. Hai kỹ thuật thường dùng cùng nhau."},
{"q": "Website WordPress có dùng hybrid search được không?", "a": "Có thể qua plugin tìm kiếm kết hợp dịch vụ vector hoặc công cụ tìm kiếm bên ngoài. Mức độ hỗ trợ phụ thuộc plugin, nên thử trên bản sao website trước."},
{"q": "Có cần xử lý tiếng Việt riêng cho hybrid search không?", "a": "Nên có. Tách từ phù hợp, lập chỉ mục bản không dấu và danh sách viết tắt giúp phần tìm từ khóa hoạt động tốt hơn với cách người Việt gõ."},
{"q": "RRF là gì?", "a": "Reciprocal Rank Fusion là cách trộn nhiều danh sách kết quả dựa trên thứ hạng thay vì điểm số, giúp kết hợp kết quả từ khóa và ngữ nghĩa mà không cần chuẩn hóa điểm."}
],
"sources": [
{"t": "Okapi BM25 – Wikipedia", "u": "https://en.wikipedia.org/wiki/Okapi_BM25"},
{"t": "Elasticsearch documentation", "u": "https://www.elastic.co/docs"},
{"t": "pgvector – GitHub", "u": "https://github.com/pgvector/pgvector"},
{"t": "Qdrant documentation", "u": "https://qdrant.tech/documentation/"}
],
"related": ["semantic-search-la-gi", "rag-la-gi", "embedding-la-gi", "vector-database-la-gi", "reranker-la-gi", "chunking-la-gi", "ai-tim-kiem-la-gi", "xay-kho-tri-thuc-ai-noi-bo"]
},
{
"id": 2171,
"slug": "guardrails-ai-la-gi",
"title": "Guardrails AI là gì? Hàng rào an toàn cho chatbot doanh nghiệp",
"meta_desc": "Guardrails AI là gì: các lớp kiểm soát đầu vào, đầu ra và hành động giúp chatbot không lộ dữ liệu, không lạc đề, không bị lợi dụng. Các loại và cách triển khai.",
"excerpt": "Một chatbot trả lời khách hàng thay doanh nghiệp cần biết điều gì được nói và điều gì không. Guardrails là các hàng rào kỹ thuật và quy trình giữ chatbot trong phạm vi an toàn.",
"answer": "Guardrails AI (hàng rào an toàn) là tập hợp các lớp kiểm soát đặt quanh mô hình AI để giữ chatbot hoạt động đúng phạm vi: lọc đầu vào trước khi tới mô hình, kiểm tra đầu ra trước khi tới người dùng, và giới hạn hành động mà AI được phép thực hiện. Guardrails giúp chặn lộ thông tin cá nhân, trả lời lạc đề, nội dung không phù hợp, cam kết sai về giá hay chính sách và các kiểu tấn công như prompt injection. Guardrails không thay thế được việc thiết kế quyền hạn đúng, nhưng là lớp phòng vệ cần có cho mọi chatbot giao tiếp với khách hàng.",
"kws": ["guardrails AI là gì", "hàng rào an toàn chatbot", "AI guardrails", "kiểm soát đầu ra AI"],
"sections": [
{"h2": "Guardrails AI là gì và vì sao chatbot cần nó", "html": "<p>Guardrails là các quy tắc và cơ chế kiểm tra chạy bên ngoài mô hình AI, đóng vai trò như lan can trên đường đèo. Mô hình vẫn tự viết câu trả lời, nhưng guardrails quyết định câu hỏi nào được đưa vào, câu trả lời nào được gửi ra và hành động nào được phép.</p><p>Chỉ dựa vào system prompt kiểu 'chỉ trả lời về sản phẩm của công ty' là chưa đủ. Mô hình ngôn ngữ có tính xác suất, có thể bị dẫn dắt khỏi hướng dẫn hoặc tự suy diễn. Một vài tình huống thực tế mà doanh nghiệp lo ngại:</p><ul><li>Chatbot cửa hàng hứa giảm giá hoặc cam kết bảo hành không có trong chính sách.</li><li>Chatbot nội bộ trả lời bảng lương của người khác vì tài liệu bị đưa nhầm vào kho tri thức.</li><li>Khách cố tình yêu cầu chatbot viết nội dung xúc phạm rồi chụp màn hình đăng lên mạng.</li><li>Chatbot đọc email có chứa câu lệnh ẩn và làm theo.</li></ul><p>Guardrails biến những rủi ro này từ 'hy vọng mô hình cư xử đúng' thành các kiểm tra cụ thể, đo được và ghi log được.</p>"},
{"h2": "Các lớp guardrails trong một hệ thống chatbot", "html": "<p>Guardrails hiệu quả được xếp nhiều lớp, mỗi lớp chặn một nhóm rủi ro khác nhau.</p>", "table": {"caption": "Ba lớp guardrails và ví dụ kiểm tra", "head": ["Lớp", "Kiểm tra gì", "Ví dụ hành động"], "rows": [["Đầu vào", "Chủ đề, nội dung độc hại, dấu hiệu prompt injection, dữ liệu cá nhân người dùng gửi lên", "Từ chối lịch sự, che số CCCD, chuyển người"], ["Đầu ra", "Lộ thông tin nhạy cảm, cam kết giá, nội dung ngoài phạm vi, định dạng sai", "Chặn, viết lại, thêm câu miễn trừ, chuyển nhân viên"], ["Hành động", "Công cụ được gọi, tham số, quyền người dùng, số lượt gọi", "Yêu cầu xác nhận, từ chối thao tác ghi"], ["Ngữ cảnh truy xuất", "Tài liệu RAG có thuộc quyền người hỏi không", "Lọc tài liệu theo phòng ban trước khi tìm"]]}},
{"h2": "Guardrails được xây bằng những kỹ thuật nào", "html": "<p>Không có một công cụ duy nhất. Guardrails thường kết hợp nhiều kỹ thuật từ đơn giản đến phức tạp.</p><ul><li><strong>Quy tắc cố định:</strong> biểu thức chính quy phát hiện số điện thoại, số CCCD, số tài khoản; danh sách từ cấm. Nhanh, rẻ, dễ giải thích nhưng dễ bị lách.</li><li><strong>Bộ phân loại:</strong> mô hình nhỏ chuyên phân loại nội dung độc hại hoặc phát hiện prompt injection. Một số nhà cung cấp có API kiểm duyệt nội dung riêng.</li><li><strong>LLM làm người kiểm tra:</strong> một mô hình khác đọc câu trả lời và đánh giá 'câu này có cam kết giá không, có ngoài phạm vi không'. Linh hoạt nhưng tốn thêm token và thời gian.</li><li><strong>Kiểm tra cấu trúc:</strong> ép đầu ra đúng định dạng JSON, đúng danh sách giá trị cho phép.</li><li><strong>Kiểm tra căn cứ:</strong> đối chiếu câu trả lời với tài liệu nguồn, nếu không có căn cứ thì không trả lời.</li></ul><h3>Thư viện và nền tảng</h3><p>Có các thư viện mã nguồn mở chuyên về guardrails như NVIDIA NeMo Guardrails hay Guardrails AI, cùng tính năng kiểm duyệt nội dung của các nhà cung cấp mô hình lớn. Các nền tảng như Dify, Botpress cũng có bước kiểm duyệt cấu hình được. Tính năng cụ thể thay đổi theo phiên bản, nên xem tài liệu hiện hành.</p>"},
{"h2": "Ví dụ bộ guardrails cho chatbot bán hàng của cửa hàng", "html": "<p>Giả sử một cửa hàng laptop tại TP.HCM có chatbot trên website và Zalo OA. Bộ guardrails tối thiểu có thể gồm:</p><ol><li><strong>Phạm vi chủ đề:</strong> chỉ trả lời về sản phẩm, bảo hành, giao hàng, giờ mở cửa. Câu hỏi ngoài phạm vi được từ chối lịch sự và gợi ý liên hệ nhân viên.</li><li><strong>Không tự báo giá ngoài dữ liệu:</strong> giá chỉ lấy từ hệ thống bán hàng qua công cụ; câu trả lời có con số giá không khớp dữ liệu thì bị chặn.</li><li><strong>Không cam kết ngoài chính sách:</strong> phát hiện cụm như 'cam kết', 'chắc chắn', 'miễn phí trọn đời' để kiểm tra lại.</li><li><strong>Bảo vệ dữ liệu khách:</strong> không hiển thị địa chỉ, số điện thoại đầy đủ của đơn hàng khi chưa xác thực người hỏi.</li><li><strong>Chuyển người:</strong> khách bức xúc, khiếu nại, đòi hoàn tiền thì chuyển nhân viên ngay.</li><li><strong>Giới hạn độ dài và giọng điệu:</strong> trả lời ngắn, lịch sự, không đùa cợt về đối thủ hay chủ đề nhạy cảm.</li></ol><p>Mỗi quy tắc nên có log khi kích hoạt, để chủ cửa hàng xem hằng tuần và điều chỉnh.</p>"},
{"h2": "Cân bằng giữa an toàn và trải nghiệm người dùng", "html": "<p>Guardrails quá chặt cũng là vấn đề. Chatbot từ chối quá nhiều sẽ khiến khách bỏ đi và nhân viên mất niềm tin vào công cụ.</p><ul><li><strong>Từ chối nhầm (false positive):</strong> khách hỏi 'máy này chơi game bắn súng được không' bị chặn vì từ 'bắn súng'. Danh sách từ cấm thô sơ hay gây lỗi kiểu này.</li><li><strong>Bỏ lọt (false negative):</strong> nội dung xấu viết lách, viết không dấu, chèn ký tự lạ vượt qua bộ lọc.</li><li><strong>Độ trễ:</strong> mỗi lớp kiểm tra bằng LLM có thể thêm thời gian chờ. Với chat trực tiếp, nên dùng kiểm tra nhanh cho mọi tin nhắn và kiểm tra sâu chỉ khi có dấu hiệu rủi ro.</li><li><strong>Thông điệp từ chối:</strong> thay vì 'Tôi không thể trả lời', hãy hướng khách tới bước tiếp theo: số hotline, form liên hệ, nhân viên phụ trách.</li></ul><h3>Đo lường</h3><p>Theo dõi tỷ lệ tin nhắn bị chặn, lấy mẫu để xem bao nhiêu là chặn đúng, bao nhiêu là chặn nhầm. Điều chỉnh từng quy tắc dựa trên số liệu, không dựa trên cảm giác.</p>"},
{"h2": "Lỗi thường gặp khi triển khai guardrails", "html": "<ul><li><strong>Chỉ dựa vào system prompt:</strong> lời dặn trong prompt có thể bị vượt qua. Cần kiểm tra độc lập bên ngoài mô hình.</li><li><strong>Chỉ lọc đầu vào:</strong> nhiều rủi ro nằm ở đầu ra, ví dụ mô hình tự suy diễn ra một chính sách không có.</li><li><strong>Guardrails thay cho phân quyền:</strong> nếu kho tri thức chứa bảng lương, chặn ở đầu ra là quá muộn. Tài liệu nhạy cảm không nên được đưa vào chatbot chung ngay từ đầu.</li><li><strong>Không có log và người xem log:</strong> quy tắc chạy mà không ai xem thì không biết đang chặn đúng hay sai.</li><li><strong>Không kiểm thử tấn công:</strong> guardrails chỉ được thử với câu hỏi bình thường, chưa thử với người cố tình phá. Đây là việc của red teaming.</li><li><strong>Quên cập nhật:</strong> chính sách đổi, sản phẩm mới ra, nhưng quy tắc phạm vi vẫn giữ nguyên.</li></ul><p>Guardrails là quy trình vận hành liên tục, không phải tính năng bật một lần rồi quên.</p>"},
{"h2": "Lộ trình áp dụng guardrails cho doanh nghiệp nhỏ", "html": "<ol><li><strong>Liệt kê rủi ro cụ thể:</strong> viết ra 10 điều chatbot tuyệt đối không được làm, theo ngôn ngữ của doanh nghiệp bạn.</li><li><strong>Loại rủi ro từ gốc:</strong> bỏ tài liệu nhạy cảm khỏi kho tri thức, chỉ cấp công cụ chỉ đọc, dùng tài khoản quyền tối thiểu.</li><li><strong>Thêm kiểm tra nhanh:</strong> regex cho dữ liệu cá nhân, phạm vi chủ đề, tính năng kiểm duyệt có sẵn của nền tảng.</li><li><strong>Thêm kiểm tra đầu ra cho rủi ro cao:</strong> giá, cam kết, chính sách.</li><li><strong>Thiết lập chuyển người:</strong> điều kiện rõ ràng để chatbot nhường lại cho nhân viên.</li><li><strong>Chạy thử có chủ đích:</strong> nhờ vài nhân viên đóng vai khách khó tính, cố gắng làm chatbot nói sai.</li><li><strong>Xem log hằng tuần trong tháng đầu:</strong> điều chỉnh quy tắc, sau đó giãn ra hằng tháng.</li></ol><p>Với doanh nghiệp có dữ liệu cá nhân của khách hàng, nên đối chiếu thêm với quy định về bảo vệ dữ liệu cá nhân hiện hành và tham khảo ý kiến chuyên gia pháp lý khi cần.</p>"}
],
"tip": "Hãy bắt đầu bằng câu hỏi 'nếu chatbot nói sai điều này thì ai chịu trách nhiệm'. Những điều có câu trả lời là 'cửa hàng phải bồi thường' chính là chỗ cần guardrails đầu ra chặt nhất.",
"faq": [
{"q": "Guardrails có chặn được 100% prompt injection không?", "a": "Không. Guardrails giảm rủi ro đáng kể nhưng không có lớp nào chặn tuyệt đối. Cần kết hợp với phân quyền tối thiểu và điểm duyệt của con người cho thao tác quan trọng."},
{"q": "System prompt có phải là guardrails không?", "a": "System prompt là một phần của việc định hướng hành vi, nhưng guardrails đúng nghĩa là các kiểm tra độc lập bên ngoài mô hình, chạy bất kể mô hình có tuân thủ prompt hay không."},
{"q": "Guardrails có làm chatbot chậm hơn không?", "a": "Có thể, nhất là khi dùng LLM để kiểm tra đầu ra. Kiểm tra bằng quy tắc và bộ phân loại nhỏ thường rất nhanh; nên dùng kiểm tra nặng có chọn lọc."},
{"q": "ChatGPT, Claude đã có guardrails sẵn rồi, còn cần thêm không?", "a": "Guardrails của nhà cung cấp tập trung vào an toàn chung. Các rủi ro riêng của doanh nghiệp như báo giá sai, cam kết ngoài chính sách, lộ dữ liệu nội bộ cần guardrails do bạn tự thiết kế."},
{"q": "Doanh nghiệp không có lập trình viên có làm guardrails được không?", "a": "Có ở mức cơ bản thông qua cấu hình kiểm duyệt của nền tảng chatbot, giới hạn kho tri thức và quy tắc chuyển người. Kiểm tra đầu ra phức tạp thường cần hỗ trợ kỹ thuật."},
{"q": "Guardrails và red teaming khác nhau thế nào?", "a": "Guardrails là hàng rào phòng vệ chạy thường trực. Red teaming là hoạt động kiểm thử tấn công có chủ đích để tìm chỗ hàng rào còn hở."}
],
"sources": [
{"t": "NVIDIA NeMo Guardrails – GitHub", "u": "https://github.com/NVIDIA/NeMo-Guardrails"},
{"t": "Guardrails AI – GitHub", "u": "https://github.com/guardrails-ai/guardrails"},
{"t": "OWASP Top 10 for LLM Applications", "u": "https://genai.owasp.org"},
{"t": "NIST AI Risk Management Framework", "u": "https://www.nist.gov/itl/ai-risk-management-framework"}
],
"related": ["prompt-injection-la-gi", "red-teaming-ai-la-gi", "ro-ri-du-lieu-qua-chatbot", "chatbot-ai-la-gi", "ai-governance-la-gi", "chinh-sach-su-dung-ai-noi-bo-cho-doanh-nghiep", "function-calling-la-gi", "du-lieu-ca-nhan-khi-dung-ai"]
}
]
