n8n Guides

Nối OpenAI và Claude vào n8n: parse JSON, bắt lỗi và kiểm soát chi phí token (2026)

a adminvigomedia 17 phút đọc

Để nối OpenAI hoặc Claude vào n8n, bạn cắm node chat model (OpenAI Chat Model hoặc Anthropic Chat Model) vào một node gốc như Basic LLM Chain hay AI Agent, khai báo API key trong Credentials, rồi bật “Require Specific Output Format” + Structured Output Parser để LLM trả về JSON đúng cấu trúc. Không cần biết code. Phần khó không nằm ở chỗ “gọi được AI” — nó nằm ở ba chỗ: ép model trả JSON *ổn định*, bóc đúng field ở node sau, và bắt lỗi khi API rate-limit hay timeout. Bài này đào đúng ba chỗ đó.

> Đây là Spoke 4 trong series n8n cho người Việt: tự động hóa từ 0. Nếu bạn chưa dựng được n8n, đọc bài nền trước: n8n là gì và tự động hóa được những việc gìCài n8n self-host trên VPS. Bài này giả định bạn đã có n8n chạy được.

TL;DR — nhớ nhanh 6 ý

  • n8n nối AI qua node chat model (OpenAI Chat Model / Anthropic Chat Model) — đây là *sub-node* cắm vào node gốc, không chạy một mình.
  • Ba node gốc hay dùng: Basic LLM Chain (gọi 1 phát, rẻ, dễ đoán), AI Agent (có tool + memory), và node OpenAI “Message a Model” (gọi thẳng, không cần LangChain).
  • Muốn LLM trả JSON đúng cấu trúc: bật Require Specific Output Format rồi gắn Structured Output Parser.
  • Structured Output Parser hay lỗi khi gắn vào Agent — n8n khuyên tách một Basic LLM Chain riêng để parse (nguồn: n8n Docs).
  • Bắt lỗi API theo 3 lớp: Retry On Fail trên node → On Error selector → Error Trigger workflow toàn cục.
  • Chi phí tính theo token: tầng rẻ (Claude Haiku / GPT budget) đủ cho tóm tắt & phân loại; để dành model đắt cho việc khó.

Nối OpenAI hoặc Claude vào n8n bằng node nào?

Bạn nối qua node chat model, và node đó phải cắm vào một node gốc — nó không chạy độc lập. Trong n8n, Anthropic Chat Model và OpenAI Chat Model là *sub-node*: chúng cung cấp “bộ não” cho một node gốc như Basic LLM Chain hoặc AI Agent (nguồn: n8n Docs — Anthropic Chat Model). Bạn kéo node gốc ra trước, rồi bấm điểm nối “Chat Model” bên dưới để chọn OpenAI hay Claude.

Có ba con đường phổ biến, và chọn sai là lý do #1 khiến workflow vừa chậm vừa đắt:

Cách nối Khi nào dùng Ưu Nhược
OpenAI node → “Message a Model” Gọi thẳng 1 câu hỏi, không cần LangChain Đơn giản nhất, ít lớp Chỉ OpenAI; ít tùy chọn parser
Basic LLM Chain + chat model Tác vụ 1 chiều: viết, tóm tắt, phân loại, trả JSON Rẻ, dễ đoán, parse JSON ổn định Không tự gọi tool, không nhớ hội thoại
AI Agent + chat model + tools Cần model tự quyết định gọi tool / tra web / nhớ ngữ cảnh Mạnh, linh hoạt Đắt hơn, JSON kém ổn định, khó debug

Nguyên tắc của mình: nếu việc chỉ là “đưa input → nhận output có cấu trúc”, luôn chọn Basic LLM Chain, đừng đụng tới Agent. Agent chỉ xứng đáng khi model thật sự cần *ra quyết định* gọi công cụ. (Muốn hiểu khi nào cần Agent thật sự, xem AI Agent là gì.)

Lấy API key và cắm credential vào n8n thế nào?

Bạn tạo API key ở trang nhà cung cấp, rồi dán vào phần Credentials của node — một lần, dùng lại cho mọi workflow. Với Claude: vào console.anthropic.com → API Keys → tạo key → trong n8n chọn node Anthropic → Credential to connect with → Create New → dán key. Với OpenAI: platform.openai.com → API keys → làm y hệt trong node OpenAI.

