DeepSeek Vision and Grok Imagine models are now live on CometAPI →
guide/CometAPI 研究

如何使用單一 CometAPI 金鑰將多個 AI 模型連接到 n8n

建立一個低程式碼的 n8n 工作流程,透過單一 CometAPI 金鑰將試算表任務路由至多個 AI 供應商,輪詢影片任務,並儲存每個結果。

CometAPI
AnnaAI 模型與 API 研究團隊
更新於 Aug 25, 2026 6 分鐘閱讀
如何使用單一 CometAPI 金鑰將多個 AI 模型連接到 n8n
套用此模式

發出第一個 API 請求。

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_COMETAPI_KEY",
    base_url="https://api.cometapi.com/v1",
)

response = client.chat.completions.create(
    model="gpt-5-mini",
    messages=[{"role": "user", "content": "Build this workflow."}],
)

print(response.choices[0].message.content)

如何透過單一 API 將多個 AI 模型連接到 n8n?

逐一連接各家 AI 供應商在原型階段或許可行,但隨著用量增加,這種方式會變得脆弱。每個供應商都有不同的憑證、端點、請求格式、速率限制、計費與回應結構。在 n8n 中,這常導致重複的 HTTP 節點與供應商特定的分支,因此新增模型或更改後援路徑時,必須修改工作流程的多個部分。

n8n 與 CometAPI 解決的是不同層面的問題。n8n 控制作業何時執行、驗證輸入、路由同步與非同步任務、重試失敗並儲存結果。CometAPI 則將模型存取集中在一把 API key 與一個 base URL 背後。兩者搭配可將供應商的變動隔離於協作層之外:你只需切換模型 ID,即可保留相同的佇列、輪詢、儲存與監控邏輯。

這組合對於來自試算表或內部工具的混合圖片與影片作業特別實用。工作流程在 n8n 中保持可視化與可稽核,而憑證、模型可用性與使用成本則更容易透過單一 API 層管理。

將多家 AI 供應商整合到同一應用的最簡方法,是將協作與模型存取拆開處理。讓 n8n 負責觸發、分支、重試與儲存,而 CometAPI 讓每個分支都只需一把 API key 與一個 base URL。模型 ID 成為每個作業中的一個欄位,而不是獨立的供應商帳號、SDK 與計費設定。

本指南將帶你建立一條可運作的低程式碼管線:從 Google Sheets 讀取圖片與影片作業,透過 CometAPI 發送到 OpenAI 與 ByteDance 的模型,儲存非同步影片的任務 ID、輪詢完成狀態,並將最終結果 upsert 進 n8n Data Table。

你將完成的內容

最終工作流程如下:

Google Sheets Trigger → Normalize Job → 依媒體類型分支 → CometAPI 圖片或影片請求 → 等待並輪詢影片任務 → 上傳或引用輸出 → Data Table upsert。

在來源工作表使用以下欄位:

job_id | media_type | model | prompt | size | seconds | status

典型圖片列使用 imagegpt-image-21024x1024。影片列使用 videoseedance-2-51280x720,以及 4 到 30 秒的長度。

開始之前

你需要一個 n8n 執行個體、一份 Google Sheet、一把 CometAPI API key,以及一個名為 ai_jobs 的 n8n Data Table。請在 Data Table 建立這些欄位:job_idmedia_typemodelstatustask_idresult_urlerrorupdated_at

若自我託管 n8n,請在 n8n 行程使用的環境中加入以下值:

COMETAPI_BASE_URL=https://api.cometapi.com/v1COMETAPI_KEY=your_cometapi_key

修改環境後請重啟 n8n。在 n8n Cloud,或當你不想在節點表達式中暴露環境變數時,建立一組名為 CometAPI Bearer 的 HTTP Header Auth 憑證。將 Header 名稱設為 Authorization,值設為 Bearer your_cometapi_key。下方範例使用此憑證與固定的 OpenAI 相容 base URL https://api.cometapi.com/v1.

使用目前的模型 ID

