Agent của bạn có các công cụ (bài học 4) và bộ nhớ (bài học 5). Nhưng khi khách hàng hỏi "Chính sách hoàn tiền của bạn là gì?", trợ lý ảo phải đoán – vì nó chưa bao giờ đọc tài liệu của bạn. RAG thay đổi điều đó. Thay vì hy vọng LLM biết câu trả lời, bạn cung cấp cho RAG các tài liệu thực tế của mình và để nó tìm thông tin liên quan trước khi trả lời.
RAG là gì?
Retrieval-Augmented Generation là một quy trình 3 bước:
Nhúng – Chuyển đổi tài liệu của bạn thành các vectơ số (embedding) và lưu trữ chúng trong cơ sở dữ liệu vectơ
Truy xuất – Khi có câu hỏi, hãy tìm các đoạn tài liệu liên quan nhất bằng cách so sánh embedding của câu hỏi với những embedding đã lưu trữ
Tạo – Cung cấp các đoạn đã truy xuất + câu hỏi cho LLM, LLM sẽ tạo ra câu trả lời dựa trên dữ liệu thực tế của bạn
Kết quả: Một AI trả lời các câu hỏi từ tài liệu của bạn thay vì bịa đặt. Câu trả lời của LLM dựa trên dữ liệu của bạn – và nó có thể trích dẫn nguồn thông tin.
Câu hỏi của người dùng → Câu hỏi nhúng → Tìm kiếm trong kho lưu trữ vector → 3 nhóm từ khóa hàng đầu
↓
LLM: "Dựa trên các nhóm từ khóa này, đây là câu trả lời..."
Tại sao lại dùng RAG thay vì nhét toàn bộ tài liệu vào prompt?
Vì giới hạn token. GPT-4o có cửa sổ ngữ cảnh 128K - khá lớn, nhưng tài liệu của một công ty cỡ trung bình dễ dàng vượt quá con số đó. RAG cho phép bạn tìm kiếm hàng triệu tài liệu và chỉ cung cấp các phần liên quan cho LLM.
✅ Kiểm tra nhanh: Một công ty có 500 trang tài liệu sản phẩm. Tại sao họ không thể chỉ dán toàn bộ vào prompt LLM?
Câu trả lời: Giới hạn token và chi phí. Ngay cả mô hình 128K token cũng không thể chứa 500 trang văn bản. Và ngay cả khi chúng có thể, việc xử lý tất cả ngữ cảnh đó cho mỗi câu hỏi sẽ cực kỳ tốn kém và chậm. RAG chỉ truy xuất 3 - 5 đoạn văn liên quan nhất, giữ chi phí thấp và phản hồi nhanh.
Quy trình RAG trong n8n
Quy trình RAG của n8n sử dụng 4 loại node:
1. Trình load tài liệu - Nhập tài liệu nguồn của bạn - PDF Loader, Google Drive Loader, Notion Loader, Web Scraper - Chuyển đổi tài liệu thành văn bản có thể được chia nhỏ và nhúng
2. Trình chia văn bản - Chia tài liệu thành các đoạn - Recursive Character Text Splitter (mặc định, hoạt động tốt với hầu hết văn bản) - Token Text Splitter (chia theo số lượng token - chính xác hơn cho đầu vào LLM) - Cấu hình kích thước đoạn (thường là 500 - 1000 token) và độ chồng chéo (10 - 20%)
3. Nhúng - Chuyển đổi các đoạn văn bản thành vectơ - OpenAI Embeddings (text-embedding-3-small rẻ và hiệu quả) - Cohere, HuggingFace, hoặc các mô hình cục bộ thông qua Ollama
4. Kho lưu trữ vector - Lưu trữ và tìm kiếm các embedding
Supabase (pgvector) - có gói miễn phí, bền vững, có thể truy vấn SQL
Pinecone - dịch vụ được quản lý, hiệu suất cao, gói miễn phí
Qdrant - mã nguồn mở, có thể tự host, tuyệt vời cho quyền riêng tư
In-Memory - chỉ dành cho thử nghiệm (sẽ reset khi khởi động lại)
Xây dựng: Bot cơ sở tri thức RAG
Bạn sẽ xây dựng một bot trả lời các câu hỏi từ một tập hợp tài liệu. Chúng ta sẽ sử dụng Supabase làm kho lưu trữ vector vì nó miễn phí, bền vững và kết hợp tốt với n8n.
Phần A: Quy trình nhập tài liệu
Quy trình này nhúng tài liệu của bạn vào kho lưu trữ vector. Bạn chạy nó một lần (hoặc bất cứ khi nào tài liệu thay đổi).
Bước 1: Tạo quy trình nhập dữ liệu
Quy trình mới → Thêm Manual Trigger
Thêm Document Loader - trong ví dụ này, hãy sử dụng Default Data Loader và dán một số văn bản thử nghiệm, hoặc sử dụng PDF Loader nếu bạn có file PDF để upload lên
Thêm Recursive Character Text Splitter:
Kích thước khối: 800 ký tự
Độ chồng lấp khối: 100 ký tự
Thêm node Supabase Vector Store ở chế độ Insert:
Kết nối với phiên bản Supabase của bạn (tạo dự án miễn phí tại supabase.com)
Bảng: documents (bạn cần bật tiện ích mở rộng pgvector và tạo bảng này - Supabase có thiết lập một lần nhấp chuột cho việc này)
Thêm node con OpenAI Embeddings vào kho lưu trữ vector:
Mô hình: text-embedding-3-small
Điều này chuyển đổi mỗi khối văn bản thành một vector 1536 chiều
Kết nối chúng: Trình kích hoạt → Trình load → Bộ chia → Kho lưu trữ vectơ (với Embeddings được đính kèm)
Bước 2: Chạy quy trình thu thập dữ liệu
Nhấp vào "Test workflow". Quan sát quá trình phân đoạn, nhúng và lưu trữ tài liệu của bạn. Kiểm tra bảng điều khiển Supabase của bạn - bạn sẽ thấy các hàng trong bảng tài liệu, mỗi hàng chứa một đoạn văn bản và phần nhúng vector tương ứng.
Phần B: Quy trình làm việc trả lời câu hỏi
Quy trình làm việc này nhận câu hỏi của người dùng và truy xuất câu trả lời từ các tài liệu đã lưu trữ của bạn.
Bước 1: Tạo quy trình làm việc Q&A
Quy trình làm việc mới → thêm Chat Trigger
Thêm node Q&A Chain (không phải AI Agent - Q&A Chain được tối ưu hóa cho việc truy xuất tài liệu)
Đính kèm node con OpenAI Chat Model (gpt-4o-mini là phù hợp cho Q&A)
Đính kèm node con Supabase Vector Store ở chế độ Retrieve:
Kết nối với cùng một phiên bản và bảng Supabase
Top K: 4 (truy xuất 4 đoạn văn bản liên quan nhất)
Đính kèm OpenAI Embeddings (cùng mô hình bạn đã sử dụng để thu thập dữ liệu - điều này rất quan trọng)
Bước 2: Kiểm tra
Nhấp vào "Test workflow". Hãy đặt câu hỏi về tài liệu của bạn:
"Chính sách hoàn tiền là gì?"
"Làm thế nào để đặt lại mật khẩu?"
"Gói Pro bao gồm những tính năng nào?"
Q&A Chain sẽ tìm kiếm trong kho lưu trữ vector, truy xuất các đoạn thông tin liên quan nhất và tạo ra câu trả lời dựa trên tài liệu thực tế của bạn.
✅ Kiểm tra nhanh: Bạn đã nhập tài liệu bằng mô hình text-embedding-3-small của OpenAI. Đối với quy trình truy xuất, bạn có thể sử dụng mô hình nhúng khác không?
Câu trả lời: Không. Bạn phải sử dụng cùng một mô hình nhúng cho cả việc nhập và truy xuất. Các mô hình khác nhau tạo ra những biểu diễn vector khác nhau - tìm kiếm với các mô hình nhúng không khớp sẽ trả về kết quả không liên quan. Đây là một lỗi thường gặp khi chuyển đổi mô hình giữa chừng dự án.
Phân đoạn: Quyết định sống còn
Chiến lược phân đoạn quyết định chất lượng RAG của bạn hơn là việc lựa chọn mô hình. Các đoạn thông tin kém chất lượng = câu trả lời kém chất lượng.
Kích thước phân đoạn
Ưu điểm
Nhược điểm
Phù hợp để
Nhỏ (200 - 400 token)
Truy xuất chính xác
Có thể chia nhỏ bối cảnh quan trọng
Cơ sở kiến thức dạng Hỏi đáp
Trung bình (500 - 1000 token)
Độ chính xác/ngữ cảnh cân bằng
Sự đánh đổi tiêu chuẩn
Hầu hết các tài liệu
Lớn (1000 - 2000 token)
Toàn bộ ngữ cảnh được bảo toàn
Có thể bao gồm văn bản không liên quan
Bài viết dài, báo cáo
Sự chồng lấp cũng rất quan trọng. Nếu không có sự chồng lấp, ranh giới giữa các đoạn văn có thể chia tách câu - và thông tin quan trọng không nằm trong cả hai đoạn văn. Sự chồng lấp từ 10 - 20% đảm bảo các câu ở ranh giới giữa những đoạn văn xuất hiện trong cả hai đoạn văn liền kề.
Nguyên tắc chung: Bắt đầu với các đoạn văn 800 token và sự chồng lấp 100 token. Kiểm tra với các câu hỏi thực tế. Nếu câu trả lời thiếu ngữ cảnh liên quan, hãy tăng kích thước phân đoạn. Nếu câu trả lời chứa quá nhiều văn bản không liên quan, hãy giảm kích thước phân đoạn.
RAG, tinh chỉnh, ngữ cảnh dài
Ba cách tiếp cận để truyền đạt kiến thức cho một LLM:
Cách tiếp cận
Khi nào nên sử dụng
Sự đánh đổi
RAG
Kiến thức động, luôn thay đổi (tài liệu, chính sách, thông tin sản phẩm)
Phụ thuộc vào chất lượng truy xuất — dữ liệu đầu vào kém chất lượng sẽ dẫn đến kết quả đầu ra kém chất lượng
Tinh chỉnh
Dạy mô hình một phong cách hoặc khuôn mẫu cụ thể
Đắt tiền, cập nhật chậm, yêu cầu dữ liệu huấn luyện
Ngữ cảnh dài
Kho kiến thức nhỏ gọn, cố định (<100 trang)
Chi phí mỗi truy vấn rất cao, không thể mở rộng quy mô vượt quá giới hạn ngữ cảnh
Đối với hầu hết các quy trình kinh doanh, RAG là lựa chọn phù hợp. Tài liệu của bạn thay đổi, chính sách của bạn cập nhật, sản phẩm của bạn phát triển - và bạn không muốn phải huấn luyện lại mô hình mỗi lần.
Nâng cao: RAG với AI Agent
Q&A Chain rất tuyệt vời cho việc truy xuất tài liệu đơn giản. Nhưng nếu bạn muốn một agent có thể vừa tìm kiếm tài liệu của bạn vừa sử dụng các công cụ khác (tìm kiếm trên web, thực thi code)?
Kết nối kho vector dưới dạng Vector Store Tool với node AI Agent thay vì sử dụng Q&A Chain. Khi đó, agent có thể quyết định khi nào nên kiểm tra tài liệu của bạn và khi nào nên tìm kiếm trên web - kết hợp RAG với các mẫu sử dụng công cụ từ bài học 4.
Cập nhật prompt hệ thống:
Bạn có quyền truy cập vào:
- Kho kiến thức nội bộ (vector store): Sử dụng cho các chính sách nội bộ, tài liệu sản phẩm, quy trình
- Tìm kiếm trên web: Sử dụng cho thông tin bên ngoài, tiêu chuẩn ngành, dữ liệu đối thủ cạnh tranh
Luôn kiểm tra kho kiến thức TRƯỚC tiên đối với các câu hỏi nội bộ.
Chỉ sử dụng tìm kiếm trên web nếu kho kiến thức không có câu trả lời.
Những điểm chính cần ghi nhớ
RAG cho phép AI của bạn trả lời các câu hỏi từ chính tài liệu của bạn - chứ không phải từ dữ liệu huấn luyện của LLM
Quy trình gồm: Nhập liệu (load → chia nhỏ → nhúng → lưu trữ) sau đó truy vấn (câu hỏi → nhúng → tìm kiếm → tạo)
Việc chia nhỏ là quyết định có tác động lớn nhất - hãy bắt đầu với 800 token và 100 token trùng lặp, sau đó tinh chỉnh
Sử dụng cùng một mô hình nhúng cho cả việc nhập liệu và truy xuất - các mô hình không khớp sẽ tạo ra kết quả không tốt
Supabase (pgvector) là một lựa chọn miễn phí tốt để lưu trữ vector; Pinecone và Qdrant là các lựa chọn thay thế
Kết hợp RAG với AI Agent để xây dựng các trợ lý tìm kiếm tài liệu của bạn và sử dụng những công cụ bên ngoài
Câu 1:
Bạn cần xây dựng một bot FAQ trả lời các câu hỏi từ 200 tài liệu PDF. Bạn sẽ chọn kho lưu trữ vector n8n nào?
GIẢI THÍCH:
200 file PDF là quá nhiều dữ liệu để lưu trữ trong bộ nhớ (kho lưu trữ trong bộ nhớ sẽ bị reset khi khởi động lại và không thể xử lý các bộ sưu tập lớn). Việc chuyển trực tiếp tất cả các file PDF đến LLM sẽ vượt quá cửa sổ ngữ cảnh của bất kỳ mô hình nào. Supabase với pgvector cung cấp cho bạn khả năng lưu trữ bền vững, tìm kiếm tương đồng và có thể mở rộng đến hàng triệu embedding. Pinecone và Qdrant cũng là những lựa chọn tốt.
Câu 2:
Bot RAG của bạn trả về câu trả lời không đúng mặc dù thông tin chính xác nằm trong tài liệu của bạn. Nguyên nhân có khả năng nhất là gì?
GIẢI THÍCH:
Việc chia khối là điểm lỗi phổ biến nhất của RAG. Các khối quá lớn bao gồm văn bản không liên quan gây nhầm lẫn cho LLM. Các khối quá nhỏ chia nhỏ ngữ cảnh quan trọng - 'câu trả lời cho câu hỏi A' nằm trong một khối và 'dữ liệu hỗ trợ' nằm trong một khối khác. Hãy bắt đầu với các khối 500 - 1000 token với độ trùng lặp 10 - 20% giữa các khối, sau đó điều chỉnh dựa trên kết quả của bạn.
Câu 3:
RAG giải quyết vấn đề gì mà việc tinh chỉnh không giải quyết được?
GIẢI THÍCH:
Việc tinh chỉnh tích hợp kiến thức vào trọng số của mô hình - việc cập nhật nó yêu cầu huấn luyện lại, điều này tốn tiền và thời gian. RAG lưu trữ kiến thức trong một kho lưu trữ bên ngoài mà bạn có thể cập nhật bất cứ lúc nào. Thay đổi tài liệu sản phẩm của bạn? Chỉ cần nhúng lại chúng. Không cần huấn luyện lại. Sự đánh đổi: RAG phụ thuộc vào chất lượng truy xuất, trong khi việc tinh chỉnh nội hóa các mẫu. Đối với hầu hết các trường hợp sử dụng trong kinh doanh, RAG thắng thế về tính linh hoạt.
Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây: