n8n AI Agent с GPU: vision, image-gen и custom-tools
Когда дефолтных OpenAI-tools мало, к n8n AI Agent подключают GPU-backend: SDXL/Flux как image-tool, qwen-vl как vision-tool, bge-reranker как rerank-tool. Управляемый GPU вместо своей фермы.
Обновлено: 2026-05-19
TL;DR
В n8n с 2024 года есть AI Agent нода — она оборачивает LLM-planner поверх каталога tools, которые агент вызывает сам. Стандартные tools (HTTP, Wikipedia, calculator) хороши для текста, но для vision (анализ фото), генерации изображений, custom-embeddings и rerank нужен GPU-backend. Этот гайд показывает, как описать GPU-tool для AI Agent, ограничить расходы и поймать частые грабли с зацикливаниями и ошибками.
Что такое AI Agent в n8n
AI Agent nodes (LangChain-семейство в n8n) — это «оркестратор»:
- LLM-planner (обычно GPT-4 / Claude / open-source через OpenRouter) получает задачу пользователя.
- У planner-а есть каталог tools — каждый описан в JSON Schema: имя, описание, аргументы.
- Planner решает, какой tool вызвать и с какими параметрами. n8n исполняет tool (это может быть HTTP-нода, другой sub-workflow, function), результат возвращается planner-у.
- Цикл повторяется, пока planner не считает, что достаточно информации, и выдаёт финальный ответ.
Без GPU агент решает text-задачи: «найди статью, посчитай, отправь письмо». С GPU-tools он может «посмотри на фото и опиши, что не так», «сгенерируй обложку», «отсортируй 100 документов по релевантности через bge-reranker».
Зачем агенту GPU
Если у вас один из этих сценариев — без GPU не обойтись:
- Vision: анализ продуктового фото, OCR в PDF/чеках, визуальный QA («есть ли на фото дефект?»). Нужны Qwen2-VL, LLaVA-NeXT, InternVL.
- Image generation as tool: «сгенерируй превью к статье», «нарисуй вариант обложки». SDXL / Flux.
- Embeddings своих моделей: бизнес-домен требует кастомных эмбеддингов (BGE-M3 для русского, e5-mistral-7b для семантики). OpenAI embeddings не всегда годятся.
- Rerank: после векторного поиска нужно пересортировать top-50 через bge-reranker-v2 / cohere-rerank-multilingual. На CPU это десятки секунд на запрос, на GPU — миллисекунды.
- Voice/Audio: Whisper для транскрибации, F5-TTS для голоса. Whisper-large-v3 на GPU стабильно >5× быстрее CPU.
OpenAI-embeddings и DALL-E можно дёргать через API без своего GPU — но они платные, английские по дефолту и не позволяют дообучить под домен. GPU-tool через managed-API даёт компромисс: вы получаете «свой» backend, но не держите GPU физически.
Архитектура: AI Agent + GPU-tool
[Webhook Trigger / Chat Trigger]
↓
[AI Agent]
├─ Chat Model: OpenAI gpt-4o / Anthropic claude-sonnet-4-5
├─ Memory: Postgres / Redis (для многотуровых диалогов)
└─ Tools:
├─ HTTP Request Tool: generate_image → POST на gpupool /v1/images/generate
├─ HTTP Request Tool: describe_image → POST на gpupool /v1/vision/describe
├─ HTTP Request Tool: rerank → POST на gpupool /v1/rerank
└─ Workflow Tool: fetch_products → sub-workflow с Postgres-запросом
↓
[Output: финальный ответ агенту]
Каждый GPU-tool — это HTTP Request Tool (отдельная сабнода Tools в n8n AI Agent ноде). У неё свой JSON Schema аргументов, своё описание для planner-а, и она вызывает managed-API под капотом.
Шаг 1: описать tool для planner-а
Самое важное в Custom Tool — это description. Planner выбирает tool по описанию, а не по имени. Плохое описание → агент будет звать tool не там или вообще не звать.
Сравнение:
| Плохо |
Хорошо |
generate_image: рисует |
generate_image: создаёт изображение по текстовому описанию. Используй, когда пользователь явно просит картинку, превью, иллюстрацию или иконку. Принимает prompt (что нарисовать) и aspect_ratio (16:9, 1:1, 9:16). |
describe_image: смотрит фото |
describe_image: анализирует изображение по URL. Используй, когда нужно описать, что на фото, найти текст на картинке (OCR), оценить качество продуктового фото или определить тип объекта. Возвращает структурированный JSON: caption, objects, has_text, ocr_text. |
Описание планера должно быть длинным и конкретным — чем больше signal, тем меньше «случайных» вызовов.
Шаг 2: HTTP Request Tool — generate_image
В n8n AI Agent → Tools → +Add → HTTP Request Tool:
- Name:
generate_image
- Description: см. таблицу выше.
- Method: POST
- URL:
https://api.gpupool.ru/v1/images/generate
- Authentication: Bearer (Credentials с API-ключом).
- Schema (что planner будет передавать):
{
"type": "object",
"properties": {
"prompt": {
"type": "string",
"description": "Описание того, что нарисовать. Английский даёт лучшее качество."
},
"aspect_ratio": {
"type": "string",
"enum": ["1:1", "16:9", "9:16", "4:5"],
"description": "Соотношение сторон."
}
},
"required": ["prompt"]
}
- Body (n8n подставит
{{ $fromAI('prompt') }}):
{
"model": "sdxl-base-1.0",
"prompt": "{{ $fromAI('prompt') }}",
"aspect_ratio": "{{ $fromAI('aspect_ratio', '1:1') }}",
"steps": 25,
"client_id": "agent-{{ $execution.id }}"
}
Дальше — два варианта:
- Sync managed-API: ответ сразу с URL результата. Просто возвращаем body в planner.
- Async: возвращается
task_id. Тогда tool превращается в sub-workflow с polling-логикой; для AI Agent это становится одним вызовом «дай результат», ждать должен tool, не planner.
Шаг 3: vision-tool — describe_image
Vision-задачи на лету: prompt+image_url → JSON-описание.
- Name:
describe_image
- URL:
https://api.gpupool.ru/v1/vision/describe
- Schema:
{
"type": "object",
"properties": {
"image_url": {
"type": "string",
"description": "Публичный URL изображения для анализа."
},
"task": {
"type": "string",
"enum": ["caption", "ocr", "quality_check", "object_detection"],
"description": "Тип анализа."
}
},
"required": ["image_url", "task"]
}
Под капотом это Qwen2-VL-7B (баланс цены/качества) или Qwen2-VL-72B (когда нужна высокая точность OCR на сложных шрифтах). Managed-API сам решит, какой роутинг — агенту это не важно.
Шаг 4: rerank-tool
После векторного поиска (qdrant / pgvector → top-50 кандидатов) часто нужно пересортировать по релевантности к запросу через cross-encoder reranker. bge-reranker-v2-m3 даёт сильное улучшение в разном «русский запрос → русские документы».
- Name:
rerank_documents
- URL:
https://api.gpupool.ru/v1/rerank
- Schema:
query, documents[], top_k.
Это пример дешёвого GPU-tool: один запрос реранкера — миллисекунды, цена копейки. Но критичен для качества RAG.
Шаг 5: контроль расходов
AI Agent склонен зацикливаться: planner вызывает tool, видит ответ, решает «не хватает», вызывает ещё, и так пять раз. Каждый вызов = LLM-тарифицируется + GPU-задача оплачивается.
Защиты:
- maxIterations в AI Agent — установите 5–8. Это верхний предел циклов «planner → tool → planner». Выше — почти всегда баг.
- Лимит токенов planner-а — для GPT-4o выставляйте
max_tokens: 1500. Длинные финальные ответы редко полезны.
- Rate limit на сторону tool — Wait node на 1-2 секунды перед HTTP-вызовом GPU. Замедляет, но защищает от runaway-агентов.
- Алерт на per-execution стоимость — n8n умеет emit events; собирайте их в Postgres или Yandex.Metrika и держите дашборд «выполнение → потрачено».
- A/B на planner-модель — gpt-4o-mini в 10 раз дешевле gpt-4o и часто достаточно хорош. Лучше тестируйте на ваших задачах.
Частые ошибки
| Симптом |
Причина |
Решение |
| Агент игнорирует GPU-tool, отвечает галлюцинацией |
Слабое description у tool |
Перепишите description — конкретные триггеры, примеры, when-to-use |
| Агент вызывает generate_image вместо search |
Схема не различает intent |
Разделить tools чётче, убрать перекрытия. Пример: find_existing_image vs generate_new_image |
| HTTP 401 от GPU-tool |
Credentials не привязаны |
Tool → Authentication → выбрать ваш сохранённый Bearer credential |
| Tool возвращает 200, но агент видит ошибку |
n8n обернул ответ в нестандартный формат |
В HTTP Request Tool → Output → Response Format = JSON, проверьте Response Field |
| Цикл из 30 итераций, счёт за час = ₽300 |
Нет maxIterations, planner залип |
Установить maxIterations=5–8, добавить explicit «верни ответ» в системный промпт |
| Vision-tool отвечает медленно (10–20s) |
Колд-старт большой модели |
Использовать managed-API с warm-pool, либо уменьшить модель (Qwen2-VL-7B вместо 72B) |
Какой GPU нужен под backend
Краткий ориентир для self-hosted (если решите не использовать managed-API):
| Сценарий |
GPU |
VRAM |
| SDXL inference (image gen, batch=1) |
RTX 4090 / A4000 |
12–24 GB |
| Flux dev (image gen, batch=1) |
RTX 4090 / A100 |
24–40 GB |
| Qwen2-VL-7B (vision) |
RTX 4090 |
16–24 GB |
| Qwen2-VL-72B (vision) |
A100 80GB / H100 |
80 GB |
| bge-reranker-v2-m3 (rerank) |
T4 / A10 / RTX 4090 |
4–8 GB |
| Whisper-large-v3 (audio) |
T4 / A10 / RTX 4090 |
6–8 GB |
| BGE-M3 / e5-mistral-7b (embeddings) |
RTX 4090 / A100 |
10–16 GB |
На managed-API всё это вы платите как $0.000Х за вызов или ~₽1–8 за задачу, без необходимости держать железо.
Чек-лист перед прод-релизом
Частые вопросы
Зачем AI Agent в n8n собственный GPU-backend?
Дефолтные OpenAI-инструменты решают text-задачи. Для vision (анализ фото, OCR), генерации изображений, кастомных embedding-моделей и больших reranker’ов нужен GPU. Подключение GPU-tool через HTTP Request позволяет агенту делать gen_image / describe_image / rerank как обычные function calls.
Как описать GPU-tool для AI Agent ноды?
В n8n AI Agent → Tools → Custom Tool: name=gen_image, description=«генерирует изображение по описанию», schema (JSON Schema аргументов: prompt, aspect_ratio), execute=HTTP Request на /v1/generate. Агент выберет этот tool сам, когда задача требует картинки.
Какая модель GPU нужна для агента с vision-tool?
Для Qwen2-VL-7B и LLaVA-NeXT хватает RTX 4090 (24 GB VRAM). Для Qwen2-VL-72B и больших мультимодальных нужен A100/H100 (80 GB). На managed-API эта сторона уже масштабируется — агент просто платит за вызов.
Как контролировать стоимость AI Agent с GPU-tools?
AI Agent может зацикливаться (planner запросил tool → ответ → снова tool). Ставьте maxIterations (обычно 5-8), верхнюю границу по токенам planner-LLM, и rate-limit на сторону HTTP-tool через Wait node или ваш API.