Skip to content

Протокол OpenAI Compatible

Протокол, совместимый с OpenAI, является наиболее широко поддерживаемым стандартом AI API в отрасли. RouteAPI полностью реализует спецификацию OpenAI API, что позволяет вам легко интегрироваться с существующими SDK, инструментами и клиентами OpenAI, просто изменив Base URL и API Key.

OpenAI API определяет стандартизированный набор REST интерфейсов для генерации диалогов, текстовых эмбеддингов, списка моделей и других возможностей. Его основное преимущество заключается в зрелой экосистеме: официальные SDK OpenAI, LangChain, LiteLLM, Cursor и различные ассистенты для программирования нативно поддерживают этот протокол.

Область совместимости RouteAPI:

  • Полная совместимость с эндпоинтами OpenAI Chat Completions, Responses, Embeddings и Models
  • Единообразная аутентификация с использованием заголовков запроса Authorization: Bearer
  • Единообразные форматы запросов/ответов, включая потоковую передачу SSE и структуры ошибок
  • Более широкий диапазон ID моделей, можно вызывать OpenAI, Claude, Gemini, Mistral и других провайдеров
  • Сохранение явных нулевых значений параметров, явно переданные 0 / false не отбрасываются

Миграция с официального OpenAI API на RouteAPI требует только двух изменений в конфигурации:

from openai import OpenAI
client = OpenAI(
api_key="sk-your-routeapi-token", # Переключить на RouteAPI Token
base_url="https://api.routeapi.ai/v1" # Переключить на RouteAPI Base URL
)

Весь остальной код остается неизменным.

https://api.routeapi.ai/v1

Все эндпоинты, совместимые с OpenAI, используют этот базовый URL. Если вашему клиенту или SDK требуется полный URL, просто добавьте путь эндпоинта, например, https://api.routeapi.ai/v1/chat/completions.

Идентична официальному OpenAI API, с использованием HTTP заголовка запроса Authorization:

Authorization: Bearer sk-your-routeapi-token
Content-Type: application/json

RouteAPI токены начинаются с sk- и генерируются на странице API Keys в консоли. Храните токены на стороне сервера и не раскрывайте их в браузерах, мобильных приложениях или публичных репозиториях.

Обзор поддерживаемых эндпоинтов

Section titled “Обзор поддерживаемых эндпоинтов”
ЭндпоинтНазначениеПодробная документация
/v1/chat/completionsГенерация диалогов, поддерживает многооборотные диалоги, вызовы инструментов, структурированный выводChat Completions
/v1/responsesПротокол OpenAI Responses, подходит для агентов программирования и фреймворков приложений нового поколенияResponses
/v1/embeddingsВекторные эмбеддинги текста для семантического поиска, RAG, расчета сходстваEmbeddings
/v1/modelsПолучить список моделей, доступных для текущей учетной записиНиже на этой странице

Сравнение вариантов использования

Section titled “Сравнение вариантов использования”
СценарийРекомендуемый эндпоинтПричина
Общий чат, Q&A, резюмирование, классификация/v1/chat/completionsНаиболее зрелая экосистема, самая широкая совместимость
Агенты программирования (Cursor, Claude Code, Copilot)/v1/responses или /v1/chat/completionsЗависит от протокола, нативно поддерживаемого клиентом
Многооборотный диалог, история разговоров/v1/chat/completionsМассив messages естественно поддерживает несколько раундов
Вызов инструментов, вызов функций/v1/chat/completionsНаиболее стандартная структура определения инструментов и передачи результатов
Семантический поиск, RAG, поиск документов/v1/embeddingsВозвращает векторные представления
Структурированный вывод, JSON Schema/v1/chat/completions или /v1/responsesУправляется через параметр response_format

Конкретный выбор эндпоинта должен отдавать приоритет нативной поддержке клиента и SDK. Если клиент явно требует определенный протокол, следуйте требованиям клиента.

Установка:

Terminal window
pip install openai

Настройка RouteAPI:

import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ROUTEAPI_KEY"],
base_url="https://api.routeapi.ai/v1"
)
response = client.chat.completions.create(
model="gpt-5.5",
messages=[
{"role": "user", "content": "Пожалуйста, представьте RouteAPI одним предложением"}
]
)
print(response.choices[0].message.content)

Необходимо установить только параметры api_key и base_url; весь остальной код идентичен официальному API.

