API, совместимый с OpenAI

Используйте модели Claude и GPT через один эндпоинт в стиле OpenAI.

BASE URLhttps://api.apivai.com/v1

APIVAI использует HTTP-формат OpenAI, поэтому инструменты и SDK, поддерживающие собственный base URL, работают без дополнительного кода интеграции. Замените base URL и ключ — остальной код останется прежним.

Эндпоинты

Метод и путьНазначениеПримечания
GET /v1/modelsСписок моделейВызовите его, прежде чем прописывать имя модели в коде.
POST /v1/chat/completionsОтветы в чате (chat completions)Принимает массив messages в стиле OpenAI.
POST /v1/chat/completionsПотоковый чатДобавьте "stream": true, чтобы получать server-sent events.
POST /v1/responsesResponses APIИспользуется Codex CLI.

Заголовки

Authorization: Bearer YOUR_APIVAI_API_KEY Content-Type: application/json

Быстрая проверка через cURL

# 1) List the models available to your key curl https://api.apivai.com/v1/models \ -H "Authorization: Bearer $APIVAI_API_KEY" # 2) Send a minimal chat request curl https://api.apivai.com/v1/chat/completions \ -H "Authorization: Bearer $APIVAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "YOUR_MODEL_NAME", "messages": [{"role": "user", "content": "Return one short sentence."}] }'

OpenAI SDK

Python

from openai import OpenAI client = OpenAI( api_key="YOUR_APIVAI_API_KEY", base_url="https://api.apivai.com/v1", ) resp = client.chat.completions.create( model="YOUR_MODEL_NAME", messages=[ {"role": "system", "content": "You are a concise technical assistant."}, {"role": "user", "content": "Explain API gateways in 2 sentences."}, ], temperature=0.2, ) print(resp.choices[0].message.content)

Node.js

import OpenAI from "openai"; const client = new OpenAI({ apiKey: process.env.APIVAI_API_KEY, baseURL: "https://api.apivai.com/v1", }); const resp = await client.chat.completions.create({ model: "YOUR_MODEL_NAME", messages: [{ role: "user", content: "Explain API gateways in 2 sentences." }], }); console.log(resp.choices[0]?.message?.content);

Потоковый вывод

Установите stream в true и читайте тело ответа по частям. Фрагменты приходят строками, начинающимися с "data:"; поток завершается сообщением [DONE] или закрытием соединения.

stream = client.chat.completions.create( model="YOUR_MODEL_NAME", messages=[{"role": "user", "content": "Write a short deployment checklist."}], stream=True, ) for chunk in stream: if chunk.choices and chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="")

Вызов функций

Работает стандартная двухшаговая схема: модель возвращает вызов инструмента, вы выполняете его и отправляете результат обратно, чтобы получить итоговый ответ.

import json TOOLS = [{ "type": "function", "function": { "name": "get_weather", "description": "Get the current weather for a city.", "parameters": { "type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"], }, }, }] messages = [{"role": "user", "content": "What's the weather in Tokyo?"}] first = client.chat.completions.create(model=MODEL, messages=messages, tools=TOOLS) choice = first.choices[0].message messages.append(choice) for call in choice.tool_calls or []: args = json.loads(call.function.arguments) messages.append({ "role": "tool", "tool_call_id": call.id, "content": json.dumps({"city": args["city"], "temp_c": 21}), }) final = client.chat.completions.create(model=MODEL, messages=messages, tools=TOOLS) print(final.choices[0].message.content)

Фреймворки

LangChain

from langchain_openai import ChatOpenAI llm = ChatOpenAI( base_url="https://api.apivai.com/v1", api_key="YOUR_APIVAI_API_KEY", model="YOUR_MODEL_NAME", ) print(llm.invoke("Explain API gateways in 2 sentences.").content)

LlamaIndex

from llama_index.llms.openai_like import OpenAILike llm = OpenAILike( model="YOUR_MODEL_NAME", api_base="https://api.apivai.com/v1", api_key="YOUR_APIVAI_API_KEY", is_chat_model=True, ) print(llm.complete("Explain API gateways in 2 sentences."))

Выбор модели

  1. Вызовите GET /v1/models с вашим API-ключом.
  2. Выберите ID модели из ответа.
  3. Отправьте с ней один небольшой запрос.
  4. Только после этого укажите имя модели в конфигурации приложения.

Что значит «совместимый»

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