DeepSeek Vision and Grok Imagine models are now live on CometAPI →
guide/Исследования CometAPI

Как подключить несколько моделей ИИ к n8n с одним ключом CometAPI

Создайте low-code рабочий процесс в n8n, который маршрутизирует задания из электронных таблиц к нескольким поставщикам ИИ через один ключ CometAPI, периодически опрашивает видеозадачи и сохраняет каждый результат.

CometAPI
AnnaКоманда исследователей AI-моделей и API
Обновлено Aug 26, 2026 11 мин. чтения
Как подключить несколько моделей ИИ к n8n с одним ключом CometAPI
Использовать этот подход

Сделайте первый вызов 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)

Как подключить несколько моделей ИИ к n8n через один API?

Подключать модели ИИ по одному провайдеру подходит для прототипа, но становится хрупким по мере роста использования. Каждый провайдер приносит отдельные учетные данные, конечные точки, форматы запросов, лимиты, биллинг и структуру ответов. В n8n это часто ведет к дублированным узлам HTTP и ветвлениям под конкретного провайдера, поэтому добавление модели или изменение пути резервирования требует редактировать несколько частей рабочего процесса.

n8n и CometAPI решают разные уровни этой задачи. n8n управляет запуском задания, валидирует входные данные, маршрутизирует синхронные и асинхронные задачи, повторяет попытки при сбоях и сохраняет результаты. CometAPI централизует доступ к моделям за одним ключом API и одной базовой URL. Вместе они исключают изменения провайдеров из уровня оркестрации: вы можете заменить ID модели, сохранив ту же очередь, опрос, хранение и логику мониторинга.

Эта комбинация особенно полезна для смешанных задач по изображениям и видео, поступающих из таблиц или внутренних инструментов. Рабочий процесс в n8n остается визуальным и проверяемым, а учетные данные, доступность моделей и расходы проще управляются через один API-слой.

Самый простой способ интегрировать нескольких провайдеров ИИ в одно приложение — разделить оркестрацию и доступ к моделям. Пусть n8n обрабатывает триггеры, ветвления, повторы и хранение, а CometAPI дает каждой ветке один ключ API и одну базовую URL. ID модели становится полем в каждом задании вместо отдельного аккаунта провайдера, SDK и настройки биллинга.

В этом руководстве вы построите работающий low-code конвейер, который читает задачи по изображениям и видео из Google Sheets, отправляет их в модели OpenAI и ByteDance через CometAPI, сохраняет ID асинхронных видео-задач, опрашивает их до завершения и выполняет upsert итогового результата в n8n Data Table.

Что вы построите

Готовый рабочий процесс следует по пути:

Google Sheets Trigger → Нормализация задания → Ветвление по типу медиа → Запрос к CometAPI для изображения или видео → Ожидание и опрос видео-задач → Загрузка или ссылка на результат → Upsert в Data Table.

Используйте следующие столбцы в исходной таблице:

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

Типичная строка для изображения использует image, gpt-image-2 и 1024x1024. Строка для видео использует video, seedance-2-5, 1280x720 и длительность от 4 до 30 секунд.

Перед началом

Вам нужны экземпляр n8n, Google Sheet, ключ API CometAPI и n8n Data Table с именем ai_jobs. Создайте эти столбцы в Data Table: job_id, media_type, model, status, task_id, result_url, error и updated_at.

Для самохостимого n8n добавьте следующие значения в окружение, используемое вашим процессом n8n:

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

Перезапустите n8n после изменения окружения. В n8n Cloud или если вы не хотите раскрывать переменные окружения в выражениях узлов, создайте учетные данные HTTP Header Auth с именем CometAPI Bearer. Установите имя заголовка Authorization, а значение — Bearer your_cometapi_key. Примеры ниже используют эти учетные данные и фиксированную базовую URL, совместимую с OpenAI, https://api.cometapi.com/v1.

Используйте актуальные ID моделей

ЗадачаПровайдер и модельЗапросРезультат
ImageOpenAI · gpt-image-2POST /v1/images/generationsСинхронное изображение base64
VideoByteDance · seedance-2-5POST /v1/videosАсинхронная задача, затем опрос

