Chia sẻ bởi Tù Bà Khuỳm
Việc Google ra mắt mô hình embedding Gemini hỗ trợ đa ngôn ngữ, bao gồm cả tiếng Việt, đã mở ra một cánh cửa mới đầy hứa hẹn cho việc xây dựng các ứng dụng Retrieval-Augmented Generation (RAG) bằng tiếng mẹ đẻ. Điều này giúp đơn giản hóa đáng kể quá trình tìm kiếm và tạo sinh nội dung dựa trên kho dữ liệu tiếng Việt sẵn có. Chất lượng của Gemini embedding cũng được đánh giá khá tốt sau thời gian thử nghiệm.
Bài viết này sẽ hướng dẫn bạn xây dựng một workflow n8n hoàn chỉnh để triển khai RAG tiếng Việt, đặc biệt hữu ích cho các cá nhân hoặc doanh nghiệp vừa và nhỏ đang lưu trữ dữ liệu nội bộ trên Google Drive. Chúng ta sẽ khám phá hai phương pháp: một cách tiếp cận cơ bản sử dụng Gemini và một cách nâng cao hơn để tối ưu hóa chất lượng xử lý tiếng Việt.
Trước khi bắt đầu, xin gửi lời cảm ơn đến bạn Celon (tác giả workflow gốc), nhóm phát triển thư viện Under the Sea, và nhóm phát triển model Vietnamese-bi-encoder đã đóng góp những nền tảng quan trọng cho giải pháp này.
Chuẩn bị cần thiết cho workflow n8n RAG Tiếng Việt
Để xây dựng workflow này, chúng ta cần chuẩn bị một số thành phần cốt lõi:
- n8n: Nền tảng tự động hóa workflow mã nguồn mở hoặc cloud, đóng vai trò trung tâm điều phối toàn bộ quy trình.
- Supabase: Một giải pháp backend-as-a-service mã nguồn mở, được sử dụng làm nơi lưu trữ vector database (với extension
pgvector
) và metadata của các tài liệu. - Google Drive: Nơi lưu trữ các tài liệu gốc (như file .docx, .pdf, .gsheet) mà bạn muốn đưa vào hệ thống RAG. Bạn cần chỉ định một thư mục cụ thể để n8n theo dõi.
- AI Provider: Dịch vụ cung cấp mô hình ngôn ngữ lớn (LLM) và mô hình embedding. Trong bài viết này, chúng ta sẽ tập trung vào Google Gemini, nhưng bạn có thể linh hoạt thay đổi.
Thiết lập hạ tầng trên Supabase
Trước khi chạy workflow n8n, bạn cần cấu hình Supabase:
- Tạo bảng
documents
: Bảng này sẽ lưu trữ các đoạn văn bản (chunks) đã được tách ra từ tài liệu gốc và vector embedding tương ứng của chúng. Đảm bảo kích hoạt extensionvector
cho Supabase project của bạn và tạo cộtembedding
với kiểu dữ liệuvector
. - Tạo bảng
metadata
: Lưu trữ thông tin về các file gốc như tên file, đường dẫn trên Google Drive, thời gian cập nhật, v.v. - Tạo bảng
document_row
(cho Google Sheet/CSV): Bảng này được thiết kế đặc biệt để lưu trữ dữ liệu từ các file dạng bảng tính, thường là mỗi dòng một record. - Tạo hàm
match_documents
: Đây là một stored procedure (hàm lưu trữ) trong PostgreSQL/Supabase, sử dụng toán tử cosine similarity để tìm kiếm các đoạn văn bản có vector embedding gần giống nhất với vector của câu hỏi đầu vào. - Kiểm tra extension
vector
: Đảm bảo extension này đã được cài đặt và kích hoạt đúng cách trong project Supabase của bạn.
Sau khi hoàn tất các bước trên, nền tảng Supabase đã sẵn sàng để nhận và truy vấn dữ liệu từ workflow n8n.
Workflow cơ bản: Sử dụng Google Gemini Embedding
Đây là phương pháp tiếp cận đơn giản và nhanh chóng nhất, tận dụng trực tiếp khả năng xử lý tiếng Việt của mô hình embedding Gemini từ Google.
Luồng hoạt động
- Theo dõi Google Drive: Workflow n8n được cấu hình để tự động kiểm tra thư mục chỉ định trên Google Drive theo một khoảng thời gian nhất định (ví dụ: mỗi phút).
- Phát hiện file mới/cập nhật: Khi có file mới được thêm vào hoặc file cũ được cập nhật, n8n sẽ tải file đó về.
- Phân loại và trích xuất nội dung: Workflow xác định loại file (Docx, PDF, Google Sheet) và sử dụng các node tương ứng để trích xuất nội dung text bên trong.
- Lưu ý: Đối với PDF, cần đảm bảo nội dung chính là text, không phải hình ảnh scan.
- Chunking (Chia nhỏ văn bản): Nội dung text được chia thành các đoạn nhỏ hơn (chunks) để dễ dàng xử lý và tìm kiếm embedding.
- Tạo Embeddings với Gemini: Từng chunk văn bản được gửi đến API của Google Gemini để tạo ra vector embedding tương ứng.
- Lưu trữ vào Supabase: Các chunks cùng với vector embeddings và thông tin metadata được lưu vào các bảng
documents
vàmetadata
trên Supabase.- Riêng với Google Sheet: Dữ liệu thường được lưu vào bảng
document_row
, mỗi dòng trong sheet tương ứng với một hàng trong bảng.
- Riêng với Google Sheet: Dữ liệu thường được lưu vào bảng
- Giao diện hỏi đáp (Chat): Khi người dùng đặt câu hỏi:
- Câu hỏi được gửi đến Gemini để tạo vector embedding.
- Hàm
match_documents
trên Supabase được gọi để tìm các chunks văn bản có liên quan nhất dựa trên cosine similarity. - Câu hỏi gốc và các chunks liên quan được gửi đến mô hình LLM (ví dụ: Gemini) để tạo ra câu trả lời cuối cùng.
Ví dụ thực tế
- File Docx (Truyện "Chú thỏ bông lông nhông"):
- Đưa file vào thư mục Google Drive đã chỉ định.
- Chạy workflow (hoặc đợi nó tự chạy).
- Kiểm tra Supabase: Dữ liệu file và các chunks đã được lưu.
- Hỏi: "Chú thỏ nhỏ có tên là gì?" -> Trả lời: "Chú thỏ tên là Bông Lông Nhông."
- Hỏi: "Thỏ con đã nói gì với Sóc?" -> Trả lời: "Chị Sóc ơi, chị có biết nơi nào có thể làm nhà hay không?"
- File PDF (Biên bản họp):
- Đưa file PDF (nội dung text) vào thư mục.
- Chạy workflow.
- Kiểm tra Supabase.
- Hỏi: "Có những ai tham gia cuộc họp vào ngày mùng 8 tháng 04?" -> Trả lời: Liệt kê danh sách người tham dự (Nguyễn Văn A, Trần Thị B, Hoàng Ngọc E,...).
- Hỏi: "Ông Nguyễn Văn A có ý kiến như thế nào trong buổi họp?" -> Trả lời: Tóm tắt ý kiến của ông A (đề xuất tập trung phân khúc khách hàng cao cấp,...).
- File Google Sheet (Dữ liệu kho hàng):
- Đưa file Google Sheet vào thư mục.
- Workflow tự động chạy sau khoảng 1 phút (theo cấu hình).
- Kiểm tra Supabase: Dữ liệu được lưu vào bảng
document_row
. - Hỏi: "Nếu bán hết số lượng sữa tươi Vinamilk trong kho thì sẽ lãi được bao nhiêu?" -> Workflow có thể sử dụng vector search hoặc thực thi câu lệnh SQL query (nếu được cấu hình) để tính toán và trả lời.
- Hỏi: "Tổng tiền hàng nhập trong kho đang là bao nhiêu tiền?" -> Workflow có thể cần thực thi một câu SQL query phức tạp hơn trên bảng
document_row
để tính tổng giá trị. Kết quả trả về (ví dụ: 137.130.000) khớp với tính toán thủ công.
Phương pháp cơ bản này hoạt động khá tốt và dễ triển khai, đặc biệt khi bạn muốn nhanh chóng có một hệ thống RAG cho dữ liệu tiếng Việt của mình.
Workflow nâng cao: Tối ưu xử lý tiếng Việt với Under the Sea và Bi-encoder
Mặc dù phương pháp cơ bản hoạt động tốt, nhưng để đạt được chất lượng xử lý và tìm kiếm tiếng Việt tối ưu hơn, chúng ta có thể áp dụng một quy trình nâng cao hơn, sử dụng các công cụ chuyên biệt cho tiếng Việt.
Tại sao cần phương pháp nâng cao?
Tiếng Việt có những đặc thù riêng về dấu câu, từ ghép, và ngữ nghĩa. Việc xử lý văn bản thô trước khi tạo embedding có thể giúp mô hình hiểu ngữ cảnh chính xác hơn, tương tự như việc sơ chế nguyên liệu kỹ lưỡng giúp món ăn ngon hơn.
Các bước cải tiến
- Sử dụng thư viện Under the Sea: Đây là một thư viện xử lý ngôn ngữ tự nhiên (NLP) mạnh mẽ dành riêng cho tiếng Việt. Trong workflow này, chúng ta tận dụng các chức năng:
- Text Normalization: Chuẩn hóa văn bản, sửa các lỗi dấu câu đặt sai vị trí, lỗi chính tả cơ bản.
- Sentence Segmentation: Tách một đoạn văn dài thành các câu đơn lẻ, đúng ngữ pháp, giúp việc chunking hiệu quả hơn.
- Word Segmentation: Tách từ tiếng Việt một cách chính xác. Do tiếng Việt là ngôn ngữ đơn lập, việc xác định ranh giới từ (ví dụ: "xe máy" là một từ, không phải "xe" và "máy") rất quan trọng để hiểu đúng nghĩa.
- Chunking (Fix Size Chunking): Sau khi văn bản được chuẩn hóa và phân đoạn, chúng ta áp dụng chiến lược chia nhỏ thành các chunk có kích thước cố định (ví dụ: 256 tokens). Có nhiều chiến lược chunking khác, nhưng fix size là một khởi đầu đơn giản.
- Sử dụng Vietnamese-bi-encoder: Thay vì Gemini embedding, chúng ta sử dụng một mô hình embedding được huấn luyện chuyên sâu trên dữ liệu tiếng Việt là
Vietnamese-bi-encoder
. Mô hình này được đánh giá có hiệu năng tốt cho các tác vụ tìm kiếm ngữ nghĩa tiếng Việt.- Lưu ý quan trọng: Mô hình này thường tạo ra vector có số chiều khác (ví dụ: 768 chiều), do đó bạn cần cấu hình cột
embedding
trong bảngdocuments
trên Supabase với đúng số chiều này.
- Lưu ý quan trọng: Mô hình này thường tạo ra vector có số chiều khác (ví dụ: 768 chiều), do đó bạn cần cấu hình cột
Yêu cầu triển khai
Để chạy workflow nâng cao này, bạn cần:
- Custom Server: Một server riêng (có thể chạy bằng Docker) để host thư viện Under the Sea và mô hình Vietnamese-bi-encoder. Server này sẽ nhận yêu cầu xử lý văn bản và tạo embedding từ n8n.
- n8n Custom Node: Một node n8n tùy chỉnh được tạo ra để giao tiếp với Custom Server nói trên, gửi dữ liệu cần xử lý và nhận lại kết quả (văn bản đã chuẩn hóa, embeddings).
Cả Custom Server và Custom Node đều được tác giả chia sẻ mã nguồn mở để cộng đồng tham khảo và sử dụng.
Ví dụ với luồng nâng cao
Quay lại ví dụ về file truyện "Chú thỏ bông lông nhông":
- Đưa file vào thư mục Google Drive.
- Chạy workflow nâng cao.
- Workflow sẽ gửi nội dung text đến Custom Server.
- Server thực hiện Normalization, Sentence Segmentation, Word Segmentation bằng Under the Sea.
- Văn bản sạch được chia thành các chunk.
- Mô hình Vietnamese-bi-encoder tạo embedding (768 chiều) cho từng chunk.
- Embeddings và chunks được lưu vào Supabase (với bảng
documents
đã cấu hình 768 chiều). - Hỏi: "Chú thỏ nhỏ tên là gì?" -> Câu trả lời vẫn chính xác, có thể ngắn gọn hơn so với dùng Gemini.
- Hỏi về dữ liệu kho hàng: "Các mặt hàng tồn trong kho là gì?" -> Kết quả trả về danh sách các mặt hàng.
Mặc dù quy trình phức tạp hơn một chút do cần thêm Custom Server và Node, phương pháp nâng cao hứa hẹn mang lại độ chính xác cao hơn trong việc hiểu và truy vấn dữ liệu tiếng Việt.
So sánh và lựa chọn phương pháp phù hợp
Tiêu chí | Workflow Cơ bản (Gemini) | Workflow Nâng cao (Under the Sea + Bi-encoder) |
---|---|---|
Độ phức tạp setup | Thấp | Cao hơn (cần Custom Server/Node) |
Mô hình Embedding | Google Gemini (đa ngôn ngữ) | Vietnamese-bi-encoder (chuyên biệt TV) |
Xử lý tiếng Việt | Phụ thuộc vào Gemini | Tối ưu với Under the Sea |
Chất lượng RAG | Tốt, dễ bắt đầu | Tiềm năng cao hơn, chính xác hơn |
Vector Dimension | Thường là 768 hoặc 1024 (tùy model) | Thường là 768 (cần kiểm tra model) |
Phù hợp khi | Cần triển khai nhanh, không quá cầu kỳ | Yêu cầu độ chính xác cao, muốn kiểm soát sâu |
Lời khuyên:
- Nếu bạn mới bắt đầu hoặc ưu tiên sự đơn giản, hãy bắt đầu với workflow cơ bản sử dụng Gemini. Nó đã đủ mạnh mẽ cho nhiều trường hợp sử dụng.
- Nếu bạn đặt nặng yêu cầu về chất lượng xử lý tiếng Việt, muốn tối ưu hóa kết quả tìm kiếm và sẵn sàng đầu tư thêm công sức setup, workflow nâng cao là lựa chọn đáng cân nhắc.
Kết luận
Việc xây dựng hệ thống RAG cho dữ liệu tiếng Việt trên Google Drive đã trở nên khả thi và dễ tiếp cận hơn bao giờ hết nhờ các công cụ như n8n, Supabase và sự tiến bộ của các mô hình AI như Gemini hay các mô hình chuyên biệt như Vietnamese-bi-encoder.
Qua hai phương pháp được trình bày – cơ bản với Gemini và nâng cao với Under the Sea/Bi-encoder – bạn có thể lựa chọn cách tiếp cận phù hợp nhất với nhu cầu và nguồn lực của mình. Dù chọn cách nào, việc tự động hóa quy trình xử lý và truy vấn thông tin từ kho dữ liệu Google Drive chắc chắn sẽ mang lại nhiều lợi ích trong công việc và quản lý kiến thức.
Hy vọng bài viết này cung cấp cho bạn cái nhìn chi tiết và hữu ích để bắt đầu xây dựng workflow n8n RAG Tiếng Việt của riêng mình. Hãy thử nghiệm và đừng ngần ngại tùy chỉnh để phù hợp nhất với dữ liệu và mục tiêu của bạn!