Протоколы LLM API
Atlas Cloud понимает OpenAI Chat Completions, Completions, Responses, Images, Anthropic Messages и Google Gemini. Один ключ, один базовый URL, шесть форматов обмена.
Atlas Cloud принимает шесть разных форматов запросов на одном базовом URL с одним и тем же API-ключом. Направьте существующий SDK на Atlas Cloud — и он, как правило, заработает без изменений: без переписывания кода и без собственного слоя адаптации.
https://api.atlascloud.aiМатрица протоколов
| Протокол | Эндпоинт | Когда использовать |
|---|---|---|
| OpenAI Chat Completions | POST /v1/chat/completions | Выбор по умолчанию. Самый широкий охват моделей |
| OpenAI Completions | POST /v1/completions | Устаревшее текстовое дополнение. Поддерживают немногие модели |
| OpenAI Responses | POST /v1/responses | Вы уже используете Responses API |
| OpenAI Images | POST /v1/images/generations, /v1/images/edits | Синхронные вызовы генерации изображений через клиент OpenAI |
| Anthropic Messages | POST /v1/messages | Вы уже используете Anthropic SDK или Claude Code |
| Google Gemini | POST /v1beta/models/{model}:generateContent | Вы уже используете Google GenAI SDK |
Не каждая модель понимает каждый протокол. Каждая модель публикует список supported_apis — проверьте его перед сменой формата. Список упорядочен: первая запись рекомендована для этой модели. Например, модели семейства Gemini раскрывают всю свою мультимодальность только в нативном формате Gemini.
Аутентификация
Ваш API-ключ работает с любым из четырёх стилей заголовков, поэтому SDK, написанные для других провайдеров, аутентифицируются без доработок:
-H "Authorization: Bearer $ATLASCLOUD_API_KEY"Рекомендуется и работает со всеми протоколами.
API-ключи Atlas Cloud начинаются с apikey-. См. API-ключи.
OpenAI Chat Completions
Самый широко поддерживаемый формат.
curl https://api.atlascloud.ai/v1/chat/completions \
-H "Authorization: Bearer $ATLASCLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/deepseek-v3.2",
"messages": [{"role": "user", "content": "Explain HTTP vs HTTPS"}],
"max_tokens": 1024,
"stream": true
}'С OpenAI SDK нужно изменить две строки:
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ATLASCLOUD_API_KEY"],
base_url="https://api.atlascloud.ai/v1",
)
response = client.chat.completions.create(
model="deepseek-ai/deepseek-v3.2",
messages=[{"role": "user", "content": "Explain HTTP vs HTTPS"}],
)
print(response.choices[0].message.content)Параметры сэмплирования. Поддержка различается от модели к модели — каждая модель публикует собственный список supported_sampling_parameters. Обычно доступны: temperature (0–2), top_p (0–1), top_k, min_p, frequency_penalty (−2–2), presence_penalty (−2–2), repetition_penalty, stop, seed, logit_bias, logprobs, top_logprobs (0–20).
Структурированный вывод. Параметр response_format принимает как {"type": "json_object"}, так и определение json_schema — на моделях, объявляющих json_mode или structured_outputs.
Вызов инструментов. Поля tools, tool_choice и parallel_tool_calls передаются моделям, объявляющим tools.
Мультимодальный ввод. Изображения, видео и аудио можно прикреплять как части содержимого:
{
"role": "user",
"content": [
{ "type": "text", "text": "What is in this image?" },
{ "type": "image_url", "image_url": { "url": "https://example.com/photo.jpg" } },
{ "type": "video_url", "video_url": { "url": "https://example.com/clip.mp4" } },
{ "type": "input_audio", "input_audio": { "data": "<base64>", "format": "mp3" } }
]
}Поле video_url — это расширение Atlas Cloud за пределами спецификации OpenAI. Аудио должно передаваться встроенным Base64 — URL для input_audio не принимается.
Anthropic Messages
curl https://api.atlascloud.ai/v1/messages \
-H "x-api-key: $ATLASCLOUD_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/deepseek-v3.2",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello"}]
}'Чтобы направить Anthropic SDK на Atlas Cloud, задайте base_url равным https://api.atlascloud.ai.
Поддерживается. system (строка или массив блоков), stop_sequences, tools с input_schema, tool_choice, thinking, блоки изображений (источники base64 и url), блоки document и tool_result. Блоки thinking от ассистента отображаются в вывод рассуждений.
Отличия, о которых стоит знать:
| Поведение | Подробности |
|---|---|
stop_sequences | Обрезается до первых 4 записей |
tool_choice: "any" | Преобразуется в required |
cache_control | Игнорируется, если целевая модель обслуживается через транслированный протокол, поэтому кэширование промптов не сработает |
| Встроенные серверные инструменты | Веб-поиск, работа с компьютером и другие инструменты, размещённые у Anthropic, недоступны |
POST /v1/messages/count_tokens | Не реализован |
| Мультимодальность | Только изображения. Видео- и аудиочасти в этом протоколе не принимаются |
Стриминг следует последовательности событий Anthropic: message_start, content_block_start, content_block_delta, content_block_stop, message_delta, message_stop. Маркера [DONE] нет.
OpenAI Responses
curl https://api.atlascloud.ai/v1/responses \
-H "Authorization: Bearer $ATLASCLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/deepseek-v3.2",
"input": [{"role": "user", "content": [{"type": "input_text", "text": "Hello"}]}],
"max_output_tokens": 1024
}'Поддерживается. instructions, input во всех его формах, tools, tool_choice, reasoning.effort, text.format (и json_object, и json_schema), text.verbosity, temperature, top_p, stream, parallel_tool_calls.
Молча игнорируется — принимается без ошибки, но не даёт эффекта: previous_response_id, store, include, background, conversation, prompt, truncation, max_tool_calls, top_logprobs и reasoning.summary. Поле metadata возвращается в ответе, но не передаётся дальше.
Поскольку previous_response_id и store не действуют, состояние диалога на стороне сервера недоступно. Отправляйте полный диалог с каждым запросом.
Мультимодальность. Изображения и аудио. Видео в этом протоколе нет. Изображения передаются как {"type": "input_image", "image_url": "<url string>"} — обратите внимание, что значение здесь обычная строка, а не объект.
Стриминг выдаёт стандартный набор событий Responses и завершается событием response.completed, response.incomplete или response.failed. Маркера [DONE] нет.
Google Gemini
# Non-streaming
curl "https://api.atlascloud.ai/v1beta/models/MODEL_ID:generateContent" \
-H "x-goog-api-key: $ATLASCLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"role": "user", "parts": [{"text": "Hello"}]}],
"generationConfig": {"maxOutputTokens": 1024, "temperature": 0.7}
}'
# Streaming — the alt=sse parameter is required
curl "https://api.atlascloud.ai/v1beta/models/MODEL_ID:streamGenerateContent?alt=sse" \
-H "x-goog-api-key: $ATLASCLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"contents": [{"role": "user", "parts": [{"text": "Hello"}]}]}'Параметр ?alt=sse обязателен для стриминга. Без него запрос вернёт 404.
Поддерживается. contents[] с ролями user и model, systemInstruction, generationConfig и tools.
Мультимодальность. Изображения, видео и аудио — встроенно через inline_data или по ссылке через file_data.file_uri.
Этот протокол обслуживают только модели, которые понимают его нативно. Модели, в идентификаторе которых есть nano, banana или omni, здесь отклоняются: для них используйте Chat Completions или эндпоинты генерации медиа.
OpenAI Images
Синхронная генерация изображений для клиентов, совместимых с OpenAI:
curl https://api.atlascloud.ai/v1/images/generations \
-H "Authorization: Bearer $ATLASCLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "MODEL_ID", "prompt": "a cat", "n": 1, "size": "1024x1024"}'Эндпоинт /v1/images/edits принимает multipart/form-data. Этот протокол объявляет лишь небольшое число моделей.
Это другой путь, отличный от основного конвейера изображений. Большинство моделей изображений — и все модели видео, аудио и 3D — используют асинхронные эндпоинты, описанные в разделе Предсказания. Перед выбором проверьте supported_apis модели.
Поведение шлюза
Шлюз нормализует несколько вещей по пути. Этого нет в исходных спецификациях, и это может удивить вас при отладке ответа:
| Поведение | Относится к | Подробности |
|---|---|---|
| Принудительная статистика использования | Потоковые запросы | stream_options.include_usage выставляется в true, поэтому финальный чанк с usage приходит всегда |
| Системный промпт по умолчанию | Chat Completions, Messages, Responses | Если системный промпт не передан, подставляется "You are a helpful assistant." |
Переписывание max_completion_tokens | Chat Completions | Преобразуется в max_tokens |
| Нормализация флагов рассуждений | Chat Completions | enable_thinking, thinking.type и reasoning_effort: "none" приводятся к единому виду |
| Keep-alive-комментарии | Стриминг | В простое потоки отправляют SSE-строки-комментарии, начинающиеся с :. Клиенты обязаны их игнорировать |
| Лимит тела запроса | Все эндпоинты | 50 МБ. Более крупные полезные нагрузки возвращают 413 — используйте URL или загрузите файл |
Что недоступно
Этих эндпоинтов на Atlas Cloud не существует. Запросы к ним не сработают вне зависимости от модели:
/v1/embeddings/v1/rerank/v1/audio/speechи/v1/audio/transcriptions— аудио идёт через аудио-эндпоинт/v1/messages/count_tokens
Провайдеры вроде Ollama, Cohere и Bedrock не представлены как нативные протоколы. Модели многих вендоров доступны, но всегда через один из шести форматов выше.
Лимиты запросов и ошибки
Лимиты действуют на уровне аккаунта и на уровне модели. При превышении API возвращает 429.
Эндпоинты LLM не возвращают заголовки X-RateLimit-*, а ответы 429 на этих эндпоинтах не содержат Retry-After. Реализуйте экспоненциальное отступление на стороне клиента, а не полагайтесь на заголовки ответа.
Каждый ответ содержит заголовок X-Request-ID. Указывайте его при обращении в поддержку.
Связанные материалы
Last updated on