Вызов vLLM и других OpenAI-совместимых эндпоинтов из n8n
Уверенный8 мин чтенияАвтоматизация

Вызов vLLM и других OpenAI-совместимых эндпоинтов из n8n

Вызывайте локальную OpenAI-совместимую конечную точку /v1/chat/completions из узла HTTP Request в n8n с явной аутентификацией, бюджетами тайм-аутов, проверками базового URL и границей частной сети.

Что вы сможете сделать

n8n может вызывать локальный OpenAI-совместимый маршрут /v1/chat/completions через узел HTTP Request, но конечная точка является частной инфраструктурой: аутентифицируйте открытые маршруты, изолируйте сервис, измеряйте его задержку и не считайте ключ API vLLM периметром всего сервера.

Сохраняется только в этом браузере.
В этой статье

Частные модели полезны, только если автоматизации могут к ним обращаться. Проверенный общий путь n8n проходит через узел HTTP Request. Он может вызвать OpenAI-совместимый сервер vLLM или другое развёртывание, которое действительно открывает и принимает POST /v1/chat/completions.

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

Если вы ещё решаете, подходит ли n8n в качестве слоя автоматизации, начните со сравнения n8n, Zapier и Make. О рабочих процессах агентного типа поверх этого слоя см. статью «Ваш первый ИИ-агент в n8n».

OpenAI-совместимая конечная точка, доступная из интернета без аутентификации, превращается в открытый прокси инференса. Тот, кто её найдёт, сможет расходовать GPU-время. В случае vLLM злоумышленники также могут достичь маршрутов инференса и эксплуатации, которые не защищает --api-key. Утечка промптов является отдельным риском журналирования и контроля доступа, а не автоматическим свойством чат-маршрута. Привязывайте сервис к частным сетям, требуйте аутентификацию на шлюзе и не настраивайте переадресацию порта «только для демонстрации».

Что здесь значит «OpenAI-совместимый»

Для целей n8n контракт узкий:

  • Base URL указывает на корень сервера или /v1 в зависимости от того, как ожидает нода.
  • Chat-вызовы идут на /v1/chat/completions (или эквивалентный путь, который дописывает ваша нода).
  • Тело запроса похоже на chat completion: model, messages, опционально temperature, max_tokens и т. д.
  • Ответ возвращает choices с message content, который нода может разобрать.

Полное совпадение со всеми возможностями OpenAI не требуется. Нужен маршрут завершения чата, запрос, аутентификацию, идентификатор модели и форму ответа которого вы проверили из n8n.

vLLM документирует этот OpenAI-совместимый серверный режим; другие среды выполнения предлагают сходные формы. Проверьте маршрут и пробный запрос curl на вашей установке, прежде чем подключать производственный рабочий процесс. Интерфейс распространён, но маршруты, идентификаторы моделей, аутентификация и совместимость ответа могут меняться между продуктами и версиями.

Проверенный путь n8n: HTTP Request

Текущая официальная документация n8n не подтверждает наличие пользовательского базового URL для учётных данных OpenAI или узла OpenAI Chat Model. Считайте такое поле в конкретной версии n8n или узле сообщества зависящим от версии, пока не проверите его. Документированный общий путь использует узел HTTP Request, который даёт явный контроль над методом, URL, заголовками, телом, аутентификацией и настройками повторов узла.

Используйте универсальные учётные данные bearer или заголовка, а не встраивайте секрет в рабочий процесс. Учётные данные должны содержать значение, которое действительно проверяет сервис инференса или его шлюз. Ключ-заполнитель для доступной только в LAN конечной точки не является аутентификацией.

POST http://10.0.0.20:8000/v1/chat/completions
Content-Type: application/json
Authorization: Bearer <secret>
{
  "model": "installer-recommended-local-model",
  "messages": [
    { "role": "system", "content": "Classify the ticket. Reply with JSON only." },
    { "role": "user", "content": "{{ $json.body }}" }
  ],
  "temperature": 0
}

Замените строку модели точным обслуживаемым идентификатором из /v1/models. Если вы используете локальный путь vLLM в NVIDIA NemoClaw, возьмите идентификатор, записанный из работающего сервера или выбранного управляемого профиля. Управляемый vLLM является вариантом для поддерживаемого хоста, а не универсальным свойством каждой установки NemoClaw; обычный Linux требует явного экспериментального выбора или выбора поставщика. Не придумывайте имя контрольной точки по памяти.

HTTP Request также служит подходящим запасным путём, когда специализированный узел поставщика не документирует пользовательскую конечную точку.