Оба ID и возможности были доступны в живом API каталога моделей CometAPI на 11 августа 2026 года. Модель для изображений поддерживает генерацию изображений по тексту. Seedance 2.5 поддерживает генерацию видео по тексту и по изображению, клипы длительностью 4–30 секунд и задокументированные размеры 480p и 720p.

Цены по состоянию на 11 августа 2026 года: на странице модели GPT Image 2 указано $4 за миллион входных токенов и $24 за миллион выходных токенов. На странице модели Seedance 2.5 указано $0.103 за секунду при 480p и $0.231 за секунду при 720p. Цены могут меняться, поэтому используйте живой каталог моделей или страницу модели как источник истины во время выполнения.

Важное архитектурное различие в том, что генерацию изображений можно обрабатывать в режиме запрос-ответ, а генерацию видео следует считать состоянием задания. Сохранение ID видео-задачи перед опросом предотвращает потерю задания при перезапуске исполнения n8n.

Постройте рабочий процесс в n8n

1. Триггер новых задач из Google Sheets

Добавьте узел Google Sheets Trigger и выберите Row added or updated. Укажите лист, содержащий вашу очередь задач. Добавьте узел IF сразу после триггера и продолжайте только если status пуст или равен queued. Это предотвращает повторную отправку завершенных строк при изменении таблицы.

2. Нормализуйте и проверьте каждую строку