Ba điều đừng quên:

  1. Nạp tiền/credit trước. API tính theo lượng dùng, không phải gói tháng như ChatGPT/Claude web. Key không có credit sẽ trả lỗi 400/402.
  2. Đừng hard-code key vào node HTTP Request. Dùng Credentials để n8n mã hóa và không lộ key khi export workflow.
  3. Tách key theo môi trường (test/production) để dễ khóa khi rò rỉ.

Làm sao bắt LLM trả JSON đúng cấu trúc?

Bật tùy chọn “Require Specific Output Format” trên node gốc, rồi gắn node Structured Output Parser vào điểm nối vừa hiện ra. Đây là cách chính thức của n8n để ép output thành JSON theo schema (nguồn: n8n Docs — Structured Output Parser). Parser cho hai cách khai báo cấu trúc:

  • Generate from JSON Example — dán một object JSON mẫu, n8n tự suy ra schema từ tên và kiểu field. Nhanh, hợp người không rành JSON Schema.
  • Manual JSON Schema — tự viết schema. Lưu ý: n8n không hỗ trợ $ref trong schema, nên viết phẳng, đừng tham chiếu chéo (nguồn: n8n Docs).

Ví dụ JSON mẫu cho một node phân loại bình luận:


{
  "sentiment": "tích cực",
  "chu_de": "giá sản phẩm",
  "can_phan_hoi": true
}

Dán mẫu này vào parser, model sẽ luôn trả về đúng ba field đó — thay vì một đoạn văn bạn phải tự cắt chuỗi.

Vì sao Structured Output Parser hay lỗi với Agent, sửa thế nào?

Vì Agent vừa suy nghĩ vừa gọi tool nên output cuối thường lẫn “rác” khiến parser vỡ — n8n khuyến nghị tách một Basic LLM Chain riêng chỉ để parse. Tài liệu chính thức nói thẳng: “Structured output parsing thường không đáng tin khi dùng với agents. Nếu workflow dùng agent, nên dùng một LLM-chain riêng để nhận dữ liệu từ agent và parse — kết quả ổn định hơn nhiều” (nguồn: n8n Docs — Common issues).

