> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rockapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Миграция на API, совместимый с OpenAI: Python, Node.js и проверка

> Настройте Python, Node.js и curl, затем проверьте доступ к моделям, потоковые ответы, инструменты, ошибки и окончательные списания до миграции.

**API, совместимый с OpenAI**, поддерживает документированные форматы запросов и ответов OpenAI. Для поддерживаемых операций это позволяет повторно использовать клиент. Но замена базового URL — лишь начало: отдельно проверяются ID моделей, параметры, инструменты, потоковые события и обработка ошибок.

## Подготовка учетной записи и параметров

Выберите модель чата в [актуальном каталоге](https://rockapi.ai/pricing), скопируйте точный ID и проверьте права учетной записи и группы. Создайте ключ Rock API на странице [ключей API](https://rockapi.ai/keys); ключ исходного поставщика его не заменяет. Изучите [правила оплаты](https://docs.rockapi.ai/ru/pricing-and-billing.md) и требования к балансу.

Сохраните ключ на сервере в `ROCK_API_KEY`, а ID модели — в `ROCK_API_MODEL`. Примеры предполагают наличие curl либо пакета `openai` для выбранного языка. Они показывают Chat Completions и не подтверждают поддержку всех методов SDK или собственных API поставщика. Покупателю не нужно настраивать каналы поставщиков.

## Минимальный контрольный запрос

Полный базовый URL SDK — `https://rockapi.ai/v1`. Не добавляйте второй `/v1` и не включайте `/chat/completions` в базовую настройку SDK. Для curl нужен полный адрес:

```bash theme={null}
curl --fail-with-body https://rockapi.ai/v1/chat/completions \
  -H "Authorization: Bearer $ROCK_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"model\":\"$ROCK_API_MODEL\",\"messages\":[{\"role\":\"user\",\"content\":\"Ответь: привет.\"}]}"
```

### Пример на Python

```python theme={null}
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://rockapi.ai/v1",
    api_key=os.environ["ROCK_API_KEY"],
)
response = client.chat.completions.create(
    model=os.environ["ROCK_API_MODEL"],
    messages=[{"role": "user", "content": "Ответь: привет."}],
)
print(response.choices[0].message.content)
```

### Пример на Node.js

```javascript theme={null}
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://rockapi.ai/v1",
  apiKey: process.env.ROCK_API_KEY,
});
const response = await client.chat.completions.create({
  model: process.env.ROCK_API_MODEL,
  messages: [{ role: "user", content: "Ответь: привет." }],
});
console.log(response.choices[0].message.content);
```

## Проверка нужных приложению функций

Начните без необязательных параметров и добавляйте возможности по одной. Сохраняйте версию SDK, ID модели, входные данные и ожидаемое поведение, чтобы воспроизвести расхождения.

| Проверка | Подтверждение готовности |
| - | - |
| Обычный ответ | Нужные поля, полезное содержание и причина завершения |
| Потоковая выдача, если поддерживается | Разбор SSE, завершение, отмена и обрыв |
| Инструменты, если поддерживаются | Проверка аргументов, результат инструмента и следующий ход |
| Структурированный или мультимодальный ответ | Именно та схема или медиа, которые использует приложение |
| Ошибки и ограничения | Неверный ввод, отказ в доступе, тайм-ауты и `429` обработаны |
| Оплата | Соответствующий журнал, категории, группа и итоговая сумма |

Успешный текстовый ответ не проверяет изображения или инструменты. Даже за одним адресом разные модели могут предоставлять разные возможности и ответы. См. [оценку моделей по задачам](https://docs.rockapi.ai/ru/blog/buyers/ai-model-api-comparison.md).

## Перенос трафика с возможностью отката

В тестовой среде повторите типичные обезличенные запросы приложения. Сравните качество, задержки, ошибки и стоимость принятого результата. Ограничьте повторы, чтобы не создавать дублирующую работу и неконтролируемые расходы. Ошибку авторизации не следует повторять бесконечно. Используйте [описание ошибок и лимитов](https://docs.rockapi.ai/ru/errors-and-rate-limits.md), сохраняя время и ID без ключей и закрытых запросов.

Наращивайте рабочий трафик после приемки и сохраняйте прежнюю конфигурацию для отката. Сверяйте окончательное использование: временное уменьшение баланса или HTTP-ошибка сами по себе не определяют итоговую оплату.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.