Аутентификация и сетевые ограничения, которые действительно работают

Локально не значит без аутентификации.

Для vLLM --api-key не является границей безопасности для всего HTTP-сервиса. Официальная страница документации описывает защищённые и незащищённые наборы конечных точек и рекомендует сетевую изоляцию плюс обратный прокси, когда необходимо обеспечить доступность (руководство по безопасности vLLM). Наличие ключа API на маршрутах вывода не гарантирует, что каждый маршрут отклоняет неавторизованный трафик.

Базовое требование: привязывайте vLLM только к loopback, сети контейнера/кластера или частному интерфейсу, защищённому политикой брандмауэра, которая разрешает доступ только прокси или рабочему процессу n8n. Разместите Caddy, nginx, Traefik или аналогичный контролируемый шлюз перед vLLM, если подключаться должно более одного хоста. Завершайте TLS там, где путь не является уже доверенным зашифрованным оверлеем, аутентифицируйте каждый экспонируемый маршрут, ограничивайте скорость запросов, устанавливайте лимиты размера запросов и разрешайте только необходимые пути. n8n общается с прокси; клиенты не обращаются к vLLM напрямую.

Используйте --api-key vLLM как дополнительное средство контроля для поддерживаемых конечных точек вывода, а не как замену прокси или брандмауэра. Храните все учётные данные в соответствующем хранилище n8n или утверждённом хранилище секретов, а не в полях рабочего процесса, которые экспортируются в Git.

Не делайте:

  • Привязка 0.0.0.0 к домашнему или офисному WAN-адресу «временно».
  • Публикация URL туннеля в Slack.
  • Использование личного ключа OpenAI как «пароля» для локального сервера, который его не проверяет: если сервер игнорирует Authorization, ключ ничего не защищает.

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

Для общей безопасности интеграций, включая учётные данные с ограниченной областью действия, сервисные учётные записи и журналы аудита, используйте паттерны из материала «Безопасное подключение ИИ».

Тайм-ауты и медленный инференс

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

Выставляйте таймауты сознательно:

  1. Измерьте холодный и прогретый вызовы curl с хоста n8n.
  2. Установите тайм-аут начального ответа узла выше измеренного p95 с обоснованным запасом на всплески нагрузки.
  3. Согласуйте ограничения рабочего процесса, прокси, клиента и сервера инференса с полным бюджетом генерации.
  4. Для классификации или маршрутизации предпочитайте короткие промпты и меньшее значение max_tokens; длинную генерацию оставляйте этапам подготовки черновиков, которые могут продолжаться асинхронно.

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

Выполняйте дымовой тест из сетевого пространства имён процесса n8n, а не только с ноутбука. Контейнер n8n не видит localhost хоста, пока порт модели не опубликован в доступной ему сети. Используйте имя сервиса Docker, IP-адрес шлюза хоста или адрес локальной сети, доступный контейнеру.

Чеклист безопасной настройки базового URL

Прежде чем считать учётные данные готовыми для производственной среды:

ПроверкаУсловие прохождения
ДоступностьСреда выполнения n8n может достичь документированного маршрута здоровья и аутентифицированного /v1/models, не покидая частную сеть
Путь/v1/chat/completions успешно выполняется с небольшим полезным нагрузком
АутентификацияНеавторизованный вывод отклоняется; нет незащищённых маршрутов vLLM, доступных за пределами предполагаемой частной границы
Идентификатор моделиТочная строка совпадает с тем, что объявляет сервер
TLSТребуется, если путь пересекает недоверенные сети
ЛогированиеЛогирование запросов/ответов является намеренным и ограничено по времени хранения
ОтказоустойчивостьРабочий процесс имеет чёткое поведение при недоступности конечной точки
ТаймаутОграничения начального ответа и полного выполнения отражают измерения из среды выполнения n8n

Поведение при недоступной конечной точке должно быть явным: повторные попытки с нарастающей задержкой, очередь для человека или заметно завершившийся ошибкой запуск. Не переключайтесь незаметно на публичный API с иной моделью конфиденциальности, если такой резервный путь не задокументирован и не одобрен.

Никогда не выставляйте без шлюза

Правило простое: не открывайте vLLM напрямую недоверенной сети. Его ключ API не защищает весь HTTP-сервис. Используйте сетевую изоляцию и открывайте только необходимые пути через аутентифицированный шлюз с ограничением частоты.

