В апреле прошлого года наш продакшен встал ровно в 03:00 по Москве. Мониторинг взорвался алертами HTTP 402 Payment Required от API OpenAI. Причина оказалась банальной: виртуальная карта банка из СНГ, привязанная к биллингу, уперлась в невидимый лимит на трансграничные операции. Пока мы будили CEO, искали человека с работающей зарубежной картой и перепривязывали способы оплаты, сервис лежал четыре часа. SLA был нарушен, клиенты негодовали.
Но настоящая боль скрывалась глубже, в таблицах финансового директора. Наша компания разрабатывает платформу аналитики обращений клиентов. Мы продаем B2B-подписку за рубли с жестко зафиксированными тарифами на год вперед. А себестоимость главной фичи — генерации саммари и извлечения сущностей — формировалась в долларах.
Каждый месяц мы играли в финансовую рулетку.
Анатомия валютного хаоса
Процесс оплаты выглядел как квест из нулевых. Сначала бухгалтерия переводила рубли на счет ИП. ИП покупал USDT на P2P-площадке, теряя на спреде около 3-5%. Затем стейблкоины переводились в криптобанк, конвертировались в фиат (еще 2% комиссии) и ложились на виртуальную карту, которая брала свою комиссию за обслуживание и транзакции.
Итоговый курс доллара для нас всегда превышал официальный курс ЦБ на 10-15%. Но хуже всего — волатильность. Когда макроэкономика трясла курсы валют, наша юнит-экономика трещала по швам.
Давайте посмотрим на P&L одного из наших корпоративных клиентов:
- Стоимость контракта: 150 000 рублей в месяц.
- Заложенная маржинальность: 40%.
- Лимит затрат на LLM: 60 000 рублей.
В спокойный месяц мы сжигали $500. При курсе 90 рублей за доллар (с учетом всех крипто-комиссий около 100 рублей) мы тратили 50 000 рублей. Экономика сходилась. В месяц турбулентности курс на P2P взлетал до 115 рублей. Те же $500 превращались в 57 500 рублей. Добавим сюда случайный всплеск пользовательской активности (сгенерировали больше длинных отчетов), потребление выросло до $650, и вот мы ушли в минус по конкретному клиенту.
Бухгалтерия добавляла свой слой ада. Зарубежные инвойсы без синей печати не принимались к вычету. Мы платили налоги со всей выручки, не имея возможности легально обосновать расходы на серверную инфраструктуру искусственного интеллекта. Мы стали заложниками серой инфраструктуры.
Попытки архитектурных костылей
Инженерный отдел пытался решить финансовую проблему техническими средствами. Мы внедрили агрессивное семантическое кеширование на базе Redis и Sentence Transformers. Если пользователь задавал похожий вопрос по тому же документу, мы отдавали закешированный ответ. Это срезало 15% запросов.
Затем мы написали сложный микросервис-прокси, который маршрутизировал запросы. Короткие и простые задачи летели в локально развернутую Llama-3-8B. Сложные задачи на рассуждение отправлялись в GPT-4. Но локальные модели требовали аренды GPU-инстансов, которые тоже тарифицировались в долларах. Круг замкнулся. Мы боролись со следствием, а не с причиной. Причина заключалась в несовпадении валюты выручки и валюты костов.
Выход из петли: Интеграция RouterAPI
Мы начали искать провайдера, который агрегирует доступ к топовым LLM, но работает в правовом поле РФ. Наш выбор остановился на RouterAPI. Главный критерий — они принимают оплату с расчетного счета юридического лица в рублях по договору и выдают закрывающие документы.
Интеграция на уровне кода заняла несколько минут. Поскольку RouterAPI предоставляет OpenAI-совместимый эндпоинт, нам потребовалось изменить ровно две строчки в конфигурации клиента:
from openai import AsyncOpenAI
import os
client = AsyncOpenAI(
api_key=os.getenv("ROUTERAPI_KEY"),
base_url="https://api.routerapi.net/v1"
)
Но настоящая трансформация произошла в архитектуре биллинга нашего собственного приложения.
Перестройка системы учета
Переход на рублевый биллинг позволил нам отказаться от приблизительных вычислений. В RouterAPI стоимость токенов изначально зафиксирована в рублях. Мы перестали парсить курсы валют из внешних API для расчета текущей маржинальности.
Мы спроектировали новый сервис BillingTrackerService. Каждый ответ от RouterAPI содержит метаданные об использовании токенов. Мы реализовали асинхронный воркер, который вычитывает логи прокси-клиента и складывает их в ClickHouse для аналитики.
Схема данных теперь выглядит прозрачно:
CREATE TABLE llm_usage_logs (
request_id UUID,
client_id UInt32,
model_name String,
prompt_tokens UInt32,
completion_tokens UInt32,
cost_rub Decimal32(4),
created_at DateTime
) ENGINE = MergeTree
ORDER BY (client_id, created_at);
Вместо сложной логики конвертации мы просто суммируем поле cost_rub. Теперь финансовый дашборд обновляется в реальном времени. Если клиент приближается к лимиту рентабельности, система автоматически переключает его запросы на более дешевую модель (например, с GPT-4o на Claude-3-Haiku) с помощью паттерна Strategy на уровне нашего оркестратора промптов.
Мы больше не боимся, что ночью отвалится виртуальная карта. Баланс пополняется автоматическим платежом с расчетного счета раз в месяц.
Легализация расходов и покой
Через месяц после перехода финдиректор пришел к нам с улыбкой. Акт выполненных работ от RouterAPI идеально лег в бухгалтерскую программу. Расходы на AI наконец-то стали официальными затратами компании. Это уменьшило налогооблагаемую базу и сэкономило компании сотни тысяч рублей в квартал только на налогах.
Мы перестали терять 10% бюджета на комиссиях криптообменников. Мы уволили человека, чьей неофициальной обязанностью было следить за балансом пяти разных виртуальных карт.
Разработка вернулась к своим прямым обязанностям — улучшению продукта. Мы перестали писать костыли для экономии центов на скачках курса. Инфраструктура должна быть невидимой и предсказуемой. И рублевый биллинг AI-моделей дал нам именно эту предсказуемость. Переход от долларовых мучений к прозрачной рублевой экономике оказался лучшим архитектурным решением года, хотя формально мы просто сменили URL в конфиге.