AI agent workflows với n8n
Tung Bui Thanh (TungDaDev)12 mins read

Tự động hoá không phải để máy thay người, mà để người khỏi phải làm mấy việc lặp đi lặp lại, dành sức cho những bài toán đáng làm hơn.
Ai từng dựng AI Assistant hay AI Workflow bằng code thuần (Python với LangChain/LlamaIndex, hay Java với Spring AI) chắc đều thấy một sự thật hơi buồn: phần lớn thời gian không dành cho AI hay prompt, mà để "nối ống nước" (plumbing code).
Bạn phải viết code để:
- Hứng Webhook từ Slack, Telegram, hoặc Jira.
- Xử lý xác thực OAuth2, token refresh, rate limiting.
- Parse JSON, xử lý payload méo mó, chuyển đổi kiểu dữ liệu.
- Lưu trữ ngữ cảnh hội thoại (Conversation Memory) vào Redis/Postgres.
- Gửi email, cập nhật ticket, trigger CI/CD pipeline khi có kết quả.
Vì vậy mà năm nay n8n (cùng bộ AI Agent nodes) được bàn tán khá nhiều trên các diễn đàn công nghệ và Medium. Nó ghép được khả năng suy luận của LLM với hàng trăm node tích hợp có sẵn, giao diện kéo thả dễ nhìn mà vẫn cho chèn code thoải mái (Code/JS/Python Node).
Bài này mổ xẻ kiến trúc của n8n AI Workflows: cách nghĩ khi thiết kế, các node nói chuyện với nhau ra sao ở tầng network, rồi dựng hẳn một AI Agent biết tra cứu tài liệu (RAG) và tự hành động (Tool Calling) để chạy trên production.
# n8n ai agent là gì? sự khác biệt với workflow truyền thống
Trước khi có AI nodes, n8n là công cụ deterministic workflow (luồng chạy cố định):
- Bước A xong → bước B chạy → bước C kiểm tra điều kiện (If/Else) → kết thúc.
- Nhánh rẽ nào cũng phải do dev định nghĩa sẵn, cứng ngắc (hard-coded logic).
Đưa AI Agent Node vào thì cách workflow chạy đổi hẳn:
Khác ở chỗ AI Agent giờ là bộ não điều phối (orchestrator). Bạn không phải vẽ sẵn cả chục nhánh If/Else nữa, chỉ cần đưa cho nó:
- Goal & Constraints: mục tiêu cần đạt và giới hạn những gì được làm.
- Tools: những công cụ nó được quyền dùng (Database, REST API, Send Email, Calculator...).
- Memory: bộ nhớ để nhớ các lượt nói chuyện trước.
Agent tự chạy vòng lặp ReAct (Reason + Act): nghĩ → chọn tool → nhận kết quả → xem đã xong mục tiêu chưa → trả lời hoặc gọi tool tiếp.
Nói cho chính xác thì ReAct là tên kỹ thuật gốc (model viết ra "Thought/Action" dạng văn bản rồi framework parse). AI Agent node của n8n hiện chỉ còn chế độ Tools Agent, dùng tool calling có sẵn của model (model trả về JSON gọi tool có cấu trúc, ít lỗi parse hơn); các kiểu agent cũ như ReAct Agent đã bị bỏ từ khoảng bản 1.82. Vòng lặp ý tưởng vẫn y như trên.
# kiến trúc các thành phần của n8n ai agent
Trong n8n, AI Agent không phải một node đứng riêng, mà là một cụm (composite architecture) ghép từ nhiều node chuyên trách, theo chuẩn của LangChain:
# model node (bộ não suy luận)
Node nối thẳng tới LLM provider:
- Cloud Models: OpenAI (dòng GPT), Anthropic (Claude), Google Gemini... Tên model đổi nhanh và bản cũ bị khai tử liên tục (Claude 3.5 Sonnet hay Gemini 1.5 đều đã ngừng), nên chọn theo danh sách hiện hành của từng nhà cung cấp.
- Self-hosted / Local LLMs: nối qua Ollama Chat Model hoặc dùng node OpenAI Chat Model với Base URL trỏ về server vLLM nội bộ công ty (vLLM có API tương thích OpenAI). Nhờ vậy dữ liệu nhạy cảm không bao giờ ra khỏi hạ tầng on-premise.
# memory node (bộ nhớ ngữ cảnh)
LLM là stateless, request nào gửi lên cũng độc lập. Muốn AI nhớ khách vừa nói gì ở tin nhắn trước thì n8n có mấy kiểu Memory:
- Simple Memory (tên cũ là Window Buffer Memory): giữ K tin nhắn gần nhất ngay trong bộ nhớ của tiến trình n8n. Tiện để thử, nhưng n8n restart là mất, và chạy queue mode nhiều worker thì không dùng chung được.
- Redis Chat Memory / Postgres Chat Memory (Motorhead cũng có nhưng đã bị đánh dấu deprecated): lưu lịch sử chat xuống database theo
sessionId. Hôm nay khách nhắn, mai quay lại bot vẫn nhớ tên và vụ đang xử lý dở.
# tools node (đôi bàn tay thực thi)
Đây là chỗ n8n ăn đứt mấy framework code thuần:
- Custom n8n Workflow as a Tool: biến bất kỳ workflow n8n nào khác thành tool cho AI Agent! Ví dụ làm một workflow con chuyên tính thuế hoặc nối vào CRM nội bộ, rồi cắm vào Agent kèm một dòng mô tả: "Dùng tool này khi cần tính thuế thu nhập cá nhân".
- HTTP Request Tool: để Agent tự điền tham số (đánh dấu bằng
$fromAI()hoặc placeholder) rồi gọi REST/GraphQL API bên ngoài. Node này không tự đọc OpenAPI/Swagger spec, nên phần mô tả tool và tham số phải tự viết cho rõ. - Calculator / Code Tool: LLM vốn tính toán kém, nên phép tính phức tạp cứ đẩy cho code (JavaScript hoặc Python) làm.
# vector store & retrieval (rag node)
Khi cần trả lời dựa trên tài liệu nội bộ (PDF, Confluence, Notion):
- Dùng Vector Store Tool cùng một Embeddings Model (OpenAI
text-embedding-3-smallhoặc BGE-M3 chạy local). - Phía nạp dữ liệu dùng node Vector Store ở chế độ insert, ghép thêm Document Loader và Text Splitter: n8n lo chunking, embedding và upsert vào Qdrant, Pinecone, Supabase hay PgVector, chỉ cần kéo thả. Kích thước chunk và overlap vẫn là thứ bạn phải tự chỉnh, để mặc định thì chất lượng truy hồi thường chỉ ở mức tạm.
# so sánh: n8n vs code thuần (langchain) vs dify / flowise
Lúc chọn công nghệ cho dự án, anh em hay phân vân giữa ba hướng:
| Tiêu chí | Code thuần (LangChain / Spring AI) | n8n (AI Agent Workflows) | Dify / Flowise |
|---|---|---|---|
| Tốc độ làm PoC & ra mắt | Chậm (phải viết boilerplate) | Rất nhanh (kéo thả + config) | Nhanh |
| Tích hợp bên thứ ba | Tự viết API wrapper hoặc SDK | Nhiều nhất (hàng trăm node có sẵn) | Hạn chế (chủ yếu xoay quanh chat/RAG) |
| Kiểm soát logic | Toàn quyền (100% ở mức code) | Rất cao (viết được JS/Python node) | Trung bình (bị bó trong giao diện có sẵn) |
| Debug | Khó (cần log chi tiết, trace qua Langfuse) | Rất dễ nhìn (xem input/output từng node) | Tương đối ổn |
| Bảo mật & self-hosted | Toàn quyền kiểm soát | Rất tốt (chạy Docker on-premise) | Có hỗ trợ Docker |
| Hợp nhất với | App mà AI là phần lõi, cần nhúng sâu | Tự động hoá nghiệp vụ, Ops, DevOps, RAG | Chatbot nội bộ, knowledge base đơn giản |
Nói thật lòng: nếu bạn làm sản phẩm thương mại mà AI là tính năng chính trong app mobile/web thì cứ code thuần (Spring AI / FastAPI). Còn nếu việc của bạn là nối các hệ thống nghiệp vụ đang có (Jira, Slack, CRM, ERP, Postgres) với AI để tự động hoá vận hành, thì n8n tiết kiệm cho bạn rất nhiều thời gian làm và bảo trì.
Một chuyện nên biết trước khi chọn: n8n theo giấy phép "fair-code" (Sustainable Use License), không phải open source theo định nghĩa OSI. Dùng nội bộ thoải mái, nhưng nếu định đóng gói n8n vào sản phẩm bán cho khách hay cung cấp như dịch vụ thì phải đọc kỹ license hoặc mua bản Enterprise.
# ví dụ thật: dựng ai devops assistant
Xem một ca mà team kỹ thuật hay làm với n8n: AI theo dõi lỗi và hỗ trợ incident triage.
# system prompt cho agent
Bạn là SRE AI Assistant chuyên trách phân tích và xử lý sự cố hệ thống.
Nhiệm vụ của bạn là nhận thông tin lỗi từ Webhook, tra cứu log và runbook,
sau đó đề xuất phương án khắc phục nhanh nhất.
QUY TẮC BẮT BUỘC:
1. KHÔNG BAO GIỜ được tự ý phỏng đoán nguyên nhân nếu chưa tra cứu log thông qua 'query_loki_tool'.
2. Nếu mã lỗi liên quan đến cơ sở dữ liệu (Database Connection Pool Exhausted),
hãy sử dụng 'search_runbook_tool' với từ khóa "HikariCP connection pool exhausted".
3. Kết quả trả về phải theo định dạng Markdown có cấu trúc:
- Root Cause Analysis (Ngắn gọn, đi thẳng vào vấn đề).
- Affected Services (Danh sách service bị ảnh hưởng).
- Recommended Actions (Các bước kỹ sư on-call cần làm ngay).# best practices khi đưa n8n ai agent lên production
Chạy demo trên máy local thì dễ. Còn muốn n8n AI Workflow chạy ổn định với vài nghìn request mỗi ngày trong môi trường enterprise thì cần giữ mấy nguyên tắc sau:
# quản lý chi phí token và rate limiting
- Luôn đặt giới hạn vòng lặp (Max Iterations): AI Agent Node có option
Max Iterations(nhiều phiên bản để mặc định 10). System Prompt mà mơ hồ là agent có thể gọi tool lặp đi lặp lại tới tận giới hạn, chạy hàng nghìn lần mỗi ngày thì hoá đơn API tăng rất nhanh. Đặt con số nhỏ nhất đủ cho việc của bạn (5–10 cho đa số luồng đơn giản), và theo dõi lỗi "Agent stopped due to max iterations" để biết khi nào prompt hoặc tool có vấn đề. - Chia tầng model (tiered models): bước phân loại (classification), trích xuất thông tin (extraction) thì dùng model nhỏ, rẻ, nhanh (các dòng mini/flash/haiku của từng hãng). Chỉ gọi model mạnh, đắt cho bước suy luận phức tạp.
TIP
Bớt tiền nhờ sub-workflow: đừng để một LLM ôm từ A tới Z. Dùng một Code Node hoặc regex đơn giản để kiểm tra định dạng input trước khi đưa vào Agent Node. Chặn được request rác ngay từ cửa là hoá đơn token cuối tháng nhẹ đi thấy rõ.
# xử lý lỗi (error handling & fallback)
- Mạng có thể rớt, API OpenAI có thể trả 503 hoặc dính rate limit (429).
- Luôn bật Retry on Fail ở các node HTTP và Model (cài số lần thử
Max Triesvà thời gian chờWait Between Tries; n8n chờ cố định chứ không tăng dần, nên với 429 hãy đặt khoảng chờ đủ dài). - Node nào cần xử lý lỗi riêng thì đặt On Error → Continue (using error output) để rẽ sang nhánh lỗi, và gắn một Error Workflow (bắt đầu bằng Error Trigger) cho workflow để mọi lỗi không ai bắt đều được báo về Slack/email.
- Làm sẵn sub-workflow fallback: AI Agent gặp lỗi không xử lý được thì workflow tự chuyển request sang cho người thật, kèm thông báo: "Hệ thống AI đang bận, ticket đã được chuyển đến hàng đợi của nhân viên hỗ trợ".
# bảo mật thông tin & self-hosted
- Dữ liệu khách hàng hay tài chính thì đừng bao giờ đưa lên dịch vụ cloud công cộng không có cam kết bảo mật dữ liệu (Zero Data Retention).
- Chạy n8n self-hosted bằng Docker Compose trên hạ tầng riêng của công ty, nối với Local LLM qua vLLM / Ollama. Credentials, password database, API key đều được mã hoá bằng khoá riêng (
N8N_ENCRYPTION_KEY). Nhớ sao lưu khoá này: mất nó là toàn bộ credential đã lưu không giải mã được nữa. - Tải lớn thì chạy queue mode (
EXECUTIONS_MODE=queue): instance chính nhận trigger, đẩy job qua Redis cho nhiều worker xử lý, thay vì để một tiến trình ôm hết.
# tổng kết
AI giờ không chỉ là mấy khung chat trên web nữa. Hướng đi tiếp theo là Agentic Automation: AI tự lên kế hoạch, tự làm việc với database và tự vận hành hệ thống phần mềm.
Theo mình, n8n là cách dễ nhất hiện giờ để dev đưa AI vào công việc thật, mà không phải chìm trong cả nghìn dòng code tích hợp nhàm chán.
Cứ bắt đầu bằng một việc nhỏ nhất trong ngày: tóm tắt email khách hàng, triage bug từ Sentry, hay tự viết changelog từ Git commit. Làm thử rồi sẽ thấy đỡ được bao nhiêu thời gian.
Chỉ là những ghi chép cá nhân với hy vọng mang lại chút giá trị. Nếu thấy hữu ích, đừng ngại chia sẻ cho bạn bè & đồng nghiệp nhé!
Happy coding 😎 👍🏻 🚀 🔥.