Руководство
OpenAI-совместимый AI-шлюз: подключить модели к приложению одним ключом
Обновлено · 6 мин чтения
Чтобы подключить модели к приложению через OpenAI-совместимый шлюз DADA Cloud, в любом OpenAI SDK меняют две настройки: базовый адрес на https://ai.dada-tuda.ru/v1 и ключ на ключ проекта вида sk-dada-ai-.... Код вызова остаётся прежним, а в поле model пишут псевдоним модели, например gpt-4o, claude или fast.
Ниже порядок от создания ключа до первого вызова, выбор между своим ключом провайдера и ключом платформы, ограничение списка моделей и разбор типовой ошибки.
Шаг 1 - Создайте ключ проекта
Откройте раздел LLM-провайдеры в навигации проекта и выпустите ключ. Он выглядит как sk-dada-ai- и 48 шестнадцатеричных символов, показывается один раз и после закрытия диалога его уже не показать, поэтому копируйте его сразу в хранилище секретов приложения. У ключа два права: ai:chat и ai:embeddings.
То же делает REST API: POST /api/v1/projects/{id}/ai/keys с ролью, которая позволяет запись в проект. В списке MCP-инструментов этих маршрутов нет, управлять ключами через MCP-клиент нельзя. Разным сервисам выдавайте разные ключи: отозвать один ключ можно, не трогая остальные.
Шаг 2 - Выберите, чьим ключом платить за модели
Режим маршрутизации задаётся на уровне проекта, по умолчанию стоит byok.
| Режим | Чей ключ у провайдера | Кто выставляет счёт за токены | Что нужно от вас |
|---|---|---|---|
byok (по умолчанию) | Ваш собственный | Провайдер, напрямую | Аккаунт у провайдера и способ оплаты у него |
platform | Ключ платформы | DADA Cloud, в общем счёте проекта | Переключить проект в этот режим |
Для режима с собственными ключами поддержано 11 провайдеров: OpenAI, Anthropic, OpenRouter, Groq, SambaNova, SotaModel, Z.ai, Typesafe, Keyvix, DecisionNode и Cloudflare. Если у ключа есть свой ключ провайдера, запросы идут только через него и не переключаются на пул платформы. Это важно для расходов: запрос не уйдёт на чужой ключ, если ваш упёрся в лимит.
В режиме platform за маршрутизацию платите нам по фактически израсходованным токенам, наценка к цене провайдера действует. Её размер смотрите в разделе биллинга и лимитов: в этом руководстве число не приводим. Переключение режима попадает в журнал аудита проекта вместе с тем, кто его выполнил.
Шаг 3 - Направьте SDK на шлюз
В Python это выглядит так:
from openai import OpenAI
client = OpenAI(
base_url="https://ai.dada-tuda.ru/v1",
api_key=os.environ["DADA_AI_KEY"],
)
reply = client.chat.completions.create(
model="fast",
messages=[{"role": "user", "content": "Привет"}],
)
В Node.js те же два параметра: baseURL и apiKey. Для проверки из терминала подойдёт curl на https://ai.dada-tuda.ru/v1/chat/completions с заголовком Authorization: Bearer <ключ>. Готовый сниппет с вашим адресом и псевдонимом модели есть на странице LLM-провайдеров проекта, его можно запускать как есть.
Что отдаёт шлюз: чат, completions, embeddings, responses, изображения и аудио. Список доступных ключу моделей возвращает GET /v1/models.
Шаг 4 - Выберите псевдоним модели
Поле model принимает псевдоним платформы, у провайдера идентификатор модели может выглядеть иначе. В каталоге есть:
- OpenAI:
gpt-4o,gpt-4o-mini, а для эмбеддинговtext-embedding-3-small; - Anthropic:
claude,claude-haiku; - уровни платформы:
fast,medium,smart,vision; glm-5.3,glm-5.3-flash,groq-gpt-oss,groq-llama.
Уровни fast, medium и smart удобны, когда приложению важна скорость или качество, а конкретная модель не принципиальна: смена модели за псевдонимом не требует правок в коде. Полный перечень зависит от проекта и подключённых провайдеров, его показывает GET /v1/models.
Шаг 5 - Ограничьте ключ нужными моделями
Ключ, который покидает ваши серверы, например вшит в десктопное приложение или отдан на бесплатном тарифе, можно извлечь. Тот, кто его получил, вызовет любую модель проекта. Поэтому такому ключу задают список разрешённых моделей: при создании нажмите Ограничить модели и отметьте нужные псевдонимы, у готового ключа откройте Модели в его строке. Изменение подхватывается в течение минуты.
Через API то же делает PATCH /api/v1/projects/{projectId}/ai/keys/{keyId} с полем allowed_models. В списке не больше 100 моделей. Значение null снова разрешает все, пустой список шлюз отклоняет: ключ, которому нельзя ничего, равен отозванному, и его проще отозвать.
Запрос к модели вне списка шлюз отклоняет до обращения к провайдеру. Ответ приходит с кодом 403 и типом model_not_allowed. OpenAI SDK поднимает его как PermissionDeniedError, у которого e.type == "model_not_allowed". Ограниченный ключ видит в GET /v1/models только свои модели.
Шаг 6 - Следите за расходом
На странице LLM-провайдеров есть блок расхода за 7 или 30 дней: вызовы, токены, стоимость трафика и, в режиме platform, сумма к оплате за маршрутизацию. Таблица по моделям делит то же окно по моделям, так что у неожиданного счёта находится конкретная строка.
Когда шлюз вам не подходит
Шлюз маршрутизирует запросы к моделям вендоров. Собственные веса он не обслуживает, для них нужен GPU у другого провайдера: DADA Cloud модели на GPU не размещает. Если нужна модель, которой нет в каталоге псевдонимов, проверьте GET /v1/models для вашего ключа, а при отсутствии подключите провайдера со своим ключом, если он среди одиннадцати поддерживаемых.
Расчёт на гарантированную доступность каждой модели тоже не стоит строить: шлюз передаёт запрос провайдеру, и его лимиты и сбои остаются в силе. Для критичных вызовов в коде приложения заведите обработку ошибок и повтор.
О том, как собрать вокруг шлюза приложение целиком, читайте в руководстве о платформах для AI-приложений и в разборе агентов на DADA Cloud. Параметры режимов и ключей описаны в разделе LLM-провайдеры документации.
Частые вопросы
Нужно ли менять код, если приложение уже работает с OpenAI?
Нет, если оно использует OpenAI SDK или любую библиотеку с настройкой базового адреса. Меняют адрес на https://ai.dada-tuda.ru/v1, ключ на ключ проекта и значение model на псевдоним из каталога. Остальной код вызова сохраняется.
Чем платить за токены?
Зависит от режима проекта. В режиме byok счёт выставляет провайдер, у которого вы завели ключ, и шлюз за это не берёт. В режиме platform токены оплачиваются в общем счёте проекта с наценкой к цене провайдера, оплата российской картой.
Что делать с ошибкой 403 model_not_allowed?
Ключ ограничен списком моделей, а в запросе указана другая. В тексте ошибки перечислено, что разрешено. Либо поменяйте model на разрешённый псевдоним, либо добавьте модель в список ключа на странице LLM-провайдеров или через PATCH.
Можно ли использовать один ключ в нескольких сервисах?
Технически да, но разумнее выпустить по ключу на сервис. Тогда компрометацию одного сервиса закрывает отзыв одного ключа, а расход проще разделять по источникам.
Как узнать, какие модели доступны моему ключу?
Вызовите GET /v1/models с этим ключом. Для ограниченного ключа ответ содержит только разрешённые ему модели.
Хранит ли платформа мои ключи провайдеров?
Собственные ключи провайдеров хранятся зашифрованными, а после сохранения в браузер не возвращаются. Ключи проекта sk-dada-ai- показываются один раз при создании.