Đã cho Agent đọc bảng giá qua RAG mà vẫn bịa 28% câu hỏi mới: 5 lớp chặn bịa với n8n 2.42.0
Nối tiếp bài tuần trước về lớp làm sạch trước khi cho Agent tra cứu, mấy hôm nay trong cộng đồng lại rộ lên một câu hỏi rất giống nhau: "Bên em đã cho Agent đọc bảng giá qua RAG rồi mà nó vẫn bịa giá mới, có phải do model kém không anh?"
Một case được chia sẻ khá kỹ: shop bán phụ kiện điện thoại đã nối Agent với kho tài liệu giá và chính sách, vậy mà khách hỏi giá ốp lưng mẫu mới vừa về, Agent vẫn báo giá cũ từ 2 tháng trước, lệch 120.000 đồng một đơn. Một bạn khác làm dịch vụ lắp camera cũng đã có tài liệu hãng trong hệ thống, Agent vẫn bịa bảo hành 24 tháng trong khi hãng mới đổi xuống 12 tháng, phải đi sửa 9 đơn trong 2 ngày.
Đợt kiểm tra được chia sẻ ghi nhận con số rất rõ: trong 120 câu hỏi về thông tin thay đổi theo thời gian, dù đã có tài liệu tham chiếu, vẫn có 34 câu trả lời sai hoặc bịa, chiếm 28%. Mỗi câu sai mất trung bình 25 phút xử lý lại, mỗi tuần mất gần 14 giờ chỉ để chữa cháy cho những câu lẽ ra tra một phát là ra.
Theo các trao đổi trong cộng đồng, nguyên nhân thật thường không nằm ở model. Việc đưa tài liệu cho Agent đọc chỉ là 1 trong 5 lớp cần có. Tài liệu lấy về không liên quan, câu trả lời không gắn với nguồn, Agent vừa đọc vừa ghi nên quyền quá rộng, và đầu ra không ai kiểm tra lại — bất kỳ chỗ nào trong số đó hở là Agent bịa như chưa từng được đọc gì. Bản n8n 2.42.0 ra ngày 29/09/2026 vừa bổ sung đúng mấy mảnh ghép còn thiếu cho khung này: Agent dùng Agent qua AI Agent Tool, gọi tool ngoài qua MCP Client Tool, cộng với khả năng quan sát hành vi Agent qua OpenTelemetry đã có từ bản 2.15 và 2.20.
Một hướng tiếp cận phổ biến được nhiều người áp dụng thành công gồm 4 kỹ thuật, làm đúng thứ tự trong n8n:
Ép Agent trích đúng nguồn bằng Structured Output Cách làm: sau node đọc tài liệu hoặc node tìm kiếm, đặt một node Function rút gọn kết quả thành các đoạn ngắn có đánh số đoạn 1, 2, 3. Agent chỉ được trả lời bằng Structured Output gồm 2 trường: câu trả lời và số hiệu đoạn nguồn. Thêm một node IF ngay sau đó: nếu thiếu số hiệu nguồn hoặc số hiệu không tồn tại thì rẽ sang câu trả lời dự phòng đã soạn sẵn, không cho đi tiếp. Theo chia sẻ từ các bạn đã làm, riêng lớp này đã loại được hơn một nửa câu trả lời không có căn cứ, vì Agent buộc phải dừng lại khi không tìm thấy nguồn thay vì tự bịa tiếp.
Tách Agent đọc ra khỏi Agent ghi Cách làm: dùng AI Agent Tool để bọc một Agent con chỉ đọc thành tool cho Agent mẹ gọi, Agent con này chỉ thấy tool đọc như tài liệu, bảng giá, cache Sheets. Mọi thao tác ghi như tạo đơn, gửi tin nhắn, cập nhật Sheets nằm ở Agent mẹ hoặc một Agent con khác, không bao giờ nằm chung. Với nguồn ngoài hệ thống thì gọi qua MCP Client Tool thay vì mở quyền trực tiếp, để giới hạn được tool nào được phép chạm vào. Bật OpenTelemetry để nhìn thấy Agent đã gọi tool nào, lúc nào, theo thứ tự ra sao, từ đó mới biết câu sai đến từ bước lấy tin hay bước sinh câu chữ.
Giữ lại lớp làm sạch và cache từ bài trước Cách làm: đặt node Function làm sạch trước mọi node tìm kiếm ra ngoài, chỉ giữ từ khóa sản phẩm, xóa hết họ tên, số điện thoại, địa chỉ, mã đơn. Sau node tìm kiếm thì ghi cặp từ khóa và bản tóm tắt vào Google Sheets kèm ngày tra cứu, câu trùng trong 7 ngày thì đọc cache khỏi gọi lại. Trong phần cài đặt bật Execution data redaction để lịch sử chạy không lưu thông tin nhạy cảm. Theo chia sẻ từ các bạn đã triển khai, cách này cắt được khoảng 60% số lần gọi ra ngoài.
Tách luồng lỗi ra riêng bằng Error Trigger Cách làm: gắn Error Trigger trỏ sang một luồng xử lý lỗi riêng, từ bản 2.38 các lần chạy lỗi không còn tính vào quota nên việc tách này không tốn thêm chi phí. Khi node đọc tài liệu trả về rỗng, quá hạn, hoặc IF báo thiếu nguồn thì Agent nhận một câu trả lời dự phòng đã soạn sẵn dạng đang kiểm tra lại thông tin mới, thay vì tự bịa tiếp cho xong chuyện.
Sơ đồ n8n được cộng đồng chia sẻ nhiều nhất có thứ tự như sau: • Webhook nhận tin nhắn, node Set tách riêng câu hỏi và thông tin khách • Function làm sạch chỉ giữ từ khóa tìm kiếm • IF kiểm tra cache Sheets 7 ngày, có thì đọc luôn • Chưa có thì đọc tài liệu nội bộ, thiếu mới gọi tìm kiếm ngoài qua MCP Client Tool giới hạn 3 kết quả từ domain tin cậy • Function gắn số hiệu từng đoạn nguồn cho Agent trích dẫn • Agent trả lời qua Structured Output bắt buộc kèm số hiệu nguồn, IF kiểm tra lại, thiếu nguồn thì trả lời dự phòng • Error Trigger hứng mọi lỗi và ghi vết qua OpenTelemetry để xem lại tool nào gây sai
Kết quả thực tế từ các bạn triển khai sau 3 tuần: • Câu trả lời bịa về giá và chính sách: từ 34 câu sai trên 120 câu hỏi xuống còn 9 câu, giảm 73% • Thời gian chữa cháy mỗi tuần: từ 14 giờ xuống còn khoảng 4 giờ • Số lần gọi ra ngoài: giảm 60% nhờ đọc từ cache Sheets, chi phí tìm kiếm mỗi tháng giảm một nửa
Câu đúc kết: đưa tài liệu cho Agent đọc mới chỉ là lớp đầu tiên, khóa được đầu ra bằng trích nguồn và tách quyền thì câu bịa mới hết đất sống.
Chi tiết checklist 4 kỹ thuật cộng mẫu Function gắn số hiệu nguồn và bảng cache Sheets mình để tại link Blog dưới phần bình luận nhé!
Bạn đang dừng ở lớp nào? Đã cho đọc tài liệu, đã ép trích nguồn, hay đã tách Agent đọc khỏi Agent ghi? Chia sẻ cho mọi người tham khảo nhé.
Bình luận
Nhận checklist 4 lớp chống bịa cộng mẫu Function gắn số hiệu nguồn và bảng cache Sheets: https://tyauto.name.vn/posts/2026-10-04-personal-feed-anti-hallucination-5-layer.html
Hostinger VPS — 9router proxy
Proxy định tuyến API AI: giảm chi phí token và tự phân phối yêu cầu qua hơn 40 nhà cung cấp LLM. Triển khai một cú nhấp, sao lưu tự động hằng tuần. giảm tới 69%
Hostinger VPS — n8n tự lưu trữ
Chạy n8n tự lưu trữ: workflow không giới hạn, số lệnh chạy đồng thời không giới hạn, dùng được node cộng đồng. Hoàn tiền trong 30 ngày. giảm tới 69%