Установка:

Terminal window
npm install openai

Настройка RouteAPI:

import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.ROUTEAPI_KEY,
baseURL: 'https://api.routeapi.ai/v1'
});
const response = await client.chat.completions.create({
model: 'gpt-5.5',
messages: [
{ role: 'user', content: 'Пожалуйста, представьте RouteAPI одним предложением' }
]
});
console.log(response.choices[0].message.content);

Класс ChatOpenAI в LangChain поддерживает настраиваемый base_url:

from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-5.5",
openai_api_key=os.environ["ROUTEAPI_KEY"],
openai_api_base="https://api.routeapi.ai/v1"
)
response = llm.invoke("Пожалуйста, представьте RouteAPI одним предложением")
print(response.content)

Функция completion() в LiteLLM поддерживает настраиваемый api_base:

import litellm
response = litellm.completion(
model="gpt-5.5",
messages=[{"role": "user", "content": "Пожалуйста, представьте RouteAPI одним предложением"}],
api_key=os.environ["ROUTEAPI_KEY"],
api_base="https://api.routeapi.ai/v1"
)
print(response.choices[0].message.content)

Другие совместимые клиенты

Section titled “Другие совместимые клиенты”

Любой клиент, инструмент или фреймворк, поддерживающий OpenAI API, может интегрироваться с RouteAPI через следующую конфигурацию:

  1. API Key установить на RouteAPI Token (начинается с sk-)
  2. Base URL установить на https://api.routeapi.ai/v1
  3. Model ID использовать имена моделей, поддерживаемые RouteAPI (запрос через /v1/models)

Основные параметры запроса

Section titled “Основные параметры запроса”

Основные эндпоинты протокола, совместимого с OpenAI, имеют общий набор ключевых параметров. Ниже приведена справочная таблица для общих параметров; подробные объяснения находятся в специальной документации каждого эндпоинта.

ПараметрТипОбязательныйОписание
modelstringДаID модели, должна быть доступна для текущей учетной записи
messagesarrayДаСписок сообщений диалога, каждое сообщение содержит role и content
streambooleanНетИспользовать ли потоковый вывод SSE, по умолчанию false
temperaturenumberНетТемпература выборки, диапазон от 0 до 2, по умолчанию 1
top_pnumberНетПараметр nucleus sampling, диапазон от 0 до 1
max_tokensnumberНетМаксимальное количество выходных токенов (устаревшее имя параметра, все еще требуется некоторыми моделями)
max_completion_tokensnumberНетМаксимальное количество выходных токенов (новое имя параметра)
toolsarrayНетСписок определений инструментов для вызова функций
tool_choicestring/objectНетСтратегия выбора инструмента (auto / required / none / конкретный инструмент)
response_formatobjectНетОграничение формата вывода (режим JSON / JSON Schema)
stream_optionsobjectНетДополнительные опции потоковой передачи, такие как include_usage
stopstring/arrayНетПользовательские последовательности остановки
presence_penaltynumberНетШтраф за присутствие, диапазон от -2 до 2
frequency_penaltynumberНетШтраф за частоту, диапазон от -2 до 2
userstringНетИдентификатор конечного пользователя для обнаружения злоупотреблений

Для подробных объяснений и дополнительных параметров обратитесь к документации Chat Completions.

ПараметрТипОбязательныйОписание
modelstringДаID модели эмбеддингов
inputstring/arrayДаТекст для встраивания, поддерживает одну строку или массив строк
encoding_formatstringНетФормат возврата, float (по умолчанию) или base64
dimensionsnumberНетРазмерность выходного вектора, зависит от поддержки модели
userstringНетИдентификатор конечного пользователя

Для подробных объяснений обратитесь к документации Embeddings.

Стандартный ответ (не потоковый)

Section titled “Стандартный ответ (не потоковый)”

Пример стандартного ответа Chat Completions:

{
"id": "chatcmpl_xxx",
"object": "chat.completion",
"created": 1730000000,
"model": "gpt-5.5",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "RouteAPI — это API-шлюз, объединяющий доступ к нескольким провайдерам моделей AI."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 18,
"total_tokens": 42
}
}

Ключевые поля:

  • choices[0].message.content — текстовый ответ модели
  • choices[0].finish_reason — причина завершения (stop / length / tool_calls / content_filter)
  • usage — статистика использования токенов

Установка stream: true возвращает инкрементные данные в формате Server-Sent Events (SSE):

data: {"id":"chatcmpl_xxx","object":"chat.completion.chunk","created":1730000000,"model":"gpt-5.5","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl_xxx","object":"chat.completion.chunk","created":1730000000,"model":"gpt-5.5","choices":[{"index":0,"delta":{"content":"RouteAPI"},"finish_reason":null}]}
data: {"id":"chatcmpl_xxx","object":"chat.completion.chunk","created":1730000000,"model":"gpt-5.5","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
data: {"id":"chatcmpl_xxx","object":"chat.completion.chunk","created":1730000000,"model":"gpt-5.5","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":24,"completion_tokens":18,"total_tokens":42}}
data: [DONE]

Характеристики потокового ответа:

  • Каждая строка начинается с data: , за которой следует объект JSON
  • Инкрементный контент находится в choices[0].delta.content
  • При завершении finish_reason не равен null
  • Последняя строка — data: [DONE]

Если вам нужна статистика использования токенов в потоковом режиме, установите stream_options: { "include_usage": true }, и информация об использовании будет возвращена в последнем фрагменте данных.

Ответы с ошибками следуют стандартному формату OpenAI:

{
"error": {
"message": "Invalid API key provided",
"type": "invalid_request_error",
"code": "invalid_api_key"
}
}

Распространенные типы ошибок:

HTTP код статусаtypeОписание
401invalid_request_errorНедействительный или отсутствующий API Key
429rate_limit_errorПревышен лимит скорости
500api_errorВнутренняя ошибка сервера
503overloaded_errorСервис перегружен

Для подробной обработки ошибок обратитесь к документации по обработке ошибок.

Отличия от официального OpenAI API

Section titled “Отличия от официального OpenAI API”

Протокол RouteAPI, совместимый с OpenAI, полностью совместим на уровне протокола, но имеет некоторые отличия в возможностях моделей, биллинге и ограничении скорости:

Более широкий диапазон ID моделей

Section titled “Более широкий диапазон ID моделей”

Официальный OpenAI API может вызывать только собственные модели OpenAI (gpt-4o, gpt-5.5 и т.д.). RouteAPI поддерживает модели от нескольких провайдеров:

  • OpenAI: gpt-4o, gpt-5.5, o3-mini и т.д.
  • Anthropic Claude: claude-sonnet-4-5, claude-opus-4 и т.д.
  • Google Gemini: gemini-2.0-flash, gemini-2.5-pro и т.д.
  • Mistral: mistral-large, mistral-small и т.д.
  • Другие: DeepSeek, Qwen, LLaMA и т.д.

Запросите полный список моделей, доступных для текущей учетной записи, через эндпоинт /v1/models.

Биллинг и ограничение скорости управляются RouteAPI

Section titled “Биллинг и ограничение скорости управляются RouteAPI”
  • Биллинг: Оплата согласно прайс-листу RouteAPI, который может отличаться от официальных цен вышестоящих провайдеров
  • Ограничение скорости: Контролируется политиками ограничения скорости RouteAPI, а не лимитами вышестоящих провайдеров
  • Квоты: Баланс учетной записи и квоты управляются RouteAPI, пополнение и просмотр в консоли

Поддержка параметров зависит от базовой модели

Section titled “Поддержка параметров зависит от базовой модели”

Протокол, совместимый с OpenAI, определяет полный набор параметров, но фактическая поддержка зависит от выбранной модели:

ВозможностьОписание
Вызов инструментов (tools)Зависит от того, поддерживает ли модель вызов функций
Структурированный вывод (response_format)Зависит от того, поддерживает ли модель режим JSON или JSON Schema
Визуальный ввод (image_url)Зависит от того, поддерживает ли модель мультимодальный ввод
Использование при потоковой передаче (stream_options.include_usage)Зависит от того, поддерживают ли модель и канал статистику использования при потоковой передаче
Управление рассуждениями (reasoning_effort)Поддерживается только некоторыми моделями рассуждений

Рекомендуется проверить поддержку выбранной моделью ключевых параметров в тестовой среде перед включением в продакшн.

Обработка явных нулевых значений параметров

Section titled “Обработка явных нулевых значений параметров”

