OpenAI SDK и совместимые клиенты

Для чат-запросов настройте базовый URL https://api.apikley.ru/v1, ключ Apikley и externalId выбранной модели. Следующие примеры используют DeepSeek: DeepSeek V4 Flash.

Ключ в окружении

На сервере задайте переменную окружения. В примере для оболочки замените YOUR_API_KEY своим ключом. Не включайте его в браузерную сборку и репозиторий.

Окружение для Python и Node.js

export APIKLEY_API_KEY='YOUR_API_KEY'

cURL

curl https://api.apikley.ru/v1/chat/completions \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "deepseek/deepseek-v4-flash",
    "messages": [{"role": "user", "content": "Объясните, что такое API, в двух предложениях."}],
    "stream": false
  }'

Для Python установите пакет командой python -m pip install openai. Сохраните следующий пример в example.py и запустите python example.py.

Python

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["APIKLEY_API_KEY"],
    base_url="https://api.apikley.ru/v1",
    max_retries=0,
)
response = client.chat.completions.create(
    model="deepseek/deepseek-v4-flash",
    messages=[{"role": "user", "content": "Объясните, что такое API, в двух предложениях."}],
    stream=False,
)
choices = getattr(response, "choices", None)
if choices:
    print(choices[0].message.content)
else:
    print(response.model_dump_json())

Для Node.js установите пакет командой npm install openai. Сохраните следующий пример в example.mjs и запустите node example.mjs.

Node.js

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.APIKLEY_API_KEY,
  baseURL: "https://api.apikley.ru/v1",
  maxRetries: 0,
});
const response = await client.chat.completions.create({
  model: "deepseek/deepseek-v4-flash",
  messages: [{ role: "user", content: "Объясните, что такое API, в двух предложениях." }],
  stream: false,
});
console.log(response.choices?.[0]?.message?.content ?? response);

В cURL выше ключ указан прямо в заголовке для наглядности. Для переменной окружения замените этот заголовок на -H "Authorization: Bearer $APIKLEY_API_KEY".

Что проверить в совместимом клиенте

  • Укажите базовый URL с /v1, без добавления второго /v1.
  • Задайте модель вручную через externalId из каталога API.
  • Проверьте запрос и обработку ответа выбранной модели на небольшом примере.
  • Настройте повторы осознанно. В примерах SDK они отключены через max_retries=0 и maxRetries: 0.

GET /v1/models отсутствует и возвращает 404. Не используйте client.models.list() для каталога Apikley: вместо него есть публичный GET /models/summary.

Успешное подключение чата не подтверждает поддержку всех методов библиотеки. Доступные здесь контракты описаны в разделах Chat Completions и изображения.

Частые вопросы

Нужно ли менять только адрес и ключ?

Также укажите ID модели из каталога и проверьте её параметры и ответ. Единой структуры ответа для всех моделей нет.

Почему клиент не может загрузить список моделей?

Если он вызывает /v1/models, получит 404. Введите ID вручную или используйте интеграцию с каталогом Apikley.

Почему streaming приходит одним блоком?

Публичный шлюз буферизует SSE: события могут прийти вместе в конце генерации.

Можно ли автоматически повторять любой 5xx?

Не включайте такой повтор без оценки операции: тайм-аут или ошибка доставки не доказывает, что запрос не исполнился. См. ошибки.

Обновлено