OpenAI-совместимый API для GPT, Claude, Gemini и других моделей
OpenAI-совместимый API позволяет подключить существующее приложение к go2llm заменой базового адреса, ключа и model ID. Подход подходит для официальных OpenAI SDK и многих библиотек, которые используют формат Chat Completions.
Базовый адрес и endpoint
Используйте базовый URL:
https://go2llm.tech/v1
Запросы Chat Completions отправляются в POST /v1/chat/completions. Модель должна содержать chat.completions в списке endpoints, возвращаемом GET /v1/models.
Подключение через Python
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://go2llm.tech/v1",
)
response = client.chat.completions.create(
model="MODEL_ID_ИЗ_КАТАЛОГА",
messages=[{"role": "user", "content": "Ответь: OK"}],
)
print(response.choices[0].message.content)
Не храните реальный ключ прямо в файле. В production передавайте его через переменную окружения или менеджер секретов.
Подключение через JavaScript и TypeScript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.GO2LLM_API_KEY,
baseURL: "https://go2llm.tech/v1",
});
const response = await client.chat.completions.create({
model: "MODEL_ID_ИЗ_КАТАЛОГА",
messages: [{ role: "user", content: "Ответь: OK" }],
});
console.log(response.choices[0].message.content);
Серверный SDK использовать безопаснее, чем вызывать API прямо из браузера: иначе ключ станет доступен посетителям страницы.
Потоковые ответы
Для streaming передайте stream: true и обрабатывайте SSE-части по мере поступления. Поток нельзя автоматически повторить после того, как клиент получил первый валидный фрагмент: приложение должно корректно сохранять уже выданный текст и обрабатывать сетевой обрыв.
const stream = await client.chat.completions.create({
model: "MODEL_ID_ИЗ_КАТАЛОГА",
messages: [{ role: "user", content: "Кратко объясни SSE" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
Модели, возможности и цены
GET /v1/models возвращает точные model ID, входные и выходные модальности и поддерживаемые endpoints. GET /api/pricing содержит публичные цены. Для текста отдельно учитываются input, output и подтверждённое чтение кэша.
Один ключ может использовать разные опубликованные модели, но для production, разработки и CI рекомендуется создавать отдельные ключи с собственными лимитами. Актуальная информация находится на странице моделей и цен.
Чем OpenAI-совместимый формат отличается от Anthropic Messages
Chat Completions использует Authorization: Bearer, массив messages и /v1/chat/completions. Anthropic Messages обычно использует x-api-key, заголовок версии и /v1/messages. Форматы похожи по назначению, но не взаимозаменяемы на уровне тела запроса.
Для Claude Code используйте нативный Anthropic-совместимый endpoint и отдельную инструкцию. Для приложения на OpenAI SDK удобнее Chat Completions. Для coding-агентов вроде OpenCode или Kilo Code, которые тоже говорят по Chat Completions, — полный список инструментов и их статус.
Миграция существующего приложения
- Замените официальный
base_urlнаhttps://go2llm.tech/v1. - Передайте новый API-ключ через защищённую конфигурацию.
- Возьмите точный model ID из
/v1/models. - Проверьте обычный и потоковый запросы на небольшой нагрузке.
- Сверьте списание в
usage.cost_usdи задайте лимит ключа.
Responses API (/v1/responses) опубликован и обслуживает те же модели, что chat.completions. А вот embeddings, audio и video — нет: если приложение зависит от них, сначала проверьте наличие endpoint в документации. Совместимость Chat Completions не означает автоматическую поддержку всех API OpenAI.
Частые вопросы
Нужно ли переписывать приложение?
Для стандартного Chat Completions клиента обычно достаточно заменить base URL, ключ и model ID. Нестандартные параметры нужно проверить по документации.
Можно ли переключать модели без нового ключа?
Да. Используйте другой опубликованный model ID с совместимым endpoint.
Как ограничить стоимость запросов?
Создайте отдельный ключ и задайте ему лимит. Фактическая стоимость успешного запроса возвращается в usage.cost_usd.
Где искать причины ошибок?
Проверьте HTTP-код, error.type, model ID, endpoint, баланс и квоту. Затем откройте справочник ошибок или обратитесь в поддержку без передачи секретов.