Один API-токен для GPT, Claude и Gemini: как подключить несколько моделей без хаоса в конфигурации
Разработчики, работающие с несколькими моделями одновременно, часто сталкиваются с одной и той же проблемой: у каждого провайдера — свой ключ, свой формат запроса и свой биллинг. Claude, GPT, Gemini, Grok, DeepSeek — если подключать их напрямую, приходится держать в проекте пять разных SDK и пять разных счетов для оплаты. Ace Data Cloud решает эту задачу иначе: один API-токен и единый шлюз https://api.acedata.cloud, через который доступны все основные модели, включая генерацию изображений, музыки, видео и речи.
В этой статье разберём, как устроена маршрутизация запросов между семействами моделей, покажем рабочие примеры на curl и Python, а также обсудим тему оплаты — включая расчёты в USDC.
Почему у каждого семейства моделей свой путь
Ace Data Cloud предоставляет отдельные OpenAI-совместимые точки входа для каждого семейства моделей upstream-провайдеров. Помимо них есть универсальный путь /v1/chat/completions, который умеет маршрутизировать модели Claude по умолчанию. Вот основные точки входа:
- Claude:
https://api.acedata.cloud/v1/chat/completions— моделиclaude-opus-4-8,claude-sonnet-4-6,claude-haiku-4-5-20251001 - GPT (OpenAI):
https://api.acedata.cloud/openai/chat/completions— моделиgpt-5.5,gpt-5.5-pro,gpt-4o,gpt-4o-image,o3 - Gemini:
https://api.acedata.cloud/gemini/chat/completions— моделиgemini-3.1-pro,gemini-3.0-pro,gemini-2.5-pro - Grok:
https://api.acedata.cloud/grok/chat/completions— моделиgrok-4,grok-3 - DeepSeek:
https://api.acedata.cloud/deepseek/chat/completions— моделиdeepseek-r1,deepseek-v3
Важно понимать: при отправке запроса нужно попасть именно в путь своего семейства. Если отправить gpt-5.5 на путь Claude, сервис вернёт ошибку — модель просто не будет найдена в этом маршруте. Зато токен один для всех семейств, и остаток квоты общий — его можно посмотреть в консоли приложений.
Пример на curl: обычный чат-запрос к GPT
Базовый запрос на генерацию текстового ответа выглядит так:
curl https://api.acedata.cloud/openai/chat/completions \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.5",
"messages": [
{"role": "user", "content": "Объясни разницу между потоковой и обычной генерацией ответа"}
]
}'
Для Claude меняем только путь и модель:
curl https://api.acedata.cloud/v1/chat/completions \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [
{"role": "user", "content": "Составь план миграции монолита на микросервисы"}
]
}'
Пример на Python: обёртка для нескольких моделей
Ниже — простой класс, который переключается между семействами моделей, меняя только базовый путь:
import requests
TOKEN = "your_api_token"
BASE = "https://api.acedata.cloud"
ROUTES = {
"claude": "/v1/chat/completions",
"openai": "/openai/chat/completions",
"gemini": "/gemini/chat/completions",
"grok": "/grok/chat/completions",
"deepseek": "/deepseek/chat/completions",
}
def chat(family, model, prompt):
url = BASE + ROUTES[family]
headers = {
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json",
}
payload = {
"model": model,
"messages": [{"role": "user", "content": prompt}],
}
resp = requests.post(url, headers=headers, json=payload, timeout=60)
resp.raise_for_status()
data = resp.json()
return data["choices"][0]["message"]["content"]
print(chat("openai", "gpt-5.5", "Сформулируй три идеи для A/B-теста"))
print(chat("claude", "claude-sonnet-4-6", "Сделай ревью этого фрагмента кода"))
Такой подход удобен, когда нужно сравнить ответы разных моделей на один и тот же промпт или реализовать fallback: если один провайдер вернул ошибку или таймаут, запрос автоматически уходит на следующую модель из списка.
Изображения через отдельный формат Images API
Модели генерации изображений вроде gpt-image-2 или nano-banana-pro работают по другому контракту — не через messages[], а через прямой промпт:
curl https://api.acedata.cloud/openai/images/generations \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "Виниловый постер путешествий, ар-деко стиль, надпись AMALFI",
"size": "1024x1024"
}'
Оплата в этих моделях фиксирована за одно изображение независимо от size, а параметр n > 1 не поддерживается — при необходимости нескольких вариантов отправляйте параллельные запросы.
Как устроена оплата: карта или USDC
Пополнение баланса выполняется через создание заказа в консоли — вы выбираете пакет или сумму пополнения, а списание за реальные вызовы API происходит с баланса по мере использования. Помимо стандартных способов оплаты, заказ можно оплатить в USDC по протоколу X402, с поддержкой сетей Solana и Base. Оплата в USDC даёт скидку 5% от суммы заказа и не требует привязки банковской карты для международных расчётов — это особенно удобно для разработчиков, которые уже работают с криптоплатежами и хотят избежать конвертации валют.
Раздел для пополнения через USDC находится в консоли Coin. После пополнения баланс общий для всех сервисов платформы — токен, модели и метод оплаты никак не связаны между собой.
Практические рекомендации
- Заводите отдельные переменные окружения для токена, но используйте один и тот же токен для всех семейств моделей — квота общая.
- Логируйте, к какому пути (
/openai/,/gemini/и т.д.) уходит каждый запрос — это упрощает отладку ошибок маршрутизации. - Для критичных сценариев реализуйте fallback между моделями: если основная модель недоступна, переключайтесь на резервную без изменения бизнес-логики.
- Проверяйте остаток баланса и историю расходов в разделе usage консоли, чтобы не столкнуться с внезапной остановкой запросов.
Итог
Единый шлюз для нескольких моделей снимает часть инфраструктурной нагрузки: не нужно поддерживать пять разных SDK и пять разных биллингов. Начать можно с главной страницы платформы, получить токен в консоли приложений, а полный список моделей и форматов запросов — в документации.
Comments
Post a Comment