Skip to content
💻程式#118進階金字塔 · 做
工程師顧問n8nClaude.ai#n8n#JSON Schema#API整合

n8n AI 節點 JSON 合約定義

用途

為 n8n 的 AI 節點(OpenAI / Gemini / Claude)定義固定的 JSON 輸出格式,讓下游的 Code 節點或 IF 節點能可靠解析 AI 回應,不會因為 AI 自由發揮導致工作流崩潰。

何時用

  • 適合:在 n8n 用 AI 節點處理結構化任務(資料萃取、分類、摘要)時,需要確保輸出格式穩定可被程式解析。
  • 不要用:n8n 工作流裡的 AI 節點只是做對話回應不需要解析——那種情境不需要強制 JSON 格式;或是你需要的是 n8n 工作流設計建議(請用 n8n 工作流設計版)。

Prompt

text
(這是要貼到 n8n AI 節點 System Message 或 User Prompt 的設定)

你是一個 API 任務節點,不是聊天助理。

你的任務:{{任務描述,例:從以下文字中萃取關鍵資訊}}

輸入資料:
{{輸入資料或 n8n 表達式,例:{{ $json.body }}}}

輸出規則(嚴格遵守):
1. 永遠只輸出以下 JSON 格式,不加任何說明文字、不加 markdown code block 圍欄
2. 任何情況下都不輸出 JSON 以外的內容

JSON 格式:
{
  "status": "success",
  "result": {{結果內容的格式,例:{
    "summary": "string",
    "category": "billing|technical|general",
    "priority": "high|medium|low"
  }}},
  "meta": {
    "prompt_version": "1.0",
    "processed_at": "ISO-8601 timestamp"
  }
}

失敗時(輸入不符合預期、資料不足、解析錯誤):
{
  "status": "error",
  "result": "失敗原因的簡短描述(繁中)",
  "meta": {
    "prompt_version": "1.0",
    "processed_at": "ISO-8601 timestamp"
  }
}

範例 / 變體

  • 填好變數:任務描述填 從客服留言中萃取問題類型和緊急程度、輸入資料填 {{ $json.message }}、result 格式填 {"category": "billing|technical|general", "priority": "high|medium|low", "summary": "string"}
  • 變體(批次處理版):任務改為「處理以下清單中的每一筆資料」,result 改為 {"items": [{"id": "string", "...": "..."}]},讓 AI 一次處理多筆並保持 id 對應。
  • 變體(加信心分數):在 result 裡加一個 "confidence": 0.0 浮點欄位,讓下游節點依信心分數決定是否需要人工審核(例:confidence < 0.7 就轉人工)。

🎯 範例輸出(實測)

Claude.ai 測試這份 System Message 設定、任務描述填「從客服留言中萃取問題類型和緊急程度」、輸入資料填一則客服留言的結果:

點開看 AI 實際輸出

測試輸入(模擬 n8n 傳入的 $json.message):

text
你好,我昨天下的訂單(#TW-20240603-8821)到現在還沒出貨,客服說 3 天到,
現在第 4 天了。我明天要出差用這個東西,你們能幫我今天出貨嗎?如果不行我要退款了。

Claude 輸出(直接是 JSON,沒有任何說明文字):

text
{
  "status": "success",
  "result": {
    "summary": "客戶訂單 #TW-20240603-8821 已逾承諾出貨時間(4天未出貨),客戶明日有時效需求,要求今日出貨或退款",
    "category": "technical",
    "priority": "high"
  },
  "meta": {
    "prompt_version": "1.0",
    "processed_at": "2026-06-04T09:15:32+08:00"
  }
}

驗證「輸入不清楚」時的錯誤格式:

測試輸入:(空白)

Claude 輸出:

text
{
  "status": "error",
  "result": "輸入內容為空,無法進行分類",
  "meta": {
    "prompt_version": "1.0",
    "processed_at": "2026-06-04T09:15:41+08:00"
  }
}

兩種情境都輸出純 JSON,下游 n8n Code 節點可以直接 JSON.parse() 解析,不會因多餘文字報錯。

💡 實測心得:「不加任何說明文字、不加 markdown code block 圍欄」這兩行缺一不可——少了後者,AI 有時會把 JSON 包在 ```json ``` 裡,n8n 的 JSON.parse() 就失敗了。processed_at{{ $now.toISO() }} 在 n8n 端填更準確,不依賴 AI 的時間感知。

延伸

你有沒有遇過這種情況?n8n 工作流 AI 節點跑了 100 次,有 5 次 AI 突然輸出「當然!以下是我的分析…」然後下游 Code 節點就報錯了?這道 prompt 的核心是把 AI 的角色定義為「API 端點而非聊天助理」,並透過雙重規定(成功/失敗各自格式)讓 AI 不管遇到什麼情況都輸出可解析的 JSON。prompt_version 欄位也很有用,當你需要升版 prompt 時可以用這個欄位追蹤哪些任務用了舊版。

依場景分類 · 一鍵複製 · 持續擴充