作業供應商與模型請求結果
圖片OpenAI · gpt-image-2POST /v1/images/generations同步的 base64 圖片
影片ByteDance · seedance-2-5POST /v1/videos非同步任務,之後輪詢

上述 ID 與能力在 2026 年 8 月 11 日可於 即時 CometAPI 模型目錄 API 查詢。圖片模型支援文生圖。Seedance 2.5 支援文生影與圖生影、4–30 秒片段,以及文件記載的 480p 與 720p 尺寸。

定價截至 2026 年 8 月 11 日:GPT Image 2 模型頁標示輸入每百萬 token 4 美元、輸出每百萬 token 24 美元。Seedance 2.5 模型頁標示 480p 每秒 0.103 美元、720p 每秒 0.231 美元。價格可能變動,請以即時模型目錄或模型頁為執行時的權威來源。

重要的架構差異在於:圖片生成可用請求—回應處理,影片生成則應視為有狀態的作業。先持久化影片任務 ID 再開始輪詢,可避免 n8n 執行重啟時遺失該作業。

在 n8n 中建立工作流程

1. 由 Google Sheets 觸發新作業

新增一個 Google Sheets Trigger 節點並選擇 Row added or updated。指向包含作業佇列的工作表。在觸發器後立即新增一個 IF 節點,僅在 status 為空或等於 queued 時才繼續。這可避免工作表變動時已完成的列被再次提交。

2. 正規化與驗證每一列

新增一個名為 Normalize Job 的 Code 節點。此節點會套用安全預設、限制工作流程僅使用核准的模型 ID,並為兩個分支產出相同欄位。

const row = $json;​const allowedModels = {  image: new Set(['gpt-image-2']),  video: new Set(['seedance-2-5']),};​const mediaType = String(row.media_type || '').trim().toLowerCase();if (!allowedModels[mediaType]) {  throw new Error(`media_type 必須為 image 或 video;接收到:${row.media_type}`);}​const defaultModel = mediaType === 'image' ? 'gpt-image-2' : 'seedance-2-5';const model = String(row.model || defaultModel).trim();if (!allowedModels[mediaType].has(model)) {  throw new Error(`模型 ${model} 不允許用於 ${mediaType} 作業`);}​const prompt = String(row.prompt || '').trim();if (!prompt) throw new Error('prompt 為必填');​const seconds = mediaType === 'video' ? Number(row.seconds || 4) : null;if (mediaType === 'video' && (!Number.isInteger(seconds) || seconds < 4 || seconds > 30)) {  throw new Error('Seedance 2.5 的 seconds 必須為 4 到 30 的整數');}​return [{  json: {    job_id: String(row.job_id || $execution.id),    media_type: mediaType,    model,    prompt,    size: String(row.size || (mediaType === 'image' ? '1024x1024' : '1280x720')),    seconds,    status: 'processing',    updated_at: new Date().toISOString(),  },}];

Normalize Job 後新增一個 Switch 節點。將 image 導向圖片分支,將 video 導向影片分支。

3. 透過單一端點產生圖片

新增一個名為 Create Image 的 HTTP Request 節點,設定如下:

  • Method: POST
  • URL: https://api.cometapi.com/v1/images/generations
  • Authentication: CometAPI Bearer Header Auth 憑證
  • Body Content Type: JSON
{  "model": "={{ $('Normalize Job').item.json.model }}",  "prompt": "={{ $('Normalize Job').item.json.prompt }}",  "size": "={{ $('Normalize Job').item.json.size }}"}

GPT Image 2 會回傳 base64 圖片資料。新增一個名為 Prepare Image File 的 Code 節點,將該資料轉為 n8n 的二進位項目:

const job = $('Normalize Job').item.json;const b64 = $json.data?.[0]?.b64_json;if (!b64) throw new Error('CometAPI 未返回圖片資料');​return [{  json: {    ...job,    status: 'completed',    task_id: '',    result_url: '',    error: '',    updated_at: new Date().toISOString(),  },  binary: {    media: {      data: b64,      mimeType: 'image/png',      fileName: `${job.job_id}.png`,    },  },}];

