Orange Pi RAG: chatbot hỏi đáp từ chính bài viết trên website
Gom bài kỹ thuật orangepi.vn thành RAG (FAISS + sentence-transformers) để chatbot Zalo OA trả lời bám dữ liệu thật, kèm nguồn bài gốc.
Trước giờ tôi có khá nhiều bài viết kỹ thuật trên orangepi.vn, nhưng có một vấn đề là khách hàng (nhất là khách hàng trẻ tuổi) thường không bao giờ bỏ thời gian ra đọc (vì họ quen xem video rồi) còn tôi thì không quen lắm với việc làm video (mà cũng mất thời gian thật, quay xong còn ghép với lồng tiếng).
Thế là tôi thử gom toàn bộ phần kiến thức đó lại thành một hệ thống RAG để chatbot có thể tự tìm đúng nội dung liên quan rồi trả lời. Sau một thời gian chạy thử, tôi đã áp dụng khá ổn với chatbot Zalo OA.
Hiện tại dữ liệu mẫu trong repo đã crawl sẵn 199 bài viết trên orangepi.vn cùng thông tin của 40 model sản phẩm Orange Pi, sau đó chia nhỏ nội dung thành các chunks và tạo vector index bằng FAISS + sentence-transformers. Khi người dùng hỏi, hệ thống không đưa toàn bộ website cho AI đọc mà sẽ tìm những đoạn nội dung liên quan nhất rồi mới gửi chúng cùng câu hỏi sang LLM để tạo câu trả lời.
Ví dụ khách hỏi Orange Pi 5 dùng chip gì, hỗ trợ hệ điều hành nào, một model nào đó có bao nhiêu RAM hay cần hướng dẫn cài một phần mềm đã từng có bài viết trên website, chatbot sẽ tìm lại dữ liệu từ chính kho bài viết rồi mới trả lời. Như vậy câu trả lời bám sát dữ liệu của mình hơn rất nhiều, đồng thời còn có thể trả về nguồn bài viết gốc để người dùng đọc thêm.
Phần tôi thích nhất là RAG và LLM được tách riêng. Việc tìm kiếm dữ liệu dùng FAISS chạy local, còn phần trả lời hỗ trợ API tương thích OpenAI nên có thể dùng bất cứ LLM hay AI Gateway nào cũng được, kể cả DeepSeek hay CLIProxyAPI.
Trong repo tôi cũng làm sẵn crawler từ sitemap nên không bắt buộc phải dùng cho Orange Pi. Có thể crawl một blog khác, build lại FAISS index rồi biến nó thành một chatbot hỏi đáp theo dữ liệu riêng của website đó. Firecrawl chỉ cần thiết khi muốn crawl dữ liệu mới, còn sau khi có dữ liệu và index thì hệ thống RAG hoạt động độc lập.
Ngoài phần core RAG còn có sẵn giao diện web để test, quản lý nhiều phiên chat, giữ context 10 tin nhắn gần nhất, hiển thị nguồn trích dẫn và có Topic Guard để hạn chế AI trả lời những câu hỏi nằm ngoài phạm vi dữ liệu.
Sau một thời gian thử với chatbot Zalo thì tôi thấy đây mới là cách hợp lý để dùng AI cho hỗ trợ khách hàng: LLM lo việc hiểu câu hỏi và diễn đạt câu trả lời, còn kiến thức thực tế phải lấy từ dữ liệu của chính mình.
Website càng có nhiều bài kỹ thuật tốt thì chatbot càng có nhiều thứ để học và trả lời.
Mã nguồn tôi chia sẻ tại: https://git.ttcorp.net/orangepivietnam/orangepi-rag
Repo sử dụng Source-Available License: mọi người có thể tải về, cài đặt, nghiên cứu, sử dụng cá nhân hoặc trong nội bộ và sửa lại cho nhu cầu của mình. Tuy nhiên không được lấy mã nguồn này bán lại, làm dịch vụ SaaS trả phí hoặc đóng gói cùng sản phẩm để kinh doanh khi chưa được sự cho phép.