Добавьте узел Code с именем Normalize Job. Этот узел применяет безопасные значения по умолчанию, ограничивает рабочий процесс утвержденными 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 must be image or video; received: ${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 ${model} is not allowed for ${mediaType} jobs`);}​const prompt = String(row.prompt || '').trim();if (!prompt) throw new Error('prompt is required');​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 must be an integer from 4 to 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(),  },}];

Добавьте узел Switch после Normalize Job. Направьте image в ветку изображений и video в ветку видео.

3. Генерация изображений через одну конечную точку

Добавьте узел HTTP Request с именем Create Image со следующими настройками:

  • Method: POST
  • URL: https://api.cometapi.com/v1/images/generations
  • Authentication: учетные данные Header Auth CometAPI Bearer
  • 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. Добавьте узел Code с именем Prepare Image File, чтобы преобразовать эти данные в бинарный элемент n8n:

const job = $('Normalize Job').item.json;const b64 = $json.data?.[0]?.b64_json;if (!b64) throw new Error('CometAPI returned no image data');​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. Держите большие payload base64 вне Data Table.

4. Создайте асинхронную видео-задачу

Добавьте узел HTTP Request с именем Create Video:

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

Добавьте четыре поля формы: model, prompt, seconds и size. Свяжите их значения из Normalize Job.

Далее добавьте узел Code с именем Save Video Task:

const job = $('Normalize Job').item.json;const taskId = $json.id || $json.task_id;if (!taskId) throw new Error('Video task ID missing from create response');​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 секунд. Затем добавьте узел HTTP Request с именем Get Video:

  • Method: GET
  • URL: =https://api.cometapi.com/v1/videos/{{ $json.task_id }}
  • Authentication: CometAPI Bearer

После запроса используйте узел Switch по полю status:

  • queued или in_progress: вернуться к узлу Wait.
  • completed: перейти к Finalize Video.
  • failed или error: записать ошибку в 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('Completed video response has no video URL');​return [{  json: {    ...prior,    status: 'completed',    result_url: resultUrl,    error: '',    updated_at: new Date().toISOString(),  },}];

Выполните upsert итогового элемента в ai_jobs по job_id. URL видео CometAPI могут быть подписанными и временными, поэтому в продуктивных процессах следует скачивать и переразмещать файл перед сохранением постоянного URL. Если ваше приложение может принимать входящие запросы, замените опрос вебхуком там, где выбранная модель поддерживает обратные вызовы.

Полная карта узлов

Полный рабочий процесс можно собрать из следующих узлов:

  1. Google Sheets Trigger — Row added or updated
  2. IF — Обрабатывать только новые или queued строки
  3. Code — Normalize Job
  4. Switch — Image или video
  5. Ветка изображений: HTTP Request → Prepare Image File → Object Storage → Data Table Upsert
  6. Ветка видео: HTTP Request → Save Video Task → Data Table Upsert → Wait → HTTP Request → Status Switch
  7. Завершенное видео: Finalize Video → Object Storage или постоянный 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 || 'Video generation failed' }}",  "updated_at": "={{ $now.toISO() }}"}

Протестируйте рабочий процесс

Добавьте две строки в исходную таблицу:

img-001 | image | gpt-image-2 | A cinematic product photo of a glass robot on a dark desk | 1024x1024 | | queuedvid-001 | video | seedance-2-5 | A paper airplane flies through a sunlit studio, smooth tracking shot | 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 в учетных данных n8n или переменных окружения на сервере. Никогда не помещайте его в таблицу или не возвращайте в браузер.

Сделайте каждую задачу идемпотентной. Используйте job_id как ключ upsert в Data Table. Перед созданием новой задачи пропускайте строки, уже отмеченные как processing или completed.

Управляйте опросом и параллелизмом. Опрос видео-задач каждые 10–20 секунд, ограничивайте число попыток и число одновременных выполнений. Делайте бэк-офф на ответах 429, 500 и 503 вместо создания дублирующих задач.

Проверяйте политику модели перед каждым запросом. Держите список разрешенных по типу медиа. Обновляйте доступность моделей и цены из живого каталога по расписанию, но внедряйте изменения моделей через ревью, а не позволяйте пользователям таблицы отправлять произвольные ID.

Отслеживайте стоимость по задаче. Сохраняйте модель, разрешение, длительность и поля использования вместе с результатом. Задача Seedance 2.5 на четыре секунды в 720p — около $0.924 по ставке на 11 августа 2026 года; те же четыре секунды в 480p — около $0.412. Принудительно ограничивайте максимальную длительность и разрешение перед отправкой запроса.

Переразмещайте сгенерированные медиа. Рассматривайте подписанные URL провайдера как ссылки доставки, а не постоянное хранилище. Скачивайте завершенные медиа, загружайте их в ваш управляемый бакет и сохраняйте устойчивый URL плюс контрольную сумму.

Ведите аудит. Сохраняйте модель запроса, санитизированные параметры, ID задачи, переходы статусов, количество попыток, время ответа и итоговое местоположение актива. Не логируйте ключи API или полные приватные промпты.

Почему этот паттерн масштабируется

Рабочий процесс остается простым, потому что каждый новый провайдер или модель — это решение маршрутизации, а не новая интеграция аккаунта. Таблица остается очередью задач, n8n — уровнем оркестрации, а CometAPI — единым слоем доступа. Добавляйте модель, расширяя список разрешенных и конфигурацию веток; триггер, сохранение задач, опрос, хранение и логика мониторинга остаются неизменными.

Это практичный ответ на интеграцию нескольких провайдеров ИИ: одна контролируемая конечная точка и ключ, явная маршрутизация моделей, разделенные синхронные и асинхронные пути и устойчивая запись для каждой задачи.

Вопросы и ответы

Может ли n8n вызывать нескольких провайдеров ИИ через один API?

Да. С единым API-слоем, таким как CometAPI, n8n может отправлять запросы к разным поддерживаемым моделям, сохраняя учетные данные провайдера и интеграцию HTTP централизованными.

Можно ли использовать CometAPI с узлом HTTP Request в n8n?

Да. Узел HTTP Request может отправлять запросы к конечной точке API CometAPI с требуемой аутентификацией и модель-специфичными параметрами.

Может ли n8n автоматически переключать модели ИИ, когда одна из них дает сбой?

Да. Используйте ветку IF/Switch после запроса к API и перенаправляйте ошибки, пригодные для повторной попытки, или специфичные для модели на резервную модель. Резервная модель должна поддерживать ту же модальность и необходимые возможности.

Продолжить обучение

Свяжите эту статью со следующим решением.

Посмотреть все темы
Опубликовано Aug 25, 2026
Последнее обновление Aug 26, 2026
1 просмотров
Проверено на ясность, указание источников и актуальную терминологию API.

Готовы сократить затраты на AI-разработку на 20%?

Начните бесплатно за несколько минут. Пробные кредиты включены. Карта не нужна.

Читать далее