About Portfolio Services Blog Contact 🎙 Talk to AI
EN DE RU
🎙 Talk to AI
June 19, 2026 · 3 min read

Как контролировать и снижать расходы на API LLM: инструменты и паттерны для продакшена

Я — Denis Shokhirev, архитектор Enterprise AI, сейчас строю production-агентов для DACH-клиентов на стеке Claude, Supabase, n8n и self-hosted Postgres в Erlangen, Германия. Буквально на прошлой неделе у меня агент на Logistics B2B за сутки спалил $180 на LLM-запросах из-за одного багнутого workflow. Счет приходит каждый месяц, а оправдать перед CFO очередной перерасход всё сложнее. Почему LLM API — это новая статья риска LLM API (Anthropic, OpenAI, Google) — удобный инструмент, но их ценообра

Denis Shokhirev
Denis Shokhirev
Enterprise AI Architect
Telegram LinkedIn

Я — Denis Shokhirev, архитектор Enterprise AI, сейчас строю production-агентов для DACH-клиентов на стеке Claude, Supabase, n8n и self-hosted Postgres в Erlangen, Германия. Буквально на прошлой неделе у меня агент на Logistics B2B за сутки спалил $180 на LLM-запросах из-за одного багнутого workflow. Счет приходит каждый месяц, а оправдать перед CFO очередной перерасход всё сложнее.

Почему LLM API — это новая статья риска

LLM API (Anthropic, OpenAI, Google) — удобный инструмент, но их ценообразование нетривиально: стоимость зависит от количества токенов, типа модели и даже выбранного региона. Если не контролировать — расходы могут выйти из-под контроля за пару дней. Я видел, как простой loop в n8n, пропущенный через Claude, увеличил месячный счёт на 25% — только из-за случайной генерации лишних запросов.

Три уровня контроля: мониторинг, лимиты, оптимизация

1. Мониторинг расходов в реальном времени

Первое правило — видеть, что происходит. Для этого использую встроенные дашборды (OpenAI Usage Dashboard, Anthropic Console) и собственный трекинг на Supabase/Postgres. В каждый агент вставляю логирование:

def log_llm_usage(agent_id, model, tokens_in, tokens_out, cost_usd, meta):
    sql = '''
        INSERT INTO llm_usage_log (agent_id, model, tokens_in, tokens_out, cost_usd, meta, ts)
        VALUES (%s, %s, %s, %s, %s, %s, NOW())
    '''
    cursor.execute(sql, (agent_id, model, tokens_in, tokens_out, cost_usd, json.dumps(meta)))
    conn.commit()

Так я вижу реальную картину и могу быстро определить аномалии. Построить алерт на превышение средней стоимости за час — дело одной строки в Supabase Functions.

2. Жесткие лимиты на уровне workflow и API

OpenAI позволяет настроить hard limit на месяц (https://platform.openai.com/account/billing/limits). Но этого недостаточно — лимиты нужны и на уровне каждого workflow, чтобы баг в одном агенте не выбил весь бюджет. Пример паттерна в n8n:

if ($json["llm_tokens_today"] > 200_000) {
  throw new Error("LLM usage quota exceeded for workflow X");
}

Ещё один layer — выставлять per-user или per-customer cap через Postgres view с агрегацией:

CREATE VIEW daily_llm_cost AS
SELECT user_id, SUM(cost_usd) AS total
FROM llm_usage_log
WHERE ts::date = CURRENT_DATE
GROUP BY user_id;

n8n может делать запрос к этой view перед запуском цепочки и отказывать, если лимит превышен.

3. Оптимизация промптов и батчинг

Большая часть расходов — это лишние токены. В проде я использую Claude Code и OpenAI cookbook для оптимизации промптов: минимизация контекста, сокращение системных инструкций, агрегация запросов. На практике, сокращение промпта с 4К до 1К токенов уменьшает стоимость запроса в 4 раза без потери качества (по данным OpenAI, https://platform.openai.com/docs/guides/pricing, 2024).

Батчинг — объединение нескольких задач в один запрос — особенно эффективен для генерации коротких ответов или summarization. Пример:

batched_prompts = ["User 1: ...", "User 2: ...", "User 3: ..."]
response = openai.ChatCompletion.create(
    model="gpt-4o",
    messages=[{"role": "system", "content": "Summarize:"}] +
             [{"role": "user", "content": p} for p in batched_prompts]
)

Главное — контролировать, чтобы итоговый запрос не превышал лимит токенов на модель.

Таблица: сравнение инструментов трекинга расходов

ИнструментРазработчикТип контроляВремя отклика
OpenAI Usage DashboardOpenAIГлобальный, по API-ключу~5 минут
Anthropic ConsoleAnthropicГлобальный, по API-ключу~5 минут
Собственный Postgres трекингСобственная разработкаАгент, пользователь, кастомные лимитыРеальное время
Supabase Functions + WebhooksSupabaseАлерты, автоматизацияРеальное время

Контроль доступа и безопасное хранение ключей

Любая утечка API-ключа — риск не только для бюджета, но и для безопасности. Я использую Doppler для хранения secrets, а gitleaks и bandit — для статического анализа кода на предмет утечек. На всех продовых workflow стоит ротация ключей раз в 30 дней, а доступ выдается только через RBAC Supabase.

FAQ

Как быстро увидеть аномальный рост расходов?

Внедряю алерты через Supabase Functions — при превышении среднего значения за 1/12 месяца приходит Telegram-уведомление. Можно дополнительно строить графики в Grafana напрямую из Postgres.

Достаточно ли лимитов в панели OpenAI/Anthropic?

Это только базовый уровень. В проде часто важнее лимитировать не только глобально, но и per-user/per-agent. Иначе один баг может сжечь бюджет за сутки.

Какие паттерны оптимизации промптов самые рабочие?

Сокращаю контекст, убираю дублирующие инструкции, использую RAG вместо копипасты всей базы знаний.

Какие риски при self-hosted логировании расходов?

Главный — потеря данных при сбое БД. Использую резервное копирование и мониторинг состояния Postgres. Не храню sensitive данные в логах.

Как интегрировать трекинг в существующий workflow на n8n?

Добавляю отдельный node для вызова Supabase REST API после каждого LLM-запроса. Можно автоматизировать через шаблонный кастомный node.

В вашей продовой цепочке — где чаще всего всплывают перерасходы: баги в workflow, промпты или несанкционированный доступ? Я реально хочу понять, как это выглядит в других командах. Я провожу бесплатный 30-мин аудит стека для DACH-команд, строящих AI в регулированных отраслях. Напишите в LinkedIn или в @ger_dennis_ai.

Ready to build?

Turn your process into an AI system

Fixed price. Production quality. DACH B2B focus.

Start a project → ← All articles