Не переписывайте код: меняйте base_url и ключ.
Код OpenAI и Anthropic входит в одну точку: те же поля, тот же стриминг, те же ошибки в формате вашей библиотеки — openai-SDK и anthropic-SDK работают как есть. Меняются адрес и имя ключа в заголовке; не меняются ваша логика, оркестраторы и библиотеки.
| Формат | Endpoint | Авторизация | Стриминг | Batch |
|---|---|---|---|---|
| OpenAI | POST /v1/chat/completions, /v1/embeddings, /v1/images/generations, /v1/audio/speech, /v1/audio/transcriptions, GET /v1/models | Authorization: Bearer <key> | SSE-чанки choices | POST /v1/batches, вход JSONL-файлом |
| Anthropic Messages | POST /v1/messages | x-api-key: <key> + обязательный anthropic-version: 2023-06-01, anthropic-beta pass-through | SSE-события message_start → content_block_delta → message_stop | POST /v1/messages/batches, вход массивом requests |
Одно значение ключа ruslo-sk-… на оба формата. Баланс, лимиты и аудит-лог общие; статистика разложена по семействам форматов фильтром.
openai-python
from openai import OpenAI
client = OpenAI(
base_url="https://api.farvater.copul4.com/v1",
api_key=os.environ["RUSLO_API_KEY"],
)
# принимаем и OPENAI_API_KEY / OPENAI_BASE_URLanthropic-python
from anthropic import Anthropic
client = Anthropic(
base_url="https://api.farvater.copul4.com", # без /v1:
# клиент сам добавит /v1/messages
api_key=os.environ["RUSLO_API_KEY"], # уйдёт в x-api-key
)Слева — код в формате OpenAI, справа — в формате Anthropic. В обоих случаях изменение одно: адрес и переменная ключа.
JSONL вечером — результаты утром: единицы за полцены. Batch-задачи обоих форматов — −50% к цене единиц, окно до 24 часов, строки с ошибками не тарифицируются.
Оба формата и batch живут в одном периметре: лимиты ключа, аудит-лог и журнал запросов общие; фильтр по семейству формата — в статистике кабинета и в CSV-выгрузке.
мой код написан под anthropic-SDK — он заработает у вас без переписывания или придётся всё портировать на OpenAI?
Заработает без переписывания: /v1/messages принимает нативный формат, включая system отдельным полем и content-блоки. SDK менять не нужно: только base_url и ключ.
какие заголовки и ключи: x-api-key и anthropic-version поддерживаются? стриминг есть?
Поддерживаются как у вендора: x-api-key для авторизации, anthropic-version: 2023-06-01 обязателен, anthropic-beta пропускаем как есть. Стриминг нативный, порядок SSE-событий — в справочнике D3.
у меня старый скрипт под Anthropic-формат ещё от прямого подключения — что менять кроме base_url?
Ничего: ключ подставляете свой ruslo-sk-…, anthropic-version тот же. Если в скрипте зашит адрес вендора — правится одна строка.
ключ один на оба формата или мне создавать два и путаться?
Один: значение работает в Authorization: Bearer и в x-api-key. Список ключей не делится по форматам — делится по проектам и средам.
оба формата в одном периметре аудита: логи, лимиты и статистика общие или раздельные по форматам?
Общие: один аудит-лог и одни лимиты на ключ; статистика даёт фильтр по семейству формата и общий CSV-экспорт.
Проверьте свой код на своём ключе: оба quickstart в docs — OpenAI и Anthropic, по пять минут каждый.