Как мы делали свою ноду для n8n
Всем привет!
Оказалось, что после релиза инференса LLM моделей (LLaMA, GPT) в Amvera, у многих пользователей появилась необходимость использования LLM Inference API в n8n.
Для этого нужно было создавать ноду HTTP Request, самостоятельно искать и указывать эндпоинт, прописывать body для запроса и проставлять нестандартный заголовок авторизации, что совершенно неудобно и сложно для многих пользователей. Простыми словами: нет удобного способа работы с Amvera LLM Inference API в n8n.
По вышеописанной причине мы решили разобраться в этой проблеме, и опубликовать собственную комьюнити-ноду n8n-nodes-amvera-inference, которая сможет помочь пользователям, без сложностей, работать с Inference API нужной модели.
В статье мы расскажем и про саму разработку комьюнити-ноды, и про её установку с настройкой.
Установка ноды
Установить ноду можно буквально за 5 минут. Для этого открываем интерфейс n8n, переходим во вкладку Settings (появляется при клике по аватарке или трём точкам рядом с аватаркой) — Community Nodes.
Если такого раздела нет — убедитесь, что ваша версия поддерживает Community Nodes, или попробуйте добавить переменную окружения N8N_COMMUNITY_NODES_ENABLED в значении true
В этом разделе прожимаем Install в правом верхнем углу и в поле вводе пишем n8n-nodes-amvera-inference. Подтверждаем и ждём установки.

После установки Amvera LLM появится в списке доступных нод в вашем воркфлоу.