Приемлемые паттерны:

  • Только loopback или сеть Docker, n8n на том же хосте или в оверлее.
  • LAN + whitelist брандмауэра для прокси или идентификатора/IP рабочего процесса n8n; проверьте правила с отключённого хоста.
  • VPN или mesh Tailscale/ZeroTier; никаких слушателей WAN.
  • Обратный прокси со строгой аутентификацией, TLS и ограничениями скорости, если необходимо обслуживать несколько доверенных клиентов.

Неприемлемые паттерны:

  • Неаутентифицированный WAN bind.
  • Демо «auth потом» на реальном датасете.
  • Один неаутентифицированный эндпоинт на все ноутбуки guest Wi-Fi.

Если вы строите частный стек из локального инференса, оркестрации n8n и агентского шага, используйте базовый URL модели как внутренний контракт. Hermes и другие среды выполнения могут обращаться к тому же частному сервису. Когда n8n вызывает Hermes, выбирайте аутентифицированный API-сервер, если n8n нужен результат, или адаптер вебхуков HMAC для приёма события и настроенной доставки Hermes. Это разделение описано в статье «n8n → Hermes: вызов API или событийный вебхук».

Минимальный частный путь поддержки

Пример потока, который можно реализовать без выдуманных показателей производительности:

  1. Вебхук тикета попадает в n8n.
  2. Валидация и редактирование полей.
  3. HTTP Request вызывает частный /v1/chat/completions и получает классификацию в JSON.
  4. Узел Switch маршрутизирует результат по метке.
  5. Черновики, покидающие границу компании, ожидают подтверждения человеком (идемпотентность и человеческие подтверждения).

Этого достаточно, чтобы доказать, что локальный эндпоинт заработал своё место, прежде чем добавлять более богатых агентов.

Что проверить в день правок

Интерфейсы продуктов и названия полей учётных данных меняются. В день выпуска или обновления этого рабочего процесса:

  1. Подтвердите актуальную документацию для маршрута OpenAI-совместимого вашего сервера вывода.
  2. Подтвердите, что учётные данные и конфигурация узла HTTP Request по-прежнему отправляют требуемую аутентификацию, заголовки и необработанную форму JSON.
  3. Повторно запустите curl и один тестовый запуск n8n с непромышленной полезной нагрузкой.
  4. Подтвердите, что слушатель остаётся частным (ss/lsof, правила брандмауэра, отсутствие неожиданных туннелей), запрос неавторизованного вывода терпит неудачу, а документированные незащищённые конечные точки vLLM недоступны через внешнюю границу.

Локальные OpenAI-совместимые конечные точки позволяют n8n использовать частный инференс без переписывания графа автоматизации. Главное здесь не хитрое составление промптов. Относитесь к инференсу как к любому внутреннему API: аутентифицируйте на открытой границе, измеряйте, журналируйте осознанно и не допускайте посторонних.

Читать дальше

Продолжайте тот же учебный путь со следующими практическими статьями.

Углубиться

Тщательно подобранные внешние курсы, которые глубже раскрывают эту тему.

DeepLearning.AI

Practical Multi AI Agents and Advanced Use Cases with crewAI

João Moura (Founder, CrewAI)

Одновременно закрывает вертикали продаж и клиентской поддержки и даёт по-настоящему практичный курс по агентам: вы строите агентный пайплайн продаж (скоринг лидов, персонализированный аутрич) и пайплайн инсайтов по данным поддержки — два из пяти практических проектов, — а преподаёт основатель CrewAI. Требует базового Python, поэтому стоит рядом с другими курсами builder-трека, а не с no-code выбором.

Уверенный~2h 49m · в своём темпе (15 уроков)
Hugging Face

AI Agents Course

Hugging Face

Самое понятное открытое изложение агентных систем. Курс не привязан к одному вендору: он рассматривает фреймворки, которые инженеры реально сравнивают, включая smolagents, LlamaIndex и LangGraph.

Уверенный~25 часов
Salesforce Trailhead

Quick Start: Assemble a Service Agent with Agentforce Builder

Salesforce Trailhead

Курс по no-code сборке агентов, которого не хватало нашему среднему уровню — каждый существующий средний выбор (LangChain, LlamaIndex, LangGraph, Hugging Face) предполагает, что вы пишете на Python. Здесь вы настраиваете реального сервисного агента, описывая желаемое простым языком в Agentforce Builder — без кода — на собственной бесплатной платформе Salesforce Trailhead.

Уверенный~40 минут · в своём темпе

Все курсы в категории «Автоматизация»