Trong bài 2, bạn đã học về cách dữ liệu chảy qua các node và biểu thức. Bây giờ, chúng ta sẽ tạo một node thực sự có khả năng suy nghĩ. Bạn sẽ xây dựng một AI Email Classifier - một quy trình làm việc đọc các email đến và tự động gắn nhãn chúng theo mục đích. Không cần code lập trình. Chỉ cần một prompt, một LLM và các mẫu luồng dữ liệu mà bạn đã biết.
Phân loại node AI của n8n
n8n có hai loại node AI, và hiểu được sự khác biệt sẽ giúp bạn tránh sử dụng một khẩu pháo khi một cái ná cũng có tác dụng.
Node root - Đây là các node độc lập mà bạn kéo vào canvas. Chúng thực hiện công việc AI:
Basic LLM Chain - Gửi một prompt, nhận một phản hồi. Không có công cụ, không có bộ nhớ. (Bài học này)
AI Agent - Một agent tự động với các công cụ, bộ nhớ và khả năng suy luận nhiều bước. (Bài học 4)
Q&A Chain - Trả lời các câu hỏi từ tài liệu. (Bài học 6)
Summarization Chain - Tóm tắt văn bản dài.
Text Classifier - Phân loại văn bản thành các danh mục.
Sentiment Analysis - Phát hiện cảm xúc tích cực/tiêu cực/trung tính.
Các node con - Chúng được gắn vào các node root để mở rộng chức năng của chúng:
Các nhà cung cấp LLM - OpenAI, Claude, Gemini, Groq, Ollama (bạn chọn mô hình nào cung cấp năng lượng cho node root)
Bộ nhớ - Simple, PostgreSQL, Redis (Bài học 5)
Công cụ - SerpAPI, Wikipedia, Code, HTTP Request (Bài học 4)
Node root xác định hành vi. Các node con xác định khả năng. Một node root AI Agent với một node con OpenAI và một node con công cụ SerpAPI tạo ra một agent sử dụng GPT-4o và có thể tìm kiếm trên web.
✅ Kiểm tra nhanh: Bạn cần tóm tắt một tài liệu dài. Bạn sẽ chọn node root nào - Basic LLM Chain, AI Agent hay Summarization Chain?
Đáp án: Summarization Chain. Nó được thiết kế chuyên dụng cho việc tóm tắt với khả năng phân đoạn tối ưu. Basic LLM Chain cũng có thể hoạt động, nhưng bạn cần xử lý các tài liệu dài theo cách thủ công. AI Agent là quá mức cần thiết - bạn không cần công cụ hoặc bộ nhớ cho việc tóm tắt đơn giản.
Xây dựng: Công cụ phân loại email AI
Hãy xây dựng quy trình làm việc AI đầu tiên của bạn. Công cụ phân loại này đọc một email và phân loại nó thành một trong các loại: Yêu cầu, hỗ trợ, khẩn cấp hoặc thư rác.
Bước 1: Thiết lập trình kích hoạt (chế độ Test)
Bắt đầu một quy trình làm việc mới. Thay vì Gmail Trigger (cần email thật), hãy sử dụng thiết lập test này:
Thêm node Manual Trigger
Thêm node Set và tạo các trường sau:
subject (chuỗi): "Server down — production is broken"
from (chuỗi): "ops-team@company.com"
body (chuỗi): "Our production server went down at 3am. All customer-facing services are offline. Need immediate help".
Điều này mô phỏng một email đến. Khi quy trình làm việc đã sẵn sàng, bạn sẽ thay thế phần này bằng Gmail Trigger thực sự.
Bước 2: Thêm Basic LLM Chain
Thêm node Basic LLM Chain sau node Set
Nhấp vào node để mở cấu hình của nó
Dưới mục Model, nhấp để thêm node con OpenAI Chat Model
Chọn thông tin xác thực OpenAI của bạn
Mô hình: gpt-4o-mini (nhanh, rẻ, đủ thông minh cho phân loại)
Trong trường Prompt, hãy viết:
Phân loại email này vào đúng một danh mục.
Danh mục:
- inquiry: các câu hỏi về sản phẩm, dịch vụ hoặc giá cả
- support: các vấn đề kỹ thuật, lỗi hoặc yêu cầu trợ giúp
- urgent: các vấn đề cần xử lý ngay lập tức
- spam: thư tiếp thị không mong muốn hoặc tin nhắn không liên quan
Tiêu đề email: {{ $json.subject }}
Người gửi email: {{ $json.from }}
Nội dung email: {{ $json.body }}
Trả lời bằng đúng một từ: inquiry, support, urgent, spam
Không cần giải thích. Không cần dấu câu. Chỉ cần từ danh mục.
Hãy chú ý đến các biểu thức - {{ $json.subject }}, {{ $json.from }}, {{ $json.body }} - lấy dữ liệu từ đầu ra của node Set. Đây là kết nối giữa luồng dữ liệu của bài học 2 và AI của bài học 3.
Bước 3: Định tuyến dựa trên phân loại
Thêm một node IF sau Basic LLM Chain. Cấu hình nó:
Điều kiện: {{ $json.text }} chứa từ urgent
Nhánh True: Thêm một node Slack (hoặc một node thông báo khác) để cảnh báo nhóm của bạn
Nhánh False: Kết nối với một node Google Sheets để ghi lại phân loại
Trường $json.text chứa phản hồi của LLM - trong trường hợp này, một từ duy nhất như "urgent" hoặc "support".
Bước 4: Kiểm tra
Nhấp vào "Test workflow". Quan sát luồng dữ liệu:
Kích hoạt thủ công
Node Set tạo dữ liệu email giả
Basic LLM Chain phân loại dữ liệu (bạn sẽ thấy "urgent" trong bảng kết quả)
Node IF định tuyến dữ liệu đến nhánh phù hợp
Thay đổi dữ liệu thử nghiệm của node Set thành các kịch bản email khác nhau và chạy lại. Thử một email chào hàng (sẽ được phân loại là spam), một câu hỏi về giá cả (inquiry) và một báo cáo lỗi (support).
✅ Kiểm tra nhanh: Điều gì xảy ra nếu LLM trả về "URGENT" (chữ hoa) nhưng node IF của bạn lại kiểm tra "urgent" (chữ thường)?
Câu trả lời: Điều kiện sẽ không đạt. Khắc phục điều này bằng cách hạ thấp đầu ra LLM bằng biểu thức node Set - {{ $json.text.toLowerCase() }} - hoặc bằng cách sử dụng "contains" thay vì "equals" trong node IF với phép so sánh được đặt là không phân biệt chữ hoa chữ thường. Luôn luôn chuẩn hóa đầu ra LLM trước khi định tuyến.
Kỹ thuật tạo prompt cho n8n
Viết prompt cho tự động hóa khác với việc trò chuyện với LLM. Trong một cuộc trò chuyện, phản hồi chi tiết là được. Trong một quy trình làm việc, bạn cần đầu ra có thể dự đoán được, có thể phân tích được mà các node tiếp theo có thể xử lý.
Ba quy tắc cho prompt n8n:
1. Giới hạn định dạng đầu ra một cách rõ ràng
Sai: "Email này thuộc loại nào?"
Đúng: "Trả lời chỉ bằng một từ: inquiry, support, urgent, spam"
2. Cung cấp đầy đủ ngữ cảnh trong prompt. LLM không lưu trữ thông tin giữa các lần thực thi. Mỗi prompt phải bao gồm tất cả dữ liệu cần thiết - đừng cho rằng nó "biết" bạn đang làm việc với cái gì.
3. Sử dụng ví dụ (few-shot) cho các tác vụ phức tạp.
Ví dụ:
- "Bạn có thể cho tôi biết về giá cả không?" → inquiry
- "Nút xuất dữ liệu không hoạt động" → support
- "Cơ sở dữ liệu sản xuất bị lỗi" → urgent
- "Mua đồng hồ giảm giá ngay!" → spam
Bây giờ hãy phân loại: {{ $json.body }}
Các ví dụ few-shot giúp cải thiện đáng kể độ chính xác phân loại. Đối với các tác vụ mà ranh giới giữa các danh mục không rõ ràng (ví dụ: "báo cáo của chúng tôi bị trễ" là khẩn cấp hay cần hỗ trợ?), việc thêm 3 - 5 ví dụ cho mỗi danh mục sẽ tạo ra sự khác biệt giữa độ chính xác 70% và 95%.
Từ thử nghiệm đến sản xuất
Sau khi công cụ phân loại hoạt động với dữ liệu kiểm thử, hãy thay đổi trình kích hoạt:
Xóa hoặc ngắt kết nối node Manual Trigger and Set
Thêm node Gmail Trigger ở đầu
Cấu hình nó với thông tin đăng nhập Gmail của bạn
Đặt trình kích hoạt là "New Email"
Cập nhật các biểu thức trong Basic LLM Chain để khớp với cấu trúc đầu ra của Gmail:
Subject: {{ $json.subject }} (giống nhau)
From: {{ $json.from.value[0].address }}
Body: {{ $json.text }} (hoặc {{ $json.snippet }} cho văn bản ngắn hơn)
Bây giờ, hãy kích hoạt quy trình làm việc. Mỗi email mới đến sẽ được tự động phân loại và định tuyến.
Những điểm chính cần ghi nhớ
Các node root (Basic LLM Chain, AI Agent, Q&A Chain) xác định hành vi của AI; các node con (nhà cung cấp LLM, bộ nhớ, công cụ) xác định khả năng
Basic LLM Chain là lựa chọn tối ưu cho các tác vụ hỏi đáp đơn giản: Phân loại, tóm tắt, trích xuất
Giới hạn đầu ra câu hỏi - định dạng dễ dự đoán giúp định tuyến tiếp theo đáng tin cậy
Sử dụng node Manual Trigger + Set cho quá trình phát triển, sau đó chuyển sang sử dụng trình kích hoạt thực sự cho môi trường sản xuất
Các ví dụ Few-shot trong prompt giúp cải thiện đáng kể độ chính xác phân loại
Câu 1:
Bạn đang xây dựng công cụ phân loại email và muốn kiểm tra nó mà không cần chờ email thực. Cách tiếp cận tốt nhất là gì?
GIẢI THÍCH:
Đây là một mẫu phát triển n8n cốt lõi. Sử dụng node Manual Trigger + Set để tạo dữ liệu thử nghiệm giả trong quá trình phát triển. Khi quy trình làm việc hoạt động, hãy thay thế Manual Trigger bằng Gmail Trigger thực. Bạn thậm chí có thể giữ cả hai trình kích hoạt được kết nối với cùng một luồng và vô hiệu hóa trình kích hoạt mà mình không sử dụng.
Câu 2:
Công cụ phân loại email của bạn trả về 'Danh mục là: support request' thay vì chỉ 'support'. Làm thế nào để khắc phục điều này?
GIẢI THÍCH:
Các mô hình LLM mặc định rất chi tiết. Cách khắc phục luôn nằm ở prompt, không phải ở mô hình. Ràng buộc định dạng đầu ra một cách rõ ràng: 'Trả lời bằng chính xác một từ trong danh sách này: inquiry, support, urgent, spam. Không giải thích. Không dấu chấm câu'. Điều này làm cho đầu ra có thể dự đoán và phân tích được bởi các node tiếp theo.
Câu 3:
Sự khác biệt giữa Basic LLM Chain và node AI Agent là gì?
GIẢI THÍCH:
Basic LLM Chain là một quy trình đơn giản nhận prompt đầu vào và nhận phản hồi đầu ra. Nó hoàn hảo khi bạn chỉ cần một LLM để phân loại, tóm tắt hoặc chuyển đổi văn bản. AI Agent (bài học 4) bổ sung tính tự chủ - nó có thể gọi các công cụ, ghi nhớ những cuộc hội thoại và xâu chuỗi nhiều bước suy luận. Hãy sử dụng node đơn giản nhất phù hợp với nhiệm vụ của bạn.
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: