Как подключить OfoxAI через OpenAI SDK: Python и TypeScript
Настройка OfoxAI в OpenAI SDK: base URL, ключ и ID модели. Примеры Python и TypeScript, потоковые ответы и проверки перед переносом приложения.
Чтобы подключить OfoxAI через OpenAI SDK, задайте адрес https://api.ofox.run/v1, передайте ключ OfoxAI и выберите точный ID модели из каталога. SDK можно сохранить, но используемые приложением эндпоинты и параметры нужно проверить. Примеры ниже работают с Chat Completions; совместимость других API проверяется отдельно.
Что меняется при переходе с OpenAI или OpenRouter?
Проверьте три значения: адрес шлюза, ключ и ID модели. После смены URL ключ OpenAI или OpenRouter не становится ключом OfoxAI.
| Настройка | Напрямую через OpenAI | OpenRouter | OfoxAI |
|---|---|---|---|
| Base URL | По умолчанию в SDK | https://openrouter.ai/api/v1 | https://api.ofox.run/v1 |
| Ключ API | Ключ OpenAI | Ключ OpenRouter | Ключ OfoxAI |
| model | ID модели OpenAI | ID из каталога OpenRouter | ID из каталога OfoxAI |
Адреса и названия параметров приведены в документации OfoxAI и OpenRouter quickstart. При переносе с OpenRouter отдельно проверьте параметры маршрутизации и псевдонимы моделей: одинаковый формат ID не гарантирует одинакового поведения.
Как настроить Python SDK?
Передайте base_url и api_key при создании клиента, а ID модели — в параметре model. Установите официальный пакет командой python -m pip install openai в виртуальном окружении проекта. Требования к версии Python приведены в инструкции SDK.
Задайте OFOX_API_KEY через переменную окружения или хранилище секретов. Необязательная переменная OFOX_MODEL выбирает модель; по умолчанию пример использует openai/gpt-4o, присутствовавшую в публичном каталоге при проверке 9 сентября 2026 года. Не сохраняйте ключи в репозитории. Сам по себе файл .env не загружает значения в окружение Python — нужен соответствующий загрузчик.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.ofox.run/v1",
api_key=os.environ["OFOX_API_KEY"],
)
model_id = os.environ.get("OFOX_MODEL", "openai/gpt-4o")
response = client.chat.completions.create(
model=model_id,
messages=[{"role": "user", "content": "Say hello in one sentence."}],
)
print(response.choices[0].message.content)
При запуске с ключом пополненного аккаунта этот код отправляет платный запрос на генерацию. Сначала проверьте цену модели и права аккаунта. Успешное получение списка моделей не подтверждает доступ к генерации или корректность списаний.
Как настроить TypeScript SDK?
В TypeScript параметры называются baseURL и apiKey. Установите официальный пакет openai и запускайте пример в серверном TypeScript-проекте с учётом требований SDK. Ключ должен оставаться на сервере.
import OpenAI from 'openai';
const apiKey = process.env.OFOX_API_KEY;
if (!apiKey) throw new Error('Set OFOX_API_KEY before running this example.');
const client = new OpenAI({
baseURL: 'https://api.ofox.run/v1',
apiKey,
});
async function main() {
const response = await client.chat.completions.create({
model: process.env.OFOX_MODEL ?? 'openai/gpt-4o',
messages: [{ role: 'user', content: 'Say hello in one sentence.' }],
});
console.log(response.choices[0]?.message.content);
}
main().catch((error) => {
console.error(error.message);
process.exitCode = 1;
});
Где взять правильный ID модели?
Скопируйте полный ID из публичного списка или каталога моделей. Приведённые ниже записи присутствовали в публичном списке 9 сентября 2026 года и не были помечены как устаревшие. Доступность со временем может измениться.
| Нужная модель | ID в OfoxAI |
|---|---|
| GPT-4o | openai/gpt-4o |
| GPT-4o mini | openai/gpt-4o-mini |
| GPT-5.2 | openai/gpt-5.2 |
| Claude Sonnet 4.6 | anthropic/claude-sonnet-4.6 |
GPT-5.2 и GPT-5.4 mini — разные модели. Замена gpt-5.2 на openai/gpt-5.4-mini меняет модель, а не просто добавляет префикс провайдера. Для Claude, Gemini, DeepSeek и других семейств проверяйте каталог: нельзя угадывать ID или добавлять openai/ ко всем названиям.
Общий клиент не означает одинакового набора возможностей у моделей. Проверяйте supported_endpoints для нужного эндпоинта OpenAI, supported_parameters для параметров и модальности ввода и вывода. Сами по себе эти поля не подтверждают поддержку другого нативного протокола.
Как проверить потоковые ответы и вызов инструментов?
Потоковый режим проверяйте отдельно от обычного ответа. Для клиента Python и переменной model_id из примера выше обработка текстовых фрагментов должна допускать блоки без choices или текста:
stream = client.chat.completions.create(
model=model_id,
messages=[{"role": "user", "content": "Say hello in one sentence."}],
stream=True,
)
try:
for chunk in stream:
if chunk.choices:
text = chunk.choices[0].delta.content
if text:
print(text, end="", flush=True)
finally:
stream.close()
Для вызова инструментов проверьте весь цикл: передайте описание инструмента, проверьте аргументы в ответе модели, выполните инструмент в приложении и отправьте результат обратно. Возвращённый моделью вызов инструмента сам по себе не выполняет функцию. Структурированный вывод проверяйте по схеме приложения; совместимость SDK не гарантирует корректность данных.
Что проверить в LangChain, LlamaIndex и Vercel AI SDK?
Выберите адаптер с поддержкой сторонних OpenAI-совместимых эндпоинтов и явно укажите нужный тип API. Фреймворк может добавлять собственную проверку ID, значения по умолчанию и особенности провайдера. ChatOpenAI в LangChain ориентирован на стандартные поля ответа OpenAI; не рассчитывайте, что он сохранит дополнительные поля рассуждений шлюза.
| Фреймворк | Что проверить |
|---|---|
| LangChain | Настройте адрес, ключ и точный ID в ChatOpenAI; проверьте эндпоинты для включённых функций. См. документацию ChatOpenAI. |
| LlamaIndex | Для сторонних совместимых API рассмотрите OpenAILike, включая api_base, модель и настройки возможностей. |
| Vercel AI SDK | Задайте baseURL и apiKey у OpenAI provider; для Chat Completions явно выберите .chat(modelId). См. справочник провайдера. |
Успешный вызов Chat Completions не подтверждает совместимость Responses, эмбеддингов или генерации изображений. Проверяйте каждый используемый эндпоинт с установленной в проекте версией фреймворка.
Что проверить до переноса рабочего трафика?
Проверяйте выбранную модель на реальных сценариях приложения и сохраните рабочую конфигурацию для отката.
- Проверьте ключ, права аккаунта, баланс и точный ID модели.
- Проверьте генерацию текста и обработку ошибок приложения.
- При необходимости проверьте потоковые ответы, отмену запросов, инструменты и структурированный вывод.
- Сверьте размер запросов, лимиты токенов, тайм-ауты и настройки повторных попыток.
- Сопоставьте возвращённые данные об использовании с расходами аккаунта, включая повторные запросы.
- Перенесите небольшую долю трафика, оцените ошибки и задержки и только затем увеличивайте нагрузку.
Для первого подключения используйте краткое руководство OfoxAI. Стоимость и возможности для команд разобраны в сравнении OfoxAI и OpenRouter. Выбор шлюза и безопасный перенос приложения требуют отдельных проверок.
Часто задаваемые вопросы
- Какой base URL нужен для OfoxAI в OpenAI SDK?
- Используйте https://api.ofox.run/v1 и ключ OfoxAI. В Python параметр называется base_url, в TypeScript — baseURL. Точный ID модели возьмите из текущего каталога OfoxAI.
- Нужно ли менять ID модели при миграции?
- Проверьте точный ID. Например, gpt-5.2 соответствует openai/gpt-5.2, а не openai/gpt-5.4-mini. Переход на другую модель — отдельное решение, а не добавление префикса.
- Можно ли вызвать Claude через OpenAI SDK?
- Если выбранная модель Claude поддерживает эндпоинт OpenAI Chat Completions, укажите её ID из каталога OfoxAI в том же клиенте. Перед использованием инструментов и структурированного вывода проверьте поддерживаемые параметры.
- Достаточно ли сменить base URL для безопасного переноса приложения?
- Нет. В тестовой среде проверьте авторизацию, ID моделей, параметры, потоковые ответы, обработку ошибок и оплату. До переноса рабочего трафика подготовьте конфигурацию для отката.
- Руководство охватывает все эндпоинты OpenAI?
- Нет. Примеры используют Chat Completions. Responses, эмбеддинги, изображения и другие API нужно проверять отдельно с учётом модели и версии SDK.

