Mô hình Router Agent trong n8n: Giảm chi phí API và tăng tốc độ xử lý tin nhắn
Hồi mới bắt tay vào làm bot AI chăm sóc khách hàng trên n8n, mình có thói quen tiện đâu nối đấy: Cứ có tin nhắn đến từ Webhook là đẩy thẳng vào một model duy nhất như Claude hay GPT.
Chạy test vài ba tin mẫu thì mượt, nhưng đến khi đưa vào vận hành thật cho hệ thống có hàng trăm khách nhắn mỗi ngày, mình gặp ngay 2 vấn đề lớn:
- Khách chỉ nhắn "Alo", "Shop ở đâu", "Cho mình xin giá" mà workflow vẫn gọi model đắt tiền -> Tốn token vô ích mà khách phải chờ 3-5 giây mới nhận được phản hồi.
- Cuối tháng nhìn lại bảng chi phí API tăng vọt ngoài dự tính.
Kinh nghiệm mình rút ra là: Đừng bao giờ bắt một model xịn phải xử lý mọi loại câu hỏi.
Cách mình xử lý triệt để bài toán này trong n8n là chèn một Node Code JavaScript đóng vai trò Router (bộ định tuyến) ngay sau Webhook đầu vào để chia luồng tin nhắn:
- Luồng 1 (Chào hỏi, FAQ nhanh): Bắt bằng Regex đơn giản (tốn 0 token). Khách nhắn chào hỏi hoặc để lại số điện thoại -> Điều hướng sang model nhẹ, phản hồi dưới 1 giây như DeepSeek-V3 hoặc GPT-4o-mini.
- Luồng 2 (Tra cứu thông tin): Hỏi về chính sách, bảng giá, hướng dẫn sử dụng -> Điều hướng vào Vector Store (RAG) để lấy dữ liệu nội bộ.
- Luồng 3 (Xử lý tác vụ khó): Yêu cầu phân tích số liệu, so sánh hoặc cần suy luận nhiều bước -> Lúc này mới gọi đến các model chuyên sâu như DeepSeek-R1 hoặc Claude.
Đoạn code phân loại logic trong node Code n8n:
const item = $input.first().json;
const userMessage = (item.message || item.text || "").trim().toLowerCase();
// 1. Phân loại theo Regex nhanh (Zero Token Cost)
const isGreeting = /^(chào|alo|hi|hello|hey|shop ơi|ad ơi)\b/i.test(userMessage);
const isPhoneExtract = /(0[3|5|7|8|9])+([0-9]{8})\b/.test(userMessage);
let route = "fast_track";
let targetModel = "deepseek-v3";
let maxTokens = 300;
if (isGreeting || isPhoneExtract) {
route = "fast_track";
targetModel = "gpt-4o-mini";
maxTokens = 150;
} else if (userMessage.includes("tư vấn") || userMessage.includes("bảo hành") || userMessage.includes("giá")) {
route = "rag_knowledge";
targetModel = "deepseek-v3";
maxTokens = 600;
} else if (userMessage.includes("phân tích") || userMessage.includes("so sánh") || userMessage.includes("tại sao") || userMessage.length > 200) {
route = "deep_reasoning";
targetModel = "deepseek-r1";
maxTokens = 2000;
}
return {
json: {
originalMessage: item.message,
routeCategory: route,
targetModel: targetModel,
maxTokens: maxTokens,
routedAt: new Date().toISOString()
}
};
Sau khi áp dụng cấu trúc này, hơn 60% tin nhắn đơn giản được giải quyết ngay tức thì, chi phí API hàng tháng giảm được khoảng 70% mà trải nghiệm của khách lại mượt hơn rất nhiều.
Anh em đang xây dựng bot n8n có dùng tầng định tuyến nào tương tự không, cùng chia sẻ kinh nghiệm nhé!
Bình luận
🔗 Toàn bộ phân tích kiến trúc chi tiết và code JavaScript mình có viết lại cẩn thận tại Blog: https://tyauto.name.vn/posts/2026-08-29-personal-feed-router-agent-pattern.html
Gigabyte RTX 5060 Ti Windforce MAX OC 16GB GDDR7
Card đồ họa tối ưu chi phí tốt nhất để tự host Local LLMs (DeepSeek, Llama 3) và chạy n8n mượt mà tại nhà.