Если ты строишь бизнес или автоматизируешь процессы в компании, то наверняка чувствуешь усталость от бесконечных подписок: здесь платишь $20 в месяц за генерацию картинок, там $40 за видео, ещё $30 за расшифровку звонков. В итоге бюджет раздувается, а единой надёжной системы как не было, так и нет.
Инженер и практик Нейт Херк (Nate Herk), протестировавший свыше сотни ИИ-сервисов, предложил прагматичный подход: отказаться от переплаты за обёртки и собрать собственный устойчивый конвейер на базе проверенных компонентов.
Давай разберём этот стек по слоям и настроим надёжный фоновый триггер.
Семь кирпичиков продакшен-стека
Стек Херка объединяет 7 специализированных инструментов:
- Claude Code и Codex — терминальные кодинг-агенты, которые закрывают до 90% инженерных задач и заменяют платные конструкторы скриптами автоматизации;
- OpenRouter — единый API-шлюз к 500+ моделям от 80+ провайдеров с единым счётом, умным кэшированием и автоматическим переключением на резервные модели при сбоях;
- VPS на Linux (Hostinger) — недорогие виртуальные серверы для круглосуточного запуска открытых агентов в Docker-контейнерах;
- GrokBot / Вебхуки — быстрый парсинг медиа-контента и сигналов из социальных сетей;
- Glaido — моментальный голосовой ввод команд без задержек;
- Kie.ai — микро-биллинг генерации медиа по оптовой себестоимости API;
- Trigger.dev v3 — бессерверный фреймворк фоновых задач на TypeScript для оркестрации долгих цепочек вызовов без риска серверных таймаутов.
Ранее мы разбирали ключевые правила построения надежных ИИ-агентов для продакшена, и выбор Trigger.dev v3 идеально укладывается в эту парадигму.
Реализация фонового воркера на TypeScript
Ниже представлена конфигурация фоновой задачи в src/trigger/ai-pipeline.ts с автоматическим fallback-роутингом через OpenRouter:
import { task, logger } from "@trigger.dev/sdk/v3";
interface PipelinePayload {
prompt: string;
leadId: string;
preferredModel?: string;
}
export const processAIPipeline = task({
id: "process-ai-pipeline",
retry: {
maxAttempts: 3,
minTimeoutInMs: 2000,
maxTimeoutInMs: 15000,
factor: 2
},
run: async (payload: PipelinePayload, { ctx }) => {
logger.info(`Запуск пайплайна для лида ${payload.leadId}`, { ctx });
const targetModel = payload.preferredModel || "anthropic/claude-3.5-sonnet";
const response = await fetch("https://openrouter.ai/api/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.OPENROUTER_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
model: targetModel,
models: [targetModel, "openai/gpt-4o-mini", "deepseek/deepseek-chat"],
messages: [
{ role: "system", content: "Ты аналитический ассистент, формирующий сводку по клиенту." },
{ role: "user", content: payload.prompt }
],
temperature: 0.2
})
});
if (!response.ok) {
throw new Error(`Ошибка OpenRouter API: ${response.status}`);
}
const data = await response.json();
return {
leadId: payload.leadId,
analysis: data.choices?.[0]?.message?.content,
modelUsed: data.model
};
}
});
Запуск и мониторинг через CLI
Для деплоя и запуска воркера достаточно стандартных команд терминала:
# Локальный запуск воркера в режиме реального времени
npx trigger.dev@latest dev
# Деплой стабильной версии пайплайна в облачную инфраструктуру
npx trigger.dev@latest deploy
Массив models в теле запроса к OpenRouter автоматически переключает вызов на следующую модель в списке, если у основного провайдера кончились лимиты или произошёл сетевой сбой.
Такой подход избавляет бизнес от хаоса микро-подписок и даёт полный контроль над инфраструктурой и бюджетом.
