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

Защита от vendor lock

OpenAI-совместимый API Meridian отделяет приложение от конкретного LLM-провайдера. Смена вендора, юрисдикции или модели — редактирование конфигурации виртуального ключа (VK), а не релиз приложения.

Проблема

Прямая интеграция с OpenAI или Anthropic на уровне SDK создаёт жёсткую зависимость на четырёх уровнях:

  • Код приложения — импортированный SDK конкретного провайдера, его типы, поведение, ошибки.
  • Биллинг — единый счёт от вендора, контракт с условиями его юрисдикции.
  • SLA — uptime и поддержка целиком зависят от одного вендора.
  • Юрисдикция и compliance — данные пользователей обрабатываются там, где разрешает вендор.

Запрос юристов «уйти на провайдера в нужной юрисдикции» или решение CTO «попробовать дешевле» превращаются в крупную разработку: переписать клиентский код, перезаключить контракты, перепрогнать security-ревизии, мигрировать промпты, перенастроить мониторинг.

Кого это касается: CTO, архитекторы, отвечающие за устойчивость технологического стека; security/compliance, отвечающие за юрисдикцию обработки данных; финансы, желающие иметь рычаг для торга с вендором.

Решение

  • Срок миграции между провайдерами: месяцы/недели → часы/дни. Изменение конфигурации, а не релиз кода.
  • A/B-тестирование провайдеров в продакшене без изменений в коде. Данные для решения — реальные метрики, не искусственные бенчмарки.
  • Защита от ценовых и SLA-изменений вендора. Когда провайдер увеличивает цену или меняет условия — у вас есть рычаг переключиться и вендор знает об этом.
  • Соответствие compliance-требованиям. Развёртывание провайдера в нужной юрисдикции (Azure OpenAI в Европе, Yandex GPT в РФ, on-prem) включается за дни.
  • Постепенная замена моделей. Новые модели можно вводить в продакшен на подмножестве трафика через weight без полной миграции.

Что предлагает Meridian

Meridian реализует OpenAI-совместимый API как абстракцию над провайдерами. Ваше приложение видит единый эндпоинт и единый формат запроса/ответа; в каком провайдере физически выполняется запрос — решает конфигурация на стороне шлюза.

единый OpenAI API

конфигурация VK

конфигурация VK

конфигурация VK

конфигурация VK

конфигурация VK

Приложение
openai SDK / langchain

Meridian

OpenAI

Anthropic

Azure OpenAI
в нужной юрисдикции

Yandex GPT

Локальный vLLM /
Ollama

Что это даёт:

  • Код приложения не зависит от провайдера. Сменить вендора — отредактировать настройки виртуального ключа в Meridian, без релиза.
  • Сосуществование нескольких провайдеров. A/B-тест проводится параллельно, не последовательной миграцией.
  • 20+ встроенных провайдеров (Поддерживаемые провайдеры) — OpenAI, Anthropic, Bedrock, Azure OpenAI, Vertex, Cohere, Mistral, Groq, Fireworks, OpenRouter и другие.
  • Custom-провайдеры (Custom providers) — собственный или нишевый провайдер с OpenAI-совместимым API добавляется конфигурацией.

Сценарий

Компания работает на OpenAI. Юристы предъявляют требование перенести обработку персональных данных в нужную юрисдикцию (Azure OpenAI в Европе, Yandex GPT, on-prem vLLM — в зависимости от страны).

Без Meridian:

  1. Аудит всех мест в коде, где используется openai SDK (десятки сервисов).
  2. Переписать каждое приложение под SDK нового вендора.
  3. Перезаключить контракты с финансами.
  4. Прогнать security-ревизию на новом стеке.
  5. Релиз каждого сервиса по очереди.

Срок: месяцы.

С Meridian:

  1. Платформенная команда добавляет нового провайдера в Meridian (например, Yandex GPT).
  2. На пилотном VK меняется provider_configs — теперь запросы уходят в Yandex GPT.
  3. Проводится A/B-сравнение в продакшене: часть VK команды переключена на новый провайдер, часть — на старый; результаты видны в логах и метриках.
  4. После валидации остальные VK переключаются партиями.
  5. Код приложений не трогается; релизов сервисов нет.