Работа с нодой
Для начала убедитесь, что у вас приобретён пакет токенов нужной вам модели, после чего откройте ноду Amvera LLM и выполните следующие шаги:
-
Создайте Credentials с вашим токеном из ЛК Amvera. Токен доступен на странице выбранной модели.
-
Выберите используемую модель (gpt-4.1, gpt-5, llama-8b, llama-70b на данный момент) и создайте любое сообщение.
-
Выберите режим вывода. Всего поддерживается два режима: Ответ модели и JSON. Первый возвращает только сообщение от модели, тогда как второй — весь JSON ответа Inference API.
И всё — можно запускать воркфлоу и работать с Amvera LLM Inference API без каких-либо проблем и сложных настроек.
Как мы разрабатывали ноду
Когда начинаешь писать свою ноду для n8n, кажется, что это что-то сложное. На самом же деле в этом нет ничего магического, достаточно лишь описать логику и вид ноды на TypeScript.
n8n использует простую структуру для нод: каждая нода — это TypeScript-класс, который описывает внешний вид (inputs, outputs, другие свойства) и поведение (метод execute).
Мы начали с базового шаблона:
n8n-nodes-amvera-inference/ ├── nodes/ │ └── AmveraLlm.node.ts ├── credentials/ │ └── AmveraLlmApi.credentials.ts ├── tsconfig.json └── package.json
Разберём код:
credentials/AmveraLlmApi.credentials.ts
Этот файл описывает, как нода получается доступ к API — в нашем случае через токен авторизации.
import { ICredentialType, INodeProperties } from ‘n8n-workflow’; export class AmveraLlmApi implements ICredentialType { name = ‘amveraLlmApi’; displayName = ‘Amvera LLM API’; properties: INodeProperties[] = [ { displayName: ‘API Token’, name: ‘apiToken’, type: ‘string’, typeOptions: { password: true }, default: », required: true, description: ‘Токен от модели LLM’, }, ]; }
Теперь в интерфейсе n8n появится возможность создать «учётку» с токеном Amvera. Все параметры можно заполнять по шаблону.
nodes/AmveraLlm.node.ts -основной файл, где расписана вся логика ноды.
Нода принимает на вход список сообщений, модель и тип вывода, а дальше делает запрос к API Inference и возвращает результат в зависимости от выбранного режима.
import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription, } from ‘n8n-workflow’; export class AmveraLlm implements INodeType { description: INodeTypeDescription = { displayName: ‘Amvera LLM’, name: ‘amveraLlm’, group: [‘transform’], version: 1, description: ‘Работа с Amvera LLM API’, defaults: { name: ‘Amvera LLM’ }, inputs: [‘main’], outputs: [‘main’], credentials: [{ name: ‘amveraLlmApi’, required: true }], properties: [ { displayName: ‘Model’, name: ‘model’, type: ‘options’, options: [ { name: ‘llama8b’, value: ‘llama8b’ }, { name: ‘llama70b’, value: ‘llama70b’ }, { name: ‘gpt-4.1’, value: ‘gpt-4.1’ }, { name: ‘gpt-5’, value: ‘gpt-5’ }, ], default: ‘llama8b’, }, { displayName: ‘Messages’, name: ‘messages’, type: ‘fixedCollection’, typeOptions: { multipleValues: true }, default: {}, options: [ { name: ‘message’, displayName: ‘Message’, values: [ { displayName: ‘Role’, name: ‘role’, type: ‘options’, options: [ { name: ‘system’, value: ‘system’ }, { name: ‘user’, value: ‘user’ }, { name: ‘assistant’, value: ‘assistant’ }, ], default: ‘user’, }, { displayName: ‘Text’, name: ‘text’, type: ‘string’, default: », }, ], }, ], }, { displayName: ‘Режим вывода’, name: ‘returnMode’, type: ‘options’, options: [ { name: ‘Ответ модели’, value: ‘first’ }, { name: ‘JSON’, value: ‘raw’ }, ], default: ‘first’, }, ], }; async execute(this: IExecuteFunctions): Promise { const items = this.getInputData(); const output: INodeExecutionData[] = []; const creds = await this.getCredentials(‘amveraLlmApi’); const token = creds.apiToken as string; for (let i = 0; i < items.length; i++) { const model = this.getNodeParameter(‘model’, i) as string; const messages = this.getNodeParameter(‘messages.message’, i, []) as Array<{ role: string; text: string }>; const mode = this.getNodeParameter(‘returnMode’, i) as string; const endpoint = model.startsWith(‘llama’) ? ‘llama’ : ‘gpt’; const body = { model, messages }; const res = await this.helpers.httpRequest({ method: ‘POST’, url: `https://kong-proxy.yc.amvera.ru/api/v1/models/${endpoint}`, headers: { ‘X-Auth-Token’: `Bearer ${token}`, ‘Content-Type’: ‘application/json’, }, body, json: true, }); let answer = »; if (model.startsWith(‘llama’)) { const result = res?.result; if (result?.alternatives?.length) { answer = result.alternatives[0]?.message?.text ?? »; } } else { if (res?.choices?.length) { answer = res.choices[0]?.message?.content ?? »; } } if (mode === ‘first’) { output.push({ json: { text: answer } }); } else { output.push({ json: res }); } } return [output]; } }
Сборка и публикация
Компиляция в JavaScript:
npm run build
Публикация:
# Предварительно логинимся в аккаунт npm npm login # Публикуем пакет npm publish —access public
После этого пакет будет доступен на странице вашего профиля npm. По имени пакета можно будет установить его в n8n. Самое главное, чтобы он начинался с n8n-nodes-. Так n8n определяет пакеты, предназначенные для установки в n8n.
Итог
Теперь пользователи могут подключать LLaMA и GPT к n8n буквально в пару кликов, без ручной настройки HTTP-запросов, и не думать об оплате иностранными картами и проксировании запросов.
Релевантные статьи:
n8n – всё, что нужно знать о сервисе
n8n. Создаём AI Telegram-agent с установкой и настройкой
Источник: habr.com
Оцените материал:
Похожие записи
Fulcra добавляет универсальный многопользовательский режим для любых выбранных вами агентов.
21.09.2026
Claude уже помогает создавать следующую версию себя. Что это значит для тех, кто всё ещё использует AI как чат-бота
21.09.2026
Собираем домашний сервер для LLM дешевле RTX 3090: NVIDIA Tesla V100 SXM2 в 2026 году
21.09.2026Присоединяйтесь и подпишитесь на рассылку самых свежих новостей по Email
Получайте свежие новости и идеи на почту. Без спама — только самое интересное.
Нажимая «Подписаться», вы соглашаетесь с политикой конфиденциальности.