將此節點連到你偏好的物件儲存節點,例如 S3 或 Google Drive。將回傳的檔案 URL 存入 result_url,然後 upsert 到 ai_jobs。避免將大型 base64 負載寫入 Data Table。

4. 建立非同步的影片任務

新增一個名為 Create Video 的 HTTP Request 節點:

  • Method: POST
  • URL: https://api.cometapi.com/v1/videos
  • Authentication: CometAPI Bearer
  • Body Content Type: Form-Data

新增四個表單欄位:modelpromptsecondssize。其值從 Normalize Job 映射。

接著新增一個名為 Save Video Task 的 Code 節點:

const job = $('Normalize Job').item.json;const taskId = $json.id || $json.task_id;if (!taskId) throw new Error('建立回應中缺少影片任務 ID');​return [{  json: {    ...job,    task_id: taskId,    status: $json.status || 'queued',    result_url: '',    error: '',    updated_at: new Date().toISOString(),  },}];

在開始輪詢前先將此項目 upsert 到 ai_jobs。立刻儲存任務 ID 可避免因重啟或逾時而遺失作業。

5. 等待、輪詢並儲存影片 URL

新增一個 Wait 節點,設定為 15 秒。再新增一個名為 Get Video 的 HTTP Request 節點:

請求後,使用一個 Switch 節點判斷 status

  • queuedin_progress:返回 Wait 節點。
  • completed:繼續到 Finalize Video
  • failederror:將錯誤寫入 ai_jobs 並停止。

在完成分支加入以下 Code 節點:

const prior = $('Save Video Task').item.json;const resultUrl = $json.video_url || $json.url || $json.data?.video_url;if (!resultUrl) throw new Error('完成的影片回應沒有提供 video URL');​return [{  json: {    ...prior,    status: 'completed',    result_url: resultUrl,    error: '',    updated_at: new Date().toISOString(),  },}];

job_id 將最終項目 upsert 到 ai_jobs。CometAPI 的影片 URL 可能是簽名且暫時的,因此在正式流程應先下載並重新託管,再儲存永久 URL。若你的應用可接收外部請求,且所選模型支援回呼,可用 webhook 取代輪詢。

完整節點圖

完整工作流程可由以下節點組成:

  1. Google Sheets Trigger — Row added or updated
  2. IF — 僅處理新的或已排隊的列
  3. Code — Normalize Job
  4. Switch — Image 或 video
  5. 圖片分支:HTTP Request → Prepare Image File → 物件儲存 → Data Table Upsert
  6. 影片分支:HTTP Request → Save Video Task → Data Table Upsert → Wait → HTTP Request → 狀態 Switch
  7. 完成影片:Finalize Video → 物件儲存或永久 URL → Data Table Upsert
  8. 失敗影片:Set Error → Data Table Upsert

針對失敗分支,在 Edit Fields 節點中使用以下表達式:

{  "job_id": "={{ $('Save Video Task').item.json.job_id }}",  "status": "failed",  "task_id": "={{ $('Save Video Task').item.json.task_id }}",  "result_url": "",  "error": "={{ $json.error?.message || $json.message || '影片生成失敗' }}",  "updated_at": "={{ $now.toISO() }}"}

測試工作流程

在來源工作表新增以下兩列:

img-001 | image | gpt-image-2 | 一張在昏暗書桌上的玻璃機器人電影感產品照 | 1024x1024 | | queuedvid-001 | video | seedance-2-5 | 一架紙飛機飛過陽光灑落的攝影棚,平滑的追蹤運鏡 | 1280x720 | 4 | queued

圖片請求應回傳類似以下結構:

{  "created": 1786400000,  "data": [    { "b64_json": "iVBORw0KGgoAAA..." }  ]}

影片建立請求應回傳類似以下的任務結構:

{  "id": "video_task_abc123",  "object": "video",  "status": "queued",  "progress": 0}

