Своего SDK у нас нет и не будет. Клиент OpenAI поддерживают все языки и все фреймворки — писать поверх него ещё одну обёртку значит брать на себя обязательство её сопровождать.
Работают без изменений: библиотека остаётся той же, меняются два значения.
from openai import OpenAI
client = OpenAI(
base_url="https://zerno.one/api/v1",
api_key=os.environ["ZERNO_API_KEY"],
)| Что | Где поменять |
|---|---|
| LangChain | ChatOpenAI(base_url=…, api_key=…, model="автор/модель") |
| LlamaIndex | OpenAILike(api_base=…, api_key=…, is_chat_model=True) |
| Vercel AI SDK | createOpenAI({ baseURL, apiKey }) из @ai-sdk/openai |
| Spring AI | spring.ai.openai.base-url и spring.ai.openai.api-key |
| Semantic Kernel | AddOpenAIChatCompletion с endpoint |
| n8n | узел OpenAI, credential с полем Base URL |
| Flowise / Dify | тип провайдера OpenAI-compatible, адрес и ключ |
| Симптом | Причина |
|---|---|
| 404 на любой запрос | В базовый адрес не включён /v1 или, наоборот, включён дважды: /api/v1/v1 |
| Модель не найдена | Передан голый идентификатор gpt-5 вместо openai/gpt-5 |
| Библиотека шлёт запросы мимо нас | Переменная OPENAI_BASE_URL не подхвачена: у части клиентов приоритет у явного аргумента, у части — наоборот |
Если исходники менять нельзя, чаще всего хватает двух переменных — их читают почти все клиенты и большинство инструментов поверх них:
export OPENAI_BASE_URL="https://zerno.one/api/v1"
export OPENAI_API_KEY="sk-if-v1-…"Готовые наборы переменных для консольных агентов и редакторов кода — в разделе «Агенты и редакторы кода».
Кроме схемы OpenAI мы принимаем родные схемы Anthropic (/api/v1/anthropic, заголовок x-api-key) и Google (/api/v1/google). Ключ во всех случаях наш. Это нужно там, где код завязан на особенности конкретного SDK и переписывать его дороже, чем поменять адрес. Возможности, которых нет в схеме OpenAI, при этом сохраняются, а вот маршрутизация сужается до площадок этого автора.