Сценарии использования

Самообслуживание команд и контроль затрат

Платформенная команда раздаёт доступ к LLM-провайдерам через единый портал. Команды сами выпускают виртуальные ключи в рамках своих лимитов; финансисты и менеджмент видят расход по подразделениям в реальном времени.

Проблема

В компании с продуктовых команд платформа становится узким местом: каждый сервис требует ручной выдачи ключа, согласования бюджета и настройки лимитов, а финансы получают единый счёт от OpenAI или Anthropic без разбивки по подразделениям. Согласование занимает дни; ключи могут выдаваться без ограничений; в конце месяца расход разбирают вручную по логам приложений.

Кого это касается: платформенные команды, финансовый и управляющий менеджмент, лиды продуктовых команд.

Решение

Meridian даёт трёхуровневую иерархию управления бюджетамиCustomer (бизнес-юнит) → Team (продуктовая команда) → Virtual Key (приложение или окружение) — с независимым бюджетом и rate limits на каждом уровне. Веб-интерфейс работает как портал самообслуживания: администратор настраивает верхний уровень, а лидеры команд сами выпускают виртуальные ключи в рамках выделенных квот.

  • Время выдачи доступа: часы/дни → минуты. Лид команды выпускает VK через UI без участия платформы или поддержки.
  • Прозрачность расхода. Финансисты видят расход в реальном времени по иерархии Customer → Team → VK → провайдер → модель.
  • Жёсткие гарантии бюджета. Лимиты применяются совокупно: VK не превышает квоту Team, Team — квоту Customer.
  • Изоляция инцидентов. Утечка одного VK блокируется одной операцией; остальные ключи не затрагиваются.
  • Корпоративный вход. OIDC через систему одного входа; действия журналируются в audit log (Enterprise).
  • Интеграция с внутренним порталом. Через API можно Meridian можно интегрировать с уже имеющимся порталом самообслуживания внутри Вашей инфраструктуры

Создаёт

в рамках квоты

в рамках квоты

в рамках квоты

Администратор платформы

Customer
Бизнес-юнит

Team A
Продукт 1

Team B
Продукт 2

Лид Team A

Virtual Key
prod

Virtual Key
staging

Лид Team B

Virtual Key
prod

Сервис продукта 1

Staging-окружение

Сервис продукта 2

Сценарий

Компания с двумя командами alpha и beta внутри бизнес-юнита Продажи:

  1. Администратор создаёт Customer Продажи ($10 000/мес), внутри — Teams alpha ($4 000/мес) и beta ($3 000/мес).
  2. Через ролевые доступы лиду команды alpha выдаются права на VK своей Team; ресурсы beta ему не видны.
  3. Лид alpha через корпоративный SSO выпускает три VK: alpha-prod ($2 000/мес, 100 req/min), alpha-staging ($500/мес), alpha-experiments ($300/мес).
  4. Разработчики получают VK с префиксом sk-bf-* — upstream-ключ провайдера в код не попадает.
  5. При утечке VK или закрытии сервиса лид переводит ключ в is_active: false — доступ блокируется мгновенно, остальные ключи продолжают работать.

Конфигурация

Шаг 1. Создание Customer.

  1. Перейдите в раздел Customers.
  2. Нажмите Add Customer, заполните имя (Sales), привяжите бюджет (Max Limit: 10000, Reset Duration: 1 месяц).
  3. Нажмите Create.
Создание клиента (Customer)

Шаг 2. Создание Team.

  1. Перейдите в раздел Teams.
  2. Нажмите Add Team, заполните имя (alpha), укажите Customer (Sales), привяжите бюджет (Max Limit: 4000, Reset Duration: 1 месяц).
  3. Повторите для beta.
Создание команды (Team)

Шаг 3. Настройка делегированного доступа (Enterprise — RBAC).

  1. Перейдите в RBAC → Roles.
  2. Создайте роль team-lead-alpha с правами на CRUD виртуальных ключей в пределах Team alpha.
  3. Назначьте роль соответствующему пользователю SSO.

RBAC и SSO доступны в Enterprise-редакции. В OSS-редакции UI Meridian доступен администратору без разделения ролей.