Срок: дни–недели.

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

Шаг 1. Подключение нового провайдера.

  1. Providers → Add New Provider, выберите тип (например, azure, vertex, bedrock, cohere).
  2. Введите upstream-ключ и обязательные параметры (для Azure: deployment, endpoint; для Vertex: project, region и т. п.).

Шаг 2. Перенаправление VK на новый провайдер.

  1. Откройте существующий VK.
  2. В Provider Configs замените или добавьте новый провайдер; задайте weight для постепенного перехода.
  3. Сохраните. Изменение применяется без перезапуска.

Шаг 3. A/B-тест через provider routing.

См. Provider routing — статические правила выбора провайдера по заголовкам, метаданным, паттернам.

Постепенный переход с OpenAI на Anthropic через изменение весов в VK:

# Начало: 100% на OpenAI
curl -X PUT http://localhost:8080/api/governance/virtual-keys/{vk_id} \
  -H "Content-Type: application/json" \
  -d '{
    "provider_configs": [
      { "provider": "openai",    "weight": 1.0, "allowed_models": ["gpt-4o-mini"] }
    ]
  }'

# A/B: 50/50
curl -X PUT http://localhost:8080/api/governance/virtual-keys/{vk_id} \
  -H "Content-Type: application/json" \
  -d '{
    "provider_configs": [
      { "provider": "openai",    "weight": 0.5, "allowed_models": ["gpt-4o-mini"] },
      { "provider": "anthropic", "weight": 0.5, "allowed_models": ["claude-3-5-sonnet-20241022"] }
    ]
  }'

# Финал: 100% на Anthropic
curl -X PUT http://localhost:8080/api/governance/virtual-keys/{vk_id} \
  -H "Content-Type: application/json" \
  -d '{
    "provider_configs": [
      { "provider": "anthropic", "weight": 1.0, "allowed_models": ["claude-3-5-sonnet-20241022"] }
    ]
  }'

Приложение остаётся неизменным:

# Код не меняется ни на одной итерации
client = OpenAI(base_url="https://meridian/v1", api_key="sk-bf-vk")
client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "..."}]
)
{
  "providers": {
    "openai": {
      "keys": [
        { "id": "openai-1", "value": "env.OPENAI_API_KEY", "models": ["*"], "weight": 1.0 }
      ]
    },
    "anthropic": {
      "keys": [
        { "id": "anthropic-1", "value": "env.ANTHROPIC_API_KEY", "models": ["*"], "weight": 1.0 }
      ]
    },
    "yandex-gpt": {
      "custom_provider_config": { "base_provider": "openai" },
      "network_config": { "base_url": "https://llm.api.cloud.yandex.net/v1" },
      "keys": [
        { "id": "yagpt-1", "value": "env.YANDEX_API_KEY", "models": ["*"], "weight": 1.0 }
      ]
    }
  },
  "governance": {
    "virtual_keys": [
      {
        "id": "vk-app-1",
        "name": "app-1",
        "value": "sk-bf-app-1",
        "is_active": true,
        "provider_configs": [
          { "provider": "openai",     "weight": 0.5 },
          { "provider": "yandex-gpt", "weight": 0.5 }
        ]
      }
    ]
  }
}
ПолеНазначение
provider_configs[].weightДоля трафика на этого провайдера в рамках VK
custom_provider_config.base_providerБазовый адаптер для OpenAI-совместимого провайдера
network_config.base_urlURL upstream-эндпоинта

Ограничения и нюансы

  • Не все возможности унифицированы. Function calling, vision, длина контекста, embeddings, audio — поддерживаются разными провайдерами по-разному. Полная замена возможна только между сопоставимыми моделями; см. Поддерживаемые провайдеры и Custom-провайдеры для контрольного списка по каждому.
  • Разница в поведении моделей. Один и тот же prompt даёт разные completions у Claude и GPT. Миграция требует валидации качества, а не только формального соответствия.

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

Содержание