在輪詢後,完成的回應應包含相同的任務 ID、status: completed,以及一個 video_url。可選欄位可能因模型而異,因此正規化程式碼只讀取穩定的任務狀態與結果 URL,而非將供應商的整個回應複製進資料庫。

常見錯誤與修正

錯誤修正
401 Unauthorized確認 Header Auth 的值以 Bearer 開頭,且該金鑰仍為有效。
404 model or task not found檢查即時模型目錄,並確認在 GET /v1/videos/{id} 中使用了已儲存的任務 ID。
400 invalid size or seconds使用支援的尺寸,且將 Seedance 2.5 的長度維持在 4 到 30 秒之間。
429 rate limited降低 n8n 併發度,並以指數退避加抖動重試。
Polling never ends持久化嘗試次數並在定義的逾時後停止;將 failed 與 error 視為終止狀態。
Image payload is too large將 base64 轉為二進位、上傳,並只儲存永久 URL。

上線清單

  • 保護憑證:將 API key 存放於 n8n 憑證或伺服器端環境變數。不要將其放入試算表或回傳到瀏覽器。
  • 讓每個作業具冪等性:使用 job_id 作為 Data Table 的 upsert 鍵。在建立新任務之前,略過已標記為 processingcompleted 的列。
  • 控制輪詢與併發:每 10–20 秒輪詢影片作業,限制嘗試次數並限制同時執行數。在遇到 429、500、503 時退避,而不是建立重複任務。
  • 在每次請求前驗證模型策略:依媒體類型維護允許清單。定期從即時目錄刷新模型可用性與價格,但透過審核流程部署模型變更,而非讓試算表使用者提交任意 ID。
  • 追蹤每個作業成本:與每個結果一起儲存模型、解析度、時長與使用量欄位。以 2026-08-11 的標示價格估算,四秒 720p 的 Seedance 2.5 約 0.924 美元;同樣四秒 480p 約 0.412 美元。在提交請求前強制最大時長與解析度。
  • 重新託管生成媒體:將供應商簽名 URL 視為傳遞連結,而非永久儲存。下載完成的媒體,上傳至你可控的儲存桶,並儲存耐久 URL 與雜湊值。
  • 保留稽核軌跡:儲存請求模型、已淨化參數、任務 ID、狀態轉換、重試次數、回應時間與最終資產位置。不要記錄 API key 或完整的私人提示詞。

為何此模式可擴展

工作流程之所以保持簡潔,是因為每個新供應商或模型只是路由決策,而非全新的帳號整合。試算表仍是作業佇列、n8n 仍是協作層、CometAPI 仍是單一存取層。只要擴充允許清單與分支設定即可新增模型;觸發、任務持久化、輪詢、儲存與監控邏輯都不需變更。

這就是多供應商 AI 整合的務實做法:受控的單一端點與金鑰、明確的模型路由、分離的同步與非同步路徑,以及每個作業的可持久記錄。

常見問題

n8n 能否透過一個 API 呼叫多個 AI 供應商?

可以。透過 CometAPI 等統一 API 層,n8n 能向不同的支援模型發送請求,同時集中管理供應商憑證與 HTTP 整合。

我可以在 n8n 的 HTTP Request 節點使用 CometAPI 嗎?

可以。HTTP Request 節點可向 CometAPI 的 API 端點發送請求,並附上所需的認證與模型特定參數。

當某個模型失敗時,n8n 能自動切換到其他模型嗎?

可以。在 API 請求後加入 IF/Switch 分支,將可重試或模型特定的失敗路由到後援模型。後援模型須支援相同的模態與必要功能。

繼續學習

把這篇文章連到下一個決策。

查看所有主題
發布於 Aug 25, 2026
最後更新 Aug 25, 2026
0 次瀏覽
已審核內容清晰度、來源標註與最新 API 術語。

準備好將 AI 開發成本降低 20% 了嗎?

幾分鐘內免費開始。包含免費試用點數。無需信用卡。

閱讀更多