Совместимость с OpenAI SDK
Что работает без изменений, если направить на tAI существующую интеграцию, совместимую с OpenAI, а что нет, — чтобы не пришлось выяснять это методом проб и ошибок.
Кратко
Измените два значения: base_url на https://api.artfical.com/v1 и api_key на ключ tAI — и основной цикл запрос/ответ: chat completions, потоковая передача, вызов инструментов, ввод изображений — работает точно так же, как и с собственным API OpenAI. Эта страница посвящена тем частям, которые не переносятся один в один, чтобы миграция не строилась на обнаружении пробелов один неудавшийся запрос за раз.
# До client = OpenAI(api_key="sk-...") # После client = OpenAI(base_url="https://api.artfical.com/v1", api_key="tai-sk-...")
Работает без изменений
| Возможность | Примечания |
|---|---|
| Chat Completions | Тот же формат запроса и ответа. См. Chat Completions. |
| Потоковая передача | Тот же формат чанков SSE, включая финальный чанк только с данными об использовании. См. Потоковая передача. |
| Вызов инструментов / функций | Тот же формат tools и tool_calls. tAI никогда не выполняет инструменты самостоятельно; о том, почему это отличается от некоторых других API, ориентированных на агентов, см. в разделе Вызов инструментов. |
| Ввод изображений | Тот же формат части содержимого image_url, data URI в base64. О том, какие модели это принимают, см. в разделе Изображения. |
temperature, top_p, presence_penalty, frequency_penalty, seed, stop | Те же названия, те же допустимые диапазоны. См. Параметры сэмплирования. |
| Формат ошибки | Тот же формат {"error": {"message", "type"}}. См. Ошибки. |
GET /v1/models | Тот же формат списка, хотя набор полей у каждой записи о модели меньше, чем у OpenAI. См. Модели. |
Пока не поддерживается
| Возможность | Что произойдёт, если её отправить |
|---|---|
n (несколько вариантов завершения) | Игнорируется. choices всегда содержит ровно одну запись. |
logprobs / top_logprobs | Игнорируется. Данные о логарифмических вероятностях не возвращаются. |
response_format (JSON-режим / структурированный вывод) | Игнорируется. Если вам нужен надёжно структурированный вывод, более переносимый подход — прямо указать модели в самом промпте отвечать в определённом формате (JSON, фиксированный шаблон) и разобрать полученный текст. |
| Эндпоинты эмбеддингов, аудио, генерации изображений | Не реализованы. Поверхность API tAI ограничена chat completions и получением списка моделей; полный список эндпоинтов см. в обзоре API. |
| Эндпоинты fine-tuning, batch и загрузки файлов | Не реализованы. |
| Ключи, привязанные к организации / проекту | Неприменимо. Ключ tAI привязан к одному рабочему пространству; см. Аутентификация. |
Ни одно из неподдерживаемых полей не приводит к полному отказу запроса; они принимаются и молча игнорируются, а не вызывают 400. Это осознанное решение, чтобы не ломать существующий клиент, который по привычке всегда отправляет, скажем, n: 1, даже если это и так значение по умолчанию; риск в том, что клиент может решить, будто по-настоящему неподдерживаемая функция (например, n: 3 для трёх реальных вариантов завершения) работает, хотя на самом деле она молча не работает, — поэтому стоит явно проверять формат ответа, а не полагаться на отсутствие ошибки.
Имена моделей не переносятся
Строку модели из существующей интеграции — "gpt-4o", "gpt-4.1-mini" или подобную — нужно заменить на один из собственных идентификаторов моделей tAI (tai-4.0.6P, tai-4.0.6B, tai-4.0.7, tai-4.1, tai-4.2); о том, для чего позиционируется каждая из них, см. на странице Модели. Автоматического сопоставления имён моделей другого провайдера с моделями tAI нет, поскольку два каталога не соответствуют друг другу один в один ни по возможностям, ни по именованию.
Что стоит перепроверить после миграции
Несколько вещей, которые не вызывают ошибку, но которые легко незаметно сделать неправильно с первого раза: убедитесь, что base_url включает суффикс /v1 (голый https://api.artfical.com без него не будет корректно резолвить запросы), убедитесь, что API-ключ имеет префикс tai-sk-, а не остался от того, куда интеграция была направлена раньше, и если интеграция полагается на то, что какое-то из перечисленных выше неподдерживаемых полей даёт реальный эффект, заложите этот пробел явно, а не предполагайте полный паритет.