Шаг 4. Выпуск Virtual Key лидом команды.

  1. Лид команды заходит в Virtual Keys, видит только свою Team.
  2. Нажимает Add Virtual Key, заполняет имя (alpha-prod), задаёт собственный бюджет и rate limit в рамках квоты команды.
  3. Выбирает разрешённые модели и провайдеров через Provider Configs.
Форма создания виртуального ключа

Создание Customer:

curl -X POST http://localhost:8080/api/governance/customers \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Sales",
    "budget": {
      "max_limit": 10000.00,
      "reset_duration": "1M"
    }
  }'

Создание Team (привязана к Customer):

curl -X POST http://localhost:8080/api/governance/teams \
  -H "Content-Type: application/json" \
  -d '{
    "name": "alpha",
    "customer_id": "customer-Sales",
    "budget": {
      "max_limit": 4000.00,
      "reset_duration": "1M"
    }
  }'

Выпуск Virtual Key в рамках Team:

curl -X POST http://localhost:8080/api/governance/virtual-keys \
  -H "Content-Type: application/json" \
  -d '{
    "name": "alpha-prod",
    "description": "Production API key for alpha service",
    "team_id": "team-alpha",
    "provider_configs": [
      {
        "provider": "openai",
        "weight": 1.0,
        "allowed_models": ["gpt-4o-mini", "gpt-4o"]
      }
    ],
    "budget": {
      "max_limit": 2000.00,
      "reset_duration": "1M"
    },
    "rate_limit": {
      "request_max_limit": 100,
      "request_reset_duration": "1m"
    },
    "is_active": true
  }'

Получение расхода по команде:

curl http://localhost:8080/api/governance/teams/team-alpha

Минимальный пример иерархии Customer Sales → Team alpha + Team beta → Virtual Keys:

{
  "client": {
    "enforce_auth_on_inference": true
  },
  "governance": {
    "customers": [
      {
        "id": "customer-Sales",
        "name": "Sales",
        "budget_id": "budget-Sales"
      }
    ],
    "teams": [
      {
        "id": "team-alpha",
        "name": "alpha",
        "customer_id": "customer-Sales",
        "budget_id": "budget-alpha"
      },
      {
        "id": "team-beta",
        "name": "beta",
        "customer_id": "customer-Sales",
        "budget_id": "budget-beta"
      }
    ],
    "virtual_keys": [
      {
        "id": "vk-alpha-prod",
        "name": "alpha-prod",
        "value": "sk-bf-alpha-prod",
        "is_active": true,
        "team_id": "team-alpha",
        "budget_id": "budget-vk-alpha-prod",
        "rate_limit_id": "rate-vk-alpha-prod",
        "provider_configs": [
          {
            "provider": "openai",
            "weight": 1.0,
            "allowed_models": ["gpt-4o-mini", "gpt-4o"]
          }
        ]
      }
    ],
    "budgets": [
      { "id": "budget-Sales",          "max_limit": 10000.0, "reset_duration": "1M" },
      { "id": "budget-alpha",        "max_limit": 4000.0,  "reset_duration": "1M" },
      { "id": "budget-beta",         "max_limit": 3000.0,  "reset_duration": "1M" },
      { "id": "budget-vk-alpha-prod","max_limit": 2000.0,  "reset_duration": "1M" }
    ],
    "rate_limits": [
      {
        "id": "rate-vk-alpha-prod",
        "request_max_limit": 100,
        "request_reset_duration": "1m"
      }
    ]
  }
}
ПолеТипОбязательноеОписание
customers[].idstringДаУникальный идентификатор бизнес-юнита
teams[].customer_idstringНетПривязка команды к клиенту
virtual_keys[].team_idstringНетПривязка VK к команде (взаимоисключающа с customer_id)
virtual_keys[].customer_idstringНетПрямая привязка VK к клиенту
budgets[].max_limitnumberДаПотолок расхода в долларах
budgets[].reset_durationstringДаПериод сброса: 1m, 1h, 1d, 1w, 1M, 1Y

Связанные материалы

Содержание