Hai mẹo cứu bug hay gặp:

  • Parser trả về string thay vì object? Đây là lỗi kinh điển (issue #17535 trên GitHub n8n). Cách chắc ăn: để Agent trả text tự do → node kế tiếp là Basic LLM Chain + parser làm nhiệm vụ “nắn” thành JSON.
  • Cần JSON ở bước giữa (không phải bước cuối)? Structured Output Parser chỉ nắn *output cuối* của agent. Muốn định dạng ở bước trung gian, hãy nhét schema/ví dụ vào System Message cho model làm khuôn (nguồn: n8n Docs).

Bóc field JSON từ output ở node sau thế nào?

Khi output đã là JSON có cấu trúc, bạn tham chiếu thẳng bằng expression {{ $json.ten_field }} ở node tiếp theo. Ví dụ với JSON phân loại ở trên, node IF sau đó dùng {{ $json.output.can_phan_hoi }} để rẽ nhánh. Nếu output nằm trong một mảng, bạn dùng {{ $json.output[0].chu_de }}.

Một cái bẫy ít người biết: sub-node luôn resolve expression về item đầu tiên. Tài liệu n8n ghi rõ — cho 5 item name, biểu thức {{ $json.name }} trong sub-node *luôn* trả về name đầu tiên, không lặp qua từng item như node thường (nguồn: n8n Docs). Nên khi xử lý danh sách, hãy để node gốc lặp, đừng kỳ vọng sub-node tự lặp giúp.

Xử lý lỗi khi gọi API: retry thế nào cho đúng?

Dùng 3 lớp: Retry On Fail trên node → On Error selector → một Error Trigger workflow toàn cục. Đây là cấu trúc “chống vỡ” mà mọi workflow gọi API nên có, vì API AI *sẽ* thỉnh thoảng rate-limit hoặc timeout — không phải nếu, mà là khi nào.

  1. Lớp 1 — Retry On Fail (ngay trên node AI). Mở node → Settings → bật *Retry On Fail*. Đặt Max Tries (tối đa 5) và Wait Between Tries (tối đa 5000ms) để tự thử lại khi lỗi tạm thời như 429 rate limit (nguồn: n8n Resources, 2026).
  2. Lớp 2 — On Error selector. Chọn *Continue* hoặc *Continue (using error output)* để một item hỏng không giết cả batch — cực quan trọng khi chạy hàng loạt.
  3. Lớp 3 — Error Trigger workflow. Tạo một workflow riêng bắt đầu bằng node Error Trigger, gán vào Settings → *Error workflow*. Khi bất kỳ workflow nào fail, nó nhận object gồm: tên workflow, node lỗi, message, execution ID và link tới lần chạy hỏng — rồi bắn cảnh báo về Telegram/email cho bạn (nguồn: n8n Resources, 2026).

Chi phí token khi nối AI vào n8n là bao nhiêu?

API tính tiền theo token input + output, không phải theo lần gọi — và chênh lệch giữa các tầng model rất lớn, nên chọn đúng tầng là cách tiết kiệm mạnh nhất. Ảnh chụp giá tháng 8/2026 (nguồn tổng hợp bên thứ ba, giá đổi liên tục — kiểm lại trước khi tính):

Nhóm model Giá input (~USD/1M token) Giá output (~USD/1M token) Hợp việc gì
Tầng rẻ — Claude Haiku / GPT budget ~0,2–1 ~1,2–5 Phân loại, tóm tắt, trích field
Tầng giữa — Claude Sonnet / GPT mid ~2–3 ~12–15 Viết bài, biến đổi nội dung
Tầng cao — Claude Opus / GPT flagship ~5 ~25–30 Reasoning khó, việc nhiều bước

Ba đòn giảm chi phí thật:

  • Batch processing giảm ~50% trên cả OpenAI lẫn Anthropic cho việc không cần realtime (nguồn: Anthropic/OpenAI pricing 2026).
  • Prompt caching cắt tới ~90% chi phí phần input lặp lại — cực lợi khi bạn gửi cùng một system prompt dài cho hàng trăm item (nguồn: Anthropic pricing 2026).
  • Đặt max tokens có trần. Node cho phép giới hạn *Maximum Number of Tokens*; đừng để mở → một prompt lỗi có thể đốt tiền output.

Nên chọn OpenAI hay Claude cho workflow n8n?

Chọn theo việc, không theo thương hiệu: Claude thường bám định dạng JSON tốt hơn cho tác vụ trích xuất dữ liệu; OpenAI có hệ node gọn (“Message a Model”) và tầng budget rất rẻ cho việc đơn giản. Trong n8n cả hai đều là sub-node cắm y hệt nhau, nên bạn có thể swap qua lại chỉ bằng cách đổi node chat model mà giữ nguyên phần còn lại của workflow — hãy thử A/B trên chính data của bạn thay vì tin review chung. (Đào sâu Claude cho creator: Claude cho Creator Việt.)

Với các tác vụ cần trả JSON schema chặt, mình để mặc định là Claude tầng Haiku/Sonnet; với việc phân loại số lượng cực lớn, GPT tầng budget rẻ hơn và đủ dùng.

6 bước nối Claude vào n8n trả JSON có cấu trúc

  1. Kéo node Basic LLM Chain ra canvas (Add node → AI → Basic LLM Chain).
  2. Cắm Anthropic Chat Model vào điểm nối “Chat Model” bên dưới; chọn Credential → dán API key Claude.
  3. Viết Prompt rõ ràng: nêu nhiệm vụ + nhấn “trả về đúng JSON theo mẫu, không thêm chữ nào ngoài JSON”.
  4. Bật Require Specific Output Format trên Basic LLM Chain → điểm nối Output Parser hiện ra.
  5. Gắn Structured Output Parser → chọn *Generate from JSON Example* → dán JSON mẫu các field bạn cần.
  6. Bật Retry On Fail (Settings của node, Max Tries 3, Wait 2000ms) và gán Error workflow. Chạy thử 1 item, kiểm {{ $json.output }} ra đúng object.

Xong bước 6, bạn đã có một khối AI “đầu vào đầu ra sạch” để cắm vào bất kỳ pipeline nào — ví dụ pipeline tự viết bài đăng WordPress mình dựng ở bài Workflow n8n tự viết bài và đăng WordPress.

Kinh nghiệm thực chiến của Thuật

Mình chạy pipeline n8n gọi LLM để sinh nội dung và script đa ngôn ngữ mỗi ngày, và ba cú vấp dưới đây đã đốt của mình khá nhiều thời gian lẫn tiền:

  • Sai lầm 1 — nhét mọi thứ vào AI Agent. Ban đầu mình dùng Agent cho cả việc chỉ cần “input → JSON”. Parser vỡ liên tục, output lúc là object lúc là string. Chuyển sang Basic LLM Chain riêng để parse đúng như n8n khuyến nghị → tỷ lệ JSON hỏng giảm từ 18% xuống còn 3%.
  • Sai lầm 2 — không bắt lỗi rate limit. Một đêm chạy batch 120 item, API 429 giữa chừng, cả workflow chết và mình mất nguyên mẻ. Sau khi thêm Retry On Fail + On Error = Continue using error output, batch chạy tiếp dù vài item hỏng, và mình gom lại chạy bù. Số lần chết cả workflow: từ 3–4 lần/tuần về gần 0.
  • Sai lầm 3 — để max tokens mở + dùng model tầng cao cho việc vặt. Hóa đơn tháng phình lên vì mình dùng model đắt để… phân loại comment. Chuyển việc vặt sang tầng Haiku/budget + bật prompt caching, chi phí token/tháng giảm còn khoảng 1,8 triệu/tháng.

Bài học gọn: Chain thay vì Agent khi có thể, bắt lỗi 3 lớp, và chọn tầng model theo độ khó của việc.

FAQ

Nối AI vào n8n có cần biết code không?

Không. Toàn bộ dùng node kéo-thả và một ô prompt tiếng Việt. Chỉ cần biết viết JSON mẫu đơn giản cho parser — mà n8n có nút tự sinh schema từ ví dụ.

Anthropic Chat Model có những tùy chọn gì?

Chọn model, và các option: Maximum Number of Tokens, Sampling Temperature, Top K, Top P (nguồn: n8n Docs). Với việc cần ổn định (trả JSON), để temperature thấp (0–0,3).

Structured Output Parser cứ trả về string, sao sửa?

Đây là lỗi đã biết. Đừng parse thẳng trong Agent — tách một Basic LLM Chain riêng để nắn JSON, và nhắc rõ trong prompt “chỉ trả JSON, không thêm chữ”.

Retry On Fail đặt bao nhiêu là hợp lý?

Max Tries 3–5 (trần là 5), Wait Between Tries 1000–5000ms (trần 5000ms). Đủ vượt qua rate limit tạm thời mà không kẹt workflow quá lâu (nguồn: n8n Resources, 2026).

Gọi API AI trong n8n tốn tiền không?

Có — tính theo token input + output. Việc nhẹ dùng tầng rẻ, bật batch (giảm ~50%) và prompt caching (giảm tới ~90% phần input lặp) để tiết kiệm.

OpenAI và Claude có swap được trong cùng workflow không?

Được. Cả hai là sub-node chat model cắm cùng một điểm nối, nên đổi qua lại chỉ tốn vài giây — giữ nguyên phần còn lại của workflow.

Nên dùng Message a Model hay Basic LLM Chain?

“Message a Model” (node OpenAI) gọn cho gọi thẳng một câu. Basic LLM Chain mạnh hơn ở chỗ gắn được Output Parser để ép JSON — nên nếu cần cấu trúc, chọn Chain.

Kết

Nối OpenAI/Claude vào n8n không khó ở chỗ “gọi được AI” — nó khó ở chỗ làm cho output *sạch, ổn định và không đốt tiền*. Nhớ ba trụ: Chain thay Agent khi chỉ cần input→output, ép JSON bằng Structured Output Parser, và bắt lỗi 3 lớp. Dựng xong một khối AI chuẩn, bạn có thể tái dùng nó trong mọi automation.

Muốn xem bức tranh tổng thể series và các workflow còn lại, quay về n8n là gì — hướng dẫn toàn tập. Nếu bạn muốn mình gửi bộ template workflow “AI block chuẩn JSON” để cắm nhanh, để lại email trong [khóa/ebook automation của VIGOACADEMY] — mình gửi kèm checklist bắt lỗi.


*Tác giả: Hoàng Trọng Thuật — VIGOACADEMY. Học thực chiến từ kinh nghiệm thực tế: YouTube, AI Automation và Affiliate Marketing.*

a

adminvigomedia

Nhà sáng tạo nội dung về AI, YouTube Automation và Affiliate Marketing. Chia sẻ kiến thức thực chiến từ kinh nghiệm vận hành thật.