Как вызывать модели через OpenAI-совместимый API
2026-11-11
Кратко
Чтобы вызвать модель через OpenAI-совместимый API, настройте ключ API провайдера, базовый URL и точный идентификатор модели, затем отправьте запрос к Chat Completions. Руководство содержит примеры на Python и с cURL, объясняет потоковый вывод и диагностику ошибок, а также описывает отдельные эндпоинты для генерации изображений, видео и синтеза речи.
Чтобы вызывать модели через OpenAI-совместимый API, передайте клиенту OpenAI ключ API и базовый URL провайдера, затем отправьте запрос к Chat Completions с точным идентификатором модели. Тот же запрос можно отправить напрямую через cURL. Для этого нужны аутентификация Bearer, список сообщений в формате JSON и идентификатор модели.
Начните с одного короткого текстового запроса. Получив ответ, добавьте потоковый вывод или параметры своего приложения. Так проще выявить ошибки настройки, чем сразу использовать инструменты, изображения и длинную историю диалога.
1. Правильно задайте три параметра подключения
OpenAI-совместимый API предоставляет привычные структуры запросов и ответов через собственный сервис провайдера. Использование SDK OpenAI не обязывает отправлять запрос в OpenAI: адрес назначения определяет настроенный базовый URL. В AIAdapter можно использовать один клиент и ключ своего аккаунта для разных поддерживаемых моделей чата, отделив настройки подключения от выбора модели.
В документации API AIAdapter указаны следующие параметры:
| Параметр | Что указать |
|---|---|
| Ключ API | Ключ вашего аккаунта AIAdapter |
| Базовый URL | https://api.aiadapter.com/v1 |
| ID модели | Полный идентификатор из каталога, включая префикс провайдера |
SDK добавляет /chat/completions к базовому URL. Сохраните /v1 и не указывайте полный адрес эндпоинта в base_url.
Выберите модель чата в каталоге моделей. Примеры ниже используют представленную в каталоге модель Qwen3.5-Plus с идентификатором aliyun-bailian/qwen3.5-plus. Скопируйте его точно, а не вводите название семейства вроде Qwen.
Создайте ключ в Console → API Keys. Храните его на сервере в переменной окружения или менеджере секретов, а не во фронтенд-коде JavaScript. Ключ AIAdapter используется для аутентификации в AIAdapter; ключ аккаунта OpenAI его не заменяет.
2. Подготовьте Python и переменные окружения
Для текущего SDK OpenAI для Python требуется Python 3.10 или новее. Установите SDK с помощью интерпретатора, который будет запускать скрипт:
python -m pip install --upgrade openaiЗадайте следующие переменные в терминале, заменив пример ключа ключом своего аккаунта.
macOS, Linux или Bash:
export AIADAPTER_API_KEY="your-aiadapter-api-key"
export AIADAPTER_MODEL_ID="aliyun-bailian/qwen3.5-plus"Windows PowerShell:
$env:AIADAPTER_API_KEY = "your-aiadapter-api-key"
$env:AIADAPTER_MODEL_ID = "aliyun-bailian/qwen3.5-plus"Эти настройки действуют в текущем сеансе терминала. Запускайте Python из того же терминала, чтобы он получил переменные. В развёрнутом приложении задайте их через настройки секретов вашей платформы размещения. Не вводите ключи на общих компьютерах, где они могут сохраниться в истории команд.
3. Отправьте первый запрос к модели
Сохраните этот пример как call_model.py:
import os
from openai import OpenAI
with OpenAI(
api_key=os.environ["AIADAPTER_API_KEY"],
base_url="https://api.aiadapter.com/v1",
timeout=60.0,
max_retries=0,
) as client:
completion = client.chat.completions.create(
model=os.environ["AIADAPTER_MODEL_ID"],
messages=[
{"role": "user", "content": "Explain an API in two sentences."}
],
)
print(completion.choices[0].message.content)Запустите его командой python call_model.py.
SDK формирует заголовок аутентификации и сериализует запрос. messages передаёт диалог, а model выбирает модель. В обычном ответе с текстом результат находится в choices[0].message.content, откуда скрипт выводит его на экран.
Первый запрос не содержит необязательных параметров сэмплирования, режима рассуждений и ограничения длины ответа. Добавляйте их в соответствии с документацией выбранной модели после того, как базовый вызов заработает. В зависимости от модели используются max_tokens, max_completion_tokens или иные параметры.
max_retries=0 отключает повторные попытки SDK на время диагностики первого вызова. timeout=60.0 задаёт тайм-аут в 60 секунд для сетевых операций, а не предельное время выполнения всего скрипта. Для рабочего приложения выберите подходящие тайм-ауты и политику с ограниченным числом повторных попыток.
4. Отправьте аналогичный запрос через cURL
Эта команда Bash позволяет проверить HTTP-запрос без SDK для Python:
curl https://api.aiadapter.com/v1/chat/completions \
-H "Authorization: Bearer $AIADAPTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "aliyun-bailian/qwen3.5-plus",
"messages": [
{"role": "user", "content": "Explain an API in two sentences."}
]
}'Здесь нужен полный адрес эндпоинта, поскольку cURL не добавляет маршруты SDK. Параметр -d отправляет POST-запрос. Изучите возвращённый JSON, включая сообщение об ошибке, если запрос не выполнен.
Если cURL работает, а Python нет, сравните переменные окружения, установленный SDK и фактическую конфигурацию клиента. Если не работают оба варианта, проверьте ключ, эндпоинт, ID модели и баланс аккаунта, прежде чем менять промпт.
5. Выводите ответ по мере генерации
Для модели чата с поддержкой потоковой передачи задайте stream=True и читайте текст из delta.content каждого фрагмента. Сохраните пример в отдельный скрипт и используйте те же переменные окружения:
import os
from openai import OpenAI
with OpenAI(
api_key=os.environ["AIADAPTER_API_KEY"],
base_url="https://api.aiadapter.com/v1",
timeout=60.0,
max_retries=0,
) as client:
with client.chat.completions.create(
model=os.environ["AIADAPTER_MODEL_ID"],
messages=[{"role": "user", "content": "Explain an API in two sentences."}],
stream=True,
) as stream:
for chunk in stream:
if chunk.choices:
text = chunk.choices[0].delta.content
if text:
print(text, end="", flush=True)
print()Согласно документации AIAdapter, потоковые ответы чата передаются через Server-Sent Events. Проверки в коде пропускают фрагменты без нового текста, в том числе служебные фрагменты и фрагменты только с данными о расходе токенов. Потоковая передача выдаёт результат постепенно, но не меняет требований модели к входным данным.
6. Разберите ошибки до добавления новых функций
Проверяйте статус HTTP вместе с возвращённым сообщением об ошибке:
| Симптом | Первое действие |
|---|---|
Ошибка аутентификации 401 | Убедитесь, что ключ относится к этому провайдеру и передаётся процессу или в заголовке Bearer. |
404 или модель не найдена | Проверьте путь /v1, эндпоинт и точный ID модели с префиксом провайдера. |
Ошибка запроса 400 или 422 | Оставьте в запросе только model и messages, затем проверьте каждый необязательный параметр. |
Ограничение частоты запросов 429 | Уменьшите число одновременных запросов и делайте паузы между повторными отправками (backoff), ограничив число попыток. |
| Недостаточно средств или квоты | Проверьте консоль и решите проблему оплаты или квоты до повторной отправки. |
| Ошибка подключения или тайм-аут | Проверьте DNS, доступ к сети и тайм-ауты клиента; перед повторной отправкой выясните состояние обработки на сервере. |
В Python перехватывайте openai.APIStatusError, чтобы изучить status_code и response. Для ошибок подключения перехватывайте openai.APIConnectionError. Ошибка, полученная внутри потока, также может вызвать openai.APIError, поэтому обрабатывайте исключения не только при создании запроса, но и во время перебора фрагментов ответа. Не включайте ключи и конфиденциальные промпты в диагностические журналы.
Частые вопросы
Означает ли совместимость с OpenAI, что работают все его эндпоинты?
Нет. Совместимость распространяется только на эндпоинты, реализованные провайдером. В этом руководстве используется Chat Completions, поскольку он описан в документации AIAdapter. SDK может предоставлять методы для Responses, загрузки файлов, ассистентов и других ресурсов, но их наличие в библиотеке не означает, что провайдер их поддерживает. Выбирайте метод SDK, соответствующий операции в документации сервиса. Прежде чем добавлять расширенные функции чата в рабочий запрос, проверьте, какие поля для вызова инструментов, режима рассуждений и структурированного вывода принимает выбранная модель.
Можно ли переключить модель без изменения этого клиента Python?
Если другая модель использует тот же эндпоинт Chat Completions и способ аутентификации, можно оставить клиент и указать точный ID новой модели. Скрипт читает его из AIADAPTER_MODEL_ID, поэтому для смены модели чата достаточно изменить конфигурацию. Затем проверьте поддерживаемые параметры, ограничения контекста и обработку ответа. Сначала проверьте новую модель на том же коротком сообщении, а потом верните инструменты приложения, ограничения формата и более длинную историю диалога.
Может ли этот пример чата генерировать изображения или видео?
Выбирайте операцию под нужный тип результата. В документации AIAdapter указаны /v1/images/generations для генерации изображений, /v1/video/generations для задач генерации видео и /v1/audio/speech для синтеза речи. Для видео сначала отправьте задачу, затем периодически проверяйте её статус через /v1/video/generations/{id}. Визуально-языковая модель, понимающая изображения, отличается от модели, генерирующей их. Для каждой операции используйте поля запроса и обработку ответа, предусмотренные для соответствующей модели, а не подставляйте ID видеомодели в пример чата.
Как повторные попытки влияют на вызов с ошибкой или тайм-аутом?
SDK OpenAI для Python по умолчанию делает две повторные попытки при определённых ошибках подключения и HTTP. В начальном тесте это поведение отключено для упрощения диагностики. Тайм-аут не доказывает, что сервер ничего не выполнил, поэтому повторная отправка запроса на генерацию может привести к повторной обработке. Ограничьте число попыток, проверьте статус запроса или задачи, если он доступен, и учитывайте дополнительные отправки. Если поток оборвался после получения части текста, явно обработайте частичный результат.
Как проверить стоимость первого запроса?
Перед вызовом проверьте актуальную цену и единицу тарификации в каталоге моделей и тарифов и на странице выбранной модели. Для моделей чата с оплатой за токены учитывается расход как входных, так и выходных токенов; необязательные параметры и длинные ответы могут менять потребление. Если в ответе доступны данные о расходе, сравните их с детализацией списаний в консоли. Для генерации изображений, видео и синтеза речи могут применяться другие единицы тарификации, поэтому не рассчитывайте их стоимость по тарифу токенов чата.
Начните с короткого запроса, проверьте ответ, затем развивайте приложение на основе рабочей конфигурации. Если нужен ключ, создайте аккаунт и настройте первую серверную интеграцию.
Часто задаваемые вопросы
Как вызывать модели через OpenAI-совместимый API
Чтобы вызвать модель через OpenAI-совместимый API, настройте ключ API провайдера, базовый URL и точный идентификатор модели, затем отправьте запрос к Chat Completions. Руководство содержит примеры на Python и с cURL, объясняет потоковый вывод и диагностику ошибок, а также описывает отдельные эндпоинты для генерации изображений, видео и синтеза речи.