Это тонкое, но важное отличие. В протоколе, совместимом с OpenAI, если необязательные параметры явно переданы как 0, 0.0 или false, RouteAPI рассматривает их как явную настройку пользователя, а не отбрасывает как значения по умолчанию.

Например:

{
"model": "gpt-5.5",
"messages": [...],
"temperature": 0,
"top_p": 1.0
}

Здесь temperature: 0 будет сохранен и передан вышестоящей модели, а не будет рассматриваться как неустановленный, потому что “значение равно 0”. Это гарантирует, что клиенты могут точно контролировать параметры выборки.

Если вы не хотите передавать определенный параметр, просто удалите это поле из запроса; не передавайте null или 0.

Примечания по совместимости

Section titled “Примечания по совместимости”

Возможности зависят от выбранной модели

Section titled “Возможности зависят от выбранной модели”

Протокол, совместимый с OpenAI, является стандартным определением интерфейса, но конкретные возможности зависят от базовой модели:

  • Вызов инструментов: Требуется, чтобы модель поддерживала вызов функций, и формат определения инструмента соответствовал требованиям модели
  • Структурированный вывод: Требуется, чтобы модель поддерживала режим JSON или JSON Schema
  • Визуальный ввод: Требуется, чтобы модель поддерживала изображения или мультимодальный ввод
  • Использование при потоковой передаче: Требуется, чтобы модель и канал поддерживали возврат использования токенов в потоковом режиме

Если запрос включает параметры, которые модель не поддерживает, поведение зависит от типа параметра:

  • Игнорируемые параметры (такие как frequency_penalty) будут тихо проигнорированы
  • Критические параметры (такие как tools) могут вызвать ошибки

В продакшн рекомендуется фиксировать ID моделей и подготовить резервные стратегии для критических бизнес-потоков.

Валидация параметров и сообщения об ошибках

Section titled “Валидация параметров и сообщения об ошибках”

RouteAPI выполняет базовую валидацию параметров запроса, например:

  • Отсутствующие обязательные параметры (такие как model, messages)
  • Неправильные типы параметров (такие как передача строки для temperature)
  • Значения параметров вне диапазона (такие как temperature: 3)

При сбое валидации возвращается 400 Bad Request с подробной информацией об ошибке. Если запрос проходит валидацию RouteAPI, но отклоняется вышестоящей моделью, возвращается 500 или 502 вместе с исходным сообщением об ошибке от вышестоящего источника.

Соображения при миграции между моделями

Section titled “Соображения при миграции между моделями”

При переключении с одной модели на другую, даже если обе используют протокол, совместимый с OpenAI, необходимо обратить внимание на следующие моменты:

  1. Длина контекста: Разные модели имеют разную максимальную длину контекста; слишком длинные запросы могут быть отклонены
  2. Формат вызова инструментов: Некоторые модели имеют более строгие требования к форматам описания инструментов
  3. Стиль вывода: Один и тот же промпт может производить разные стили вывода, длину и форматы в разных моделях
  4. Подсчет токенов: Разные модели имеют разные токенизаторы; один и тот же текст может иметь разное количество токенов
  5. Цена биллинга: Разные модели имеют разные удельные цены; переключение моделей может повлиять на затраты

Рекомендуется проверить полный рабочий процесс в тестовой среде перед переключением моделей в продакшн.

Эндпоинт /v1/models возвращает список моделей, доступных для текущей учетной записи, в формате, согласованном с официальным OpenAI API.

Terminal window
curl https://api.routeapi.ai/v1/models \
-H "Authorization: Bearer $ROUTEAPI_KEY"
{
"success": true,
"object": "list",
"data": [
{
"id": "gpt-5.5",
"object": "model",
"created": 1626777600,
"owned_by": "openai",
"supported_endpoint_types": ["openai", "openai-response"]
},
{
"id": "claude-sonnet-4-5",
"object": "model",
"created": 1626777600,
"owned_by": "anthropic",
"supported_endpoint_types": ["openai", "anthropic"]
}
]
}

Возвращаемый массив data содержит модели, доступные текущему токену, а не полный каталог платформы. Каждый объект модели включает:

  • id — ID модели, используйте это значение при выполнении запросов
  • object — Фиксированное значение "model"
  • owned_by — Тип канала, которому принадлежит модель; для собственных моделей платформы указывается custom
  • supported_endpoint_types — Расширенное поле RouteAPI, типы эндпоинтов, доступные для этой модели
  • created — Фиксированное значение-заполнитель 1626777600, это не реальное время появления модели, не используйте его для сортировки

