Создание своего SaaS или продукта на базе LLM
Meridian как backend для AI-SaaS. Бюджеты клиентов с календарным сбросом по подписке, полный программный API для onboarding, размещение в SaaS-инфраструктуре или on-premise у крупного клиента.
Проблема
При создании SaaS или продукта на базе LLM команде нужно решить не одну, а связку инфраструктурных задач:
- Биллинг и тарифные планы. У каждого клиента — свой план: Free, Pro, Enterprise. План = денежный лимит на месяц и квота на количество запросов. Лимит должен сбрасываться в день обновления подписки, а не «через месяц после последнего сброса», иначе картина биллинга не совпадает с тем, что видит клиент.
- Программный onboarding. Когда новый клиент регистрируется в SaaS, его аккаунт, ключ и квота должны создаваться автоматически, без ручных шагов через UI шлюза.
- Изоляция между клиентами. Перерасход или утечка ключа одного клиента не должны затрагивать остальных.
- Размещение под клиента. Крупный enterprise-клиент с регулируемыми данными требует развёртывания LLM-шлюза в его собственной инфраструктуре (on-premise или в его облаке). Маленькие клиенты обслуживаются из вашей общей multi-tenant инсталляции.
- Прозрачность для клиента. Клиент хочет видеть, сколько он израсходовал за текущий период подписки, без обращения в поддержку.
Для качественного решения этих задач своими силами потребуется проинвестировать в высоконадежную и отлаженну систему, да еще и поддержать API множества провайдеров.
Кого это касается: основатели и команды SaaS, продуктовые команды строящие AI-функции на пользовательских данных, B2B-интеграторы, упаковывающие LLM-возможности для корпоративных клиентов.
Решение
- Готовый биллинг-механизм.
calendar_alignedбюджеты и доступ к расходу конкретного клиента через API закрывают задачи биллинга AI-расходов в SaaS. - Программный onboarding. Регистрация клиента → создание Customer и VK через 1–3 API-вызова, без ручных шагов в UI.
- Изоляция клиентов из коробки. Бюджет, rate limit и aтомарное списание — на уровне Customer; полный расход ого клиента не затрагивает других.
- Гибкое размещение. От одной общей инсталляции до полностью изолированных on-premise развёртываний для регулируемых клиентов — без изменения вашего кода.
- Прозрачность для клиента. Real-time расход, остаток бюджета, история — всё читается через API и встраивается в личный кабинет.
- Защита от перерасхода. Оценка запроса и rate limits не дают одному клиенту «съесть» провайдерскую квоту вашего SaaS (подробнее — Защита от опустошения бюджета и отказа в обслуживании).
Что предлагает Meridian
Meridian спроектирован так, что конечный клиент вашего SaaS становится сущностью Customer в Meridian-иерархии:
- Customer — представляет одного клиента SaaS. Внутри Customer — собственный бюджет (от назначенного Вами тарифного плана) и один или несколько Virtual Keys для аутентификации запроса.
- Календарно-выровненные бюджеты (
calendar_aligned: true) — лимит сбрасывается на границе календарного периода в UTC (день/неделя/месяц/год), а не как скользящее окно. Подходит для подписочных моделей с прозрачным «месячным» биллингом. - Полный Management API — все операции (создание Customer, VK, изменение бюджета, отзыв ключа, чтение использования) доступны программно через REST. Никаких операций, доступных только в UI.
- Гибкое размещение — Meridian разворачивается из Docker-образа или Helm-чарта. Возможные варианты:
- multi-tenant SaaS-инсталляция — одна инсталляция Meridian обслуживает всех ваших клиентов, изоляция через Customer/VK;
- отдельная инсталляция — отдельная инсталляция Meridian в инфраструктуре крупного клиента (его VPC, on-premise, регион с особым compliance);
- гибрид — общая инсталляция для основной массы клиентов + выделенные инсталляции для регулируемых enterprise-клиентов.
Сценарий
Команда строит SaaS-продукт «ассистент для контакт-центров». Тарифы:
- Free — $5 LLM-запросов в месяц лимит в 3 запроса за минуту.
- Pro — $200/мес, 50 req/min.
- Enterprise — индивидуальный лимит или без лимита, отдельное окружение или размещается на выделенном шарде, on-premise по запросу.
Onboarding нового клиента (Free → Pro):
- Клиент регистрируется в SaaS через ваш UI.
- Ваш бэкенд в момент регистрации вызывает Meridian API: создаёт Customer с бюджетом
$5/мес,calendar_aligned: true, выпускает один VK для клиента, сохраняетcustomer_idиvk_valueв вашей БД. - Клиент получает в личном кабинете SaaS доступ к Вашим функциям, используеющие LLM-модели.
- При апгрейде до Pro ваш бэкенд вызывает Meridian API: обновляет бюджет Customer (
max_limit: 200), обновляет rate limit VK.
Биллинг и прозрачность:
- Конец месяца —
calendar_alignedбюджет автоматически сбрасывается в 00:00 UTC выбранного числа. Это совпадает с границей биллингового периода в вашем SaaS. - На дашборде клиента вы можете опционально показывать «израсходовано $137 из $200 за май» — данные читаются из Meridian API.
Enterprise on-premise:
- Крупный клиент требует развёртывания LLM-функции внутри его периметра. Ваша команда разворачивает Meridian-инсталляцию в VPC клиента (Docker, Kubernetes), подключает её к корпоративному OpenAI-аккаунту клиента (или к собственному on-prem vLLM), создаёт там один Customer без денежного лимита.
- Ваше SaaS-приложение в их периметре указывает на их инсталляцию Meridian; данные клиента не покидают их инфраструктуру.
Конфигурация
Полный onboarding клиента в три вызова. Все вызовы идемпотентны на стороне SaaS-бэкенда (он сохраняет customer_id и vk_id и не пересоздаёт их при повторе).
1. Создание Customer с календарным бюджетом:
curl -X POST http://meridian/api/governance/customers \
-H "Content-Type: application/json" \
-d '{
"name": "acme-corp",
"metadata": {
"plan": "pro",
"external_id": "u-12345",
"signup_at": "2026-05-18T10:00:00Z"
},
"budget": {
"max_limit": 200.00,
"reset_duration": "1M",
"calendar_aligned": true
}
}'Ответ:
{
"id": "customer-acme",
"name": "acme-corp",
"budget_id": "budget-customer-acme",
"metadata": { "plan": "pro", "external_id": "u-12345", "signup_at": "2026-05-18T10:00:00Z" }
}2. Выпуск VK на клиента:
curl -X POST http://meridian/api/governance/virtual-keys \
-H "Content-Type: application/json" \
-d '{
"name": "acme-corp-default",
"customer_id": "customer-acme",
"provider_configs": [
{ "provider": "openai", "weight": 1.0, "allowed_models": ["gpt-4o-mini"] }
],
"rate_limit": {
"request_max_limit": 600,
"request_reset_duration": "1m"
},
"is_active": true
}'Ответ содержит value: "sk-bf-..." — это api_key, который вы отдаёте клиенту в его личном кабинете.
3. Чтение текущего расхода клиента (для дашборда):
curl http://meridian/api/governance/customers/customer-acmeВ ответе — current_usage и last_reset бюджета; разница max_limit - current_usage = доступный остаток до следующего сброса.
Апгрейд тарифа (PUT на Customer и VK):
# Поднять бюджет
curl -X PUT http://meridian/api/governance/customers/customer-acme \
-H "Content-Type: application/json" \
-d '{ "budget": { "max_limit": 500.00, "reset_duration": "1M", "calendar_aligned": true } }'
# Поднять rate limit
curl -X PUT http://meridian/api/governance/virtual-keys/{vk_id} \
-H "Content-Type: application/json" \
-d '{ "rate_limit": { "request_max_limit": 1200, "request_reset_duration": "1m" } }'Отзыв доступа (отмена подписки):
curl -X PUT http://meridian/api/governance/virtual-keys/{vk_id} \
-H "Content-Type: application/json" \
-d '{ "is_active": false }'Полная спецификация Management API доступна в разделе Справочники API.
В SaaS-сценарии config.json держит только инфраструктурный фундамент — провайдеры, плагины, хранилища. Customer и VK создаются через API во время onboarding, а не правкой файла.
{
"client": {
"enable_logging": true,
"enforce_auth_on_inference": true
},
"config_store": {
"type": "postgres",
"config": { "dsn": "env.CONFIG_DB_DSN" }
},
"logs_store": {
"type": "postgres",
"config": { "dsn": "env.LOGS_DB_DSN" }
},
"providers": {
"openai": { "keys": [ { "id": "k1", "value": "env.OPENAI_API_KEY", "models": ["*"], "weight": 1.0 } ] },
"anthropic": { "keys": [ { "id": "k1", "value": "env.ANTHROPIC_API_KEY", "models": ["*"], "weight": 1.0 } ] }
},
"plugins": {
"prometheus": { "enabled": true, "labels": ["customer_id", "provider", "model"] },
"otel": { "enabled": true, "endpoint": "env.OTEL_EXPORTER_OTLP_ENDPOINT" }
}
}| Поле | Зачем в SaaS-сценарии |
|---|---|
config_store.type: postgres | Customer/VK, созданные через API, переживают рестарт; синхронизируются между узлами |
enforce_auth_on_inference | Запретить inference без VK; защищает мульти-tenant инсталляцию |
plugins.prometheus.labels включает customer_id | Метрики и расход разделены по клиентам |
Календарный сброс vs скользящее окно. Для подписочной модели обязательно используйте calendar_aligned: true с reset_duration в 1d, 1w, 1M или 1Y. Тогда сброс происходит в 00:00 UTC на границе календарного периода — это совпадает с тем, как клиент видит «месячный лимит». Скользящее окно проще, но создаёт расхождения «вы говорите июнь, а в Meridian период с 17 мая по 17 июня».
Варианты размещения
Multi-tenant SaaS-инсталляция
Одна инсталляция Meridian обслуживает всех клиентов. Каждый клиент — отдельный Customer; изоляция через VK и бюджеты.
Когда подходит:
- Большинство клиентов на стандартных тарифах (Free/Pro).
- Нет требований по юрисдикции данных, отличных от вашей.
- Объём — десятки до тысяч клиентов.
Что нужно учесть:
- Используйте кластерную (Enterprise) сборку для надёжности: Raft-бэкенд для бюджетов гарантирует консистентность списаний при отказе узла.
- Включите Prometheus с меткой
customer_idдля пер-клиентской наблюдаемости.
Отдельная инсталляция (on-premise или облако клиента)
Отдельная инсталляция Meridian в инфраструктуре крупного клиента. Только один Customer в этой инсталляции — сам клиент.
Когда подходит:
- Регулируемые данные (банки, медицина, госсектор).
- Клиент использует собственный OpenAI-аккаунт или собственные модели (on-prem vLLM, Yandex GPT в РФ, Azure OpenAI в Европе).
- Объём оправдывает отдельный SLA.
Что нужно учесть:
- Развёртывайте из Docker-образа или Helm-чарта; см. Кластеризация и руководства по deployment.
- Координацию между вашим SaaS-control-plane и инсталляцией на стороне клиента реализуйте через тот же Management API: ваш control plane знает endpoint этой инсталляции и при необходимости делает CRUD-вызовы.
- Согласуйте с клиентом, кто отвечает за апгрейды и мониторинг инсталляции.
Гибрид
Общая инсталляция для основной массы + выделенные инсталляции для enterprise-клиентов. Ваш SaaS-control-plane маршрутизирует запросы клиента на нужную инсталляцию по его customer_id.
Связанные материалы
- Виртуальные ключи — основная сущность; Customer + VK = тарифный план + ключ клиента.
- Бюджеты и лимиты — включая calendar-aligned бюджеты.
- Защита от опустошения бюджета и отказа в обслуживании — обязательно к прочтению для multi-tenant инсталляции.
- Отладка и аудит LLM-приложений — пер-клиентские метрики и логи через метку
customer_id. - Кластеризация — production-надёжность multi-tenant инсталляции.
- Справочники API — полная спецификация Management API.
Самообслуживание команд и контроль затрат
Платформенная команда раздаёт доступ к LLM-провайдерам через единый портал. Команды сами выпускают виртуальные ключи в рамках своих лимитов; финансисты и менеджмент видят расход по подразделениям в реальном времени.
Внедрение AI-first подхода в компании
Единая точка входа для LLM, общий набор провайдеров, единая инфраструктура, телеметрия и управление. Команды создают на AI-функции за дни и спринты, а не полугодовые цели и миграцией.