Коротко
API, совместимый с OpenAI, — это любой HTTP API, который принимает такие же запросы, как API OpenAI, и отвечает в том же формате: те же пути (/v1/chat/completions, /v1/models и часто /v1/responses), те же поля JSON и тот же заголовок Authorization: Bearer с ключом. Поэтому официальные SDK OpenAI и множество инструментов на их основе работают с ним, если поменять всего две вещи: base URL и API-ключ. «Совместимость» говорит о формате запросов, а не о модели за ним, и каждый сервис поддерживает свою часть возможностей OpenAI, так что проверяйте то, на что опираетесь.
Это руководство опубликовано APIVAI — шлюзом для моделей Claude и GPT, совместимым с OpenAI. В примерах используется его адрес; те же шаги работают с любым совместимым сервисом.
Что входит в «совместимость»
Большинство сервисов повторяют ядро Chat Completions API от OpenAI:
| Часть | Что принимает или возвращает совместимый сервис |
|---|---|
POST /v1/chat/completions | ID модели в model и массив messages из {"role": ..., "content": ...} |
| Ответ | choices[0].message.content, finish_reason и объект usage (prompt_tokens, completion_tokens, total_tokens) |
| Потоковый режим | "stream": true возвращает server-sent events: по чанку data: {...} на каждый кусок текста, в конце data: [DONE] |
| Инструменты | tools с parameters в JSON Schema; модель отвечает tool_calls, а результаты вы возвращаете сообщениями role: "tool" |
GET /v1/models | Список ID моделей, доступных вашему ключу |
| Авторизация | Authorization: Bearer <ключ> |
| Ошибки | JSON вида {"error": {"message": ..., "type": ..., "code": ...}} |
Более новые сервисы реализуют и POST /v1/responses — новый Responses API от OpenAI, который некоторые инструменты (например, Codex CLI) используют вместо Chat Completions. Эндпоинты /v1/embeddings, изображений, аудио и файлов встречаются реже.
Где сервисы расходятся: чек-лист
Полной совместимости не бывает. Прежде чем переводить реальный трафик, проверьте:
- ID моделей. Каждый сервис называет модели по-своему. Берите их из
GET /v1/models, а не из названий OpenAI. - Игнорируемые параметры. Неподдерживаемые поля часто отбрасываются без ошибки:
response_format,seed,logprobs,n> 1,presence_penalty, флагstrictу инструментов. Запрос «работает», но делает меньше, чем вы думаете. - Диапазоны параметров. Некоторые модели отклоняют значения, которые принимает OpenAI (например,
temperatureбольше 1 или одновременно заданныеtemperatureиtop_p). - Эндпоинты кроме чата. Эмбеддинги, изображения, аудио, файлы, batch и дообучение часто отсутствуют.
- Usage в потоке. Счётчики токенов в потоковом ответе могут требовать
"stream_options": {"include_usage": true}или не приходить вовсе. - Ошибки и лимиты. Форма JSON ошибки обычно совпадает, но коды статусов, тексты и заголовки лимитов (
x-ratelimit-*,retry-after) различаются. - Вызов инструментов и изображения. Поддерживаются большинством крупных моделей, но проверьте параллельные вызовы, принудительный
tool_choiceи изображения на той модели, которую будете использовать.
Кто предлагает API, совместимый с OpenAI
Несколько хорошо документированных примеров:
| Сервис | Base URL | Примечания |
|---|---|---|
| Ollama (локально) | http://localhost:11434/v1 | Chat Completions, Completions, модели, эмбеддинги и Responses без сохранения состояния; ключ обязателен, но не проверяется |
| vLLM (свой сервер) | http://localhost:8000/v1 | Запускается командой vllm serve <модель>; Chat Completions, Completions, Responses, эмбеддинги и модели |
| LM Studio (локально) | http://localhost:1234/v1 | Модели, Chat Completions, Completions, Responses и эмбеддинги |
| Anthropic | https://api.anthropic.com/v1/ | Anthropic называет его слоем для тестирования и сравнения моделей, а не долгосрочным решением для продакшена; кэш промптов и часть полей есть только в нативном API |
| Google Gemini | https://generativelanguage.googleapis.com/v1beta/openai/ | По словам Google, в бета-версии |
| API-шлюзы | Собственный URL шлюза | Модели нескольких провайдеров за одним ключом и одним форматом; APIVAI — один из них, для Claude и GPT (см. также APIVAI и OpenRouter) |
Обратите внимание на base URL: большинство заканчиваются на /v1, у Gemini — нет. Всегда копируйте base URL из документации провайдера.
Как переключить приложение на другой совместимый сервис
Официальные SDK OpenAI читают две переменные окружения, поэтому многие приложения переключаются без правки кода:
export OPENAI_BASE_URL="https://api.apivai.com/v1" export OPENAI_API_KEY="your-key"
Или задайте их в коде. Python:
from openai import OpenAI
client = OpenAI(base_url="https://api.apivai.com/v1", api_key="your-key")
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "Say hello in one sentence."}],
)
print(resp.choices[0].message.content)Node.js:
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.apivai.com/v1", apiKey: "your-key" });
const resp = await client.chat.completions.create({
model: "gpt-6-luna",
messages: [{ role: "user", content: "Say hello in one sentence." }],
});
console.log(resp.choices[0].message.content);Проверьте через curl, прежде чем трогать приложение:
curl https://api.apivai.com/v1/models -H "Authorization: Bearer your-key"
Правило /v1. SDK дописывают к base URL путь /chat/completions, поэтому base URL уже должен содержать версию (.../v1). Ошибка 404 почти всегда значит, что /v1 пропущен или повторяется. Инструменты дописывают разное, поэтому следуйте руководству для своего инструмента.
Инструменты, которые принимают свой адрес, совместимый с OpenAI
У большинства AI-инструментов для кода и чата есть настройка «custom OpenAI-compatible» или «OpenAI base URL». Пошаговые руководства:
- Агенты и редакторы кода: Cline, Roo Code, Kilo Code, Continue, Cursor, Zed, Aider, OpenCode, Goose, Open Interpreter и Codex CLI (в руководстве по Claude Code)
- Чат-приложения: Cherry Studio, Chatbox, LobeChat, Open WebUI
- Автоматизация: Dify, n8n
Как вызывать Claude в формате OpenAI
Собственный API Claude использует другой формат (/v1/messages, x-api-key, поле system на верхнем уровне). Чтобы работать с Claude из инструмента в формате OpenAI, нужен переводчик: слой совместимости самой Anthropic (см. выше) или шлюз вроде APIVAI, который принимает запросы в формате OpenAI для ID моделей Claude по адресу https://api.apivai.com/v1. Инструменты, которые сами говорят на формате Anthropic, например Claude Code, могут использовать https://api.apivai.com напрямую; см. руководство по Claude Code и документацию API.
Частые вопросы
«Совместим с OpenAI» значит, что работают все функции OpenAI?
Нет. Совпадает основной формат запросов и ответов. Каждый сервис поддерживает лишь часть: чат и потоковый режим — почти всегда, инструменты и изображения — у большинства крупных моделей, эмбеддинги, аудио, файлы и batch — гораздо реже. Неподдерживаемые поля часто молча игнорируются, поэтому проверяйте нужные вам функции.
Нужно ли менять код?
Обычно только base URL, ключ и ID модели. Если код использует то, что есть только у OpenAI (например, structured outputs через response_format или Assistants API), проверьте, поддерживает ли это новый сервис.
Можно ли тем же кодом обращаться к локальной модели?
Да. Ollama, vLLM и LM Studio запускают сервер, совместимый с OpenAI, поэтому тот же код SDK работает с base_url, равным http://localhost:11434/v1, http://localhost:8000/v1 или http://localhost:1234/v1. ID моделей и поддерживаемые функции зависят от сервера и модели.
Заканчивается ли base URL на /v1?
У большинства сервисов — да: SDK дописывает /chat/completions, поэтому base URL должен заканчиваться версией. У некоторых провайдеров путь другой (у Gemini — /v1beta/openai/), так что копируйте его из документации.
Как узнать, какие модели поддерживает сервис?
Вызовите GET /v1/models со своим ключом: ID из ответа и нужно указывать в model. Цены и размер контекста — на странице цен провайдера; для APIVAI — на странице моделей.