Дополнительное поле success верхнего уровня — расширение RouteAPI; OpenAI SDK читают только data, поэтому разбор не нарушается. Порядок элементов в data не гарантируется стабильным.

Рекомендуется вызывать /v1/models один раз при запуске приложения, кэшировать список доступных моделей и избегать запросов при каждом запросе. Значения полей и правила фильтрации подробно описаны в Models.

Terminal window
curl https://api.routeapi.ai/v1/chat/completions \
-H "Authorization: Bearer $ROUTEAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.5",
"messages": [
{
"role": "system",
"content": "Вы строгий технический ассистент. Давайте краткие ответы."
},
{
"role": "user",
"content": "Пожалуйста, представьте RouteAPI одним предложением"
}
],
"temperature": 0.7
}'
import os
from openai import OpenAI
# Инициализация клиента
client = OpenAI(
api_key=os.environ["ROUTEAPI_KEY"],
base_url="https://api.routeapi.ai/v1"
)
# Базовый диалог
def basic_chat():
response = client.chat.completions.create(
model="gpt-5.5",
messages=[
{"role": "system", "content": "Вы строгий технический ассистент."},
{"role": "user", "content": "Пожалуйста, представьте RouteAPI одним предложением"}
],
temperature=0.7
)
print(response.choices[0].message.content)
print(f"Использование: {response.usage.total_tokens} токенов")
# Потоковый диалог
def streaming_chat():
stream = client.chat.completions.create(
model="gpt-5.5",
messages=[
{"role": "user", "content": "Объясните пошагово, что такое API-шлюз"}
],
stream=True,
stream_options={"include_usage": True}
)
for chunk in stream:
if chunk.choices:
delta = chunk.choices[0].delta
if delta.content:
print(delta.content, end="", flush=True)
# Последний фрагмент содержит использование
if hasattr(chunk, 'usage') and chunk.usage:
print(f"\nИспользование: {chunk.usage.total_tokens} токенов")
# Вызов инструментов
def tool_calling():
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Запросить текущую погоду для указанного города",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Название города, например, Москва"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["city"]
}
}
}
]
messages = [{"role": "user", "content": "Какая погода сейчас в Москве?"}]
# Первый раунд: модель запрашивает вызов инструмента
response = client.chat.completions.create(
model="gpt-5.5",
messages=messages,
tools=tools,
tool_choice="auto"
)
# Проверка на вызовы инструментов
if response.choices[0].message.tool_calls:
# Симуляция выполнения инструмента
tool_call = response.choices[0].message.tool_calls[0]
tool_result = "Москва, солнечно, температура 23 градуса Цельсия, влажность 45%."
# Построение запроса второго раунда
messages.append(response.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": tool_result
})
# Второй раунд: модель генерирует ответ на основе результата инструмента
final_response = client.chat.completions.create(
model="gpt-5.5",
messages=messages,
tools=tools
)
print(final_response.choices[0].message.content)
# Структурированный вывод
def structured_output():
response = client.chat.completions.create(
model="gpt-5.5",
messages=[
{"role": "user", "content": "Извлеките ключевую информацию из следующего текста: RouteAPI — это AI API-шлюз, поддерживающий OpenAI, Claude, Gemini и другие модели."}
],
response_format={
"type": "json_schema",
"json_schema": {
"name": "key_info",
"strict": True,
"schema": {
"type": "object",
"properties": {
"product_name": {"type": "string"},
"category": {"type": "string"},
"supported_models": {
"type": "array",
"items": {"type": "string"}
}
},
"required": ["product_name", "category", "supported_models"],
"additionalProperties": False
}
}
}
)
print(response.choices[0].message.content)
if __name__ == "__main__":
basic_chat()
print("\n" + "="*50 + "\n")
streaming_chat()
print("\n" + "="*50 + "\n")
tool_calling()
print("\n" + "="*50 + "\n")
structured_output()
import OpenAI from 'openai';
// Инициализация клиента
const client = new OpenAI({
apiKey: process.env.ROUTEAPI_KEY,
baseURL: 'https://api.routeapi.ai/v1'
});
// Базовый диалог
async function basicChat() {
const response = await client.chat.completions.create({
model: 'gpt-5.5',
messages: [
{ role: 'system', content: 'Вы строгий технический ассистент.' },
{ role: 'user', content: 'Пожалуйста, представьте RouteAPI одним предложением' }
],
temperature: 0.7
});
console.log(response.choices[0].message.content);
console.log(`Использование: ${response.usage.total_tokens} токенов`);
}
// Потоковый диалог
async function streamingChat() {
const stream = await client.chat.completions.create({
model: 'gpt-5.5',
messages: [
{ role: 'user', content: 'Объясните пошагово, что такое API-шлюз' }
],
stream: true,
stream_options: { include_usage: true }
});
for await (const chunk of stream) {
if (chunk.choices[0]?.delta?.content) {
process.stdout.write(chunk.choices[0].delta.content);
}
if (chunk.usage) {
console.log(`\nИспользование: ${chunk.usage.total_tokens} токенов`);
}
}
}
// Вызов инструментов
async function toolCalling() {
const tools = [
{
type: 'function',
function: {
name: 'get_weather',
description: 'Запросить текущую погоду для указанного города',
parameters: {
type: 'object',
properties: {
city: {
type: 'string',
description: 'Название города, например, Москва'
},
unit: {
type: 'string',
enum: ['celsius', 'fahrenheit']
}
},
required: ['city']
}
}
}
];
const messages = [
{ role: 'user', content: 'Какая погода сейчас в Москве?' }
];
// Первый раунд
const response = await client.chat.completions.create({
model: 'gpt-5.5',
messages: messages,
tools: tools,
tool_choice: 'auto'
});
// Проверка на вызовы инструментов
if (response.choices[0].message.tool_calls) {
const toolCall = response.choices[0].message.tool_calls[0];
const toolResult = 'Москва, солнечно, температура 23 градуса Цельсия, влажность 45%.';
// Второй раунд
messages.push(response.choices[0].message);
messages.push({
role: 'tool',
tool_call_id: toolCall.id,
content: toolResult
});
const finalResponse = await client.chat.completions.create({
model: 'gpt-5.5',
messages: messages,
tools: tools
});
console.log(finalResponse.choices[0].message.content);
}
}
// Структурированный вывод
async function structuredOutput() {
const response = await client.chat.completions.create({
model: 'gpt-5.5',
messages: [
{
role: 'user',
content: 'Извлеките ключевую информацию из следующего текста: RouteAPI — это AI API-шлюз, поддерживающий OpenAI, Claude, Gemini и другие модели.'
}
],
response_format: {
type: 'json_schema',
json_schema: {
name: 'key_info',
strict: true,
schema: {
type: 'object',
properties: {
product_name: { type: 'string' },
category: { type: 'string' },
supported_models: {
type: 'array',
items: { type: 'string' }
}
},
required: ['product_name', 'category', 'supported_models'],
additionalProperties: false
}
}
}
});
console.log(response.choices[0].message.content);
}
// Запуск примеров
async function main() {
await basicChat();
console.log('\n' + '='.repeat(50) + '\n');
await streamingChat();
console.log('\n' + '='.repeat(50) + '\n');
await toolCalling();
console.log('\n' + '='.repeat(50) + '\n');
await structuredOutput();
}
main().catch(console.error);

Рекомендации по интеграции

Section titled “Рекомендации по интеграции”
  • Отдавайте приоритет протоколу, совместимому с OpenAI, если ваш клиент, SDK или инструмент нативно поддерживает OpenAI API
  • Фиксируйте ID моделей, не полагайтесь на временные псевдонимы или отображаемые имена в продакшн
  • Записывайте метаданные запросов, включая ID запроса, ID модели, код статуса, задержку и использование токенов
  • Включите повторные попытки при сбоях, включите повторные попытки клиента и опции альтернативных моделей для основных бизнес-потоков
  • Проверяйте необязательные возможности, сначала протестируйте вызов инструментов, структурированный вывод, визуальный ввод и другие возможности в тестовой среде
  • Контролируйте расходы и квоты, регулярно проверяйте журналы использования и детали биллинга в консоли
  • Защищайте API Keys, инкапсулируйте RouteAPI токены на стороне сервера и избегайте прямого раскрытия ключей бизнес-фронтендам

Если клиент поддерживает только протокол Claude Messages или Google Gemini, используйте соответствующие эндпоинты протокола; обратитесь к документации Claude Messages и Gemini API.