Подключение к Claude, GPT и Gemini через конечные точки, совместимые с OpenAI
Узнайте, какие слои Anthropic и Gemini совместимы с OpenAI, где они незаметно удаляют определённые функции, и когда имеет смысл направлять все три через один шлюз.
Источники: Claude, GPT, and Gemini via One OpenAI-Compatible API
Компании Anthropic и Google теперь предлагают конечные точки, совместимые с OpenAI, поэтому для работы с Claude или Gemini достаточно внести изменения в несколько строк кода существующего SDK OpenAI вместо полной переработки интеграции. Самой сложной частью является не первый запрос, а понимание того, какие функции скрыто игнорирует каждый слой совместимости, и какие затраты связаны с одновременным использованием нескольких таких слоев. Ниже приведена точная настройка клиента для каждого поставщика, задокументированные недостатки, важные для производственных агентов, а также компромиссы, связанные с объединением всех трех решений под один базовый URL и ключ.
Что на самом деле обещает «совместимость с OpenAI»
API, совместимый с OpenAI, — это любой конечный пункт, принимающий формат запросов, который отправляет SDK OpenAI: массив messages, те же флаги потоковой передачи и та же схема вызова инструментов. Поскольку этот формат много лет назад стал фактическим стандартом, большинство поставщиков моделей теперь предоставляют его какую-то версию, что позволяет командам пробовать другие модели без замены кода клиента.
Однако совместимость не означает идентичность. Форма запроса совпадает, но семантика отдельных параметров может различаться, а неподдерживаемые опции часто принимаются и затем игнорируются вместо того, чтобы отклоняться. Именно такое поведение делает эти слои рискованными: ничего не срабатывает явно, поэтому отсутствие функции проявляется в ухудшенном результате, а не в ошибке.
Слой совместимости Anthropic
Документация Anthropic по совместимости OpenAI SDK представляет этот слой как средство для тестирования и сравнения возможностей моделей, а не как рекомендуемый вариант для производственного использования. В ней также перечислены конкретные ограничения:
- Флаг
strictдля вызова функций игнорируется, поэтому структура JSON запросов к инструментам не гарантированно соответствует указанной схеме. - Кэширование промптов недоступно через слой совместимости, хотя нативный API Anthropic его поддерживает.
- Все системные и сообщения разработчика объединяются в одно системное сообщение в начале разговора, поскольку Claude принимает только один начальный системный промпт.
Ни один из этих факторов не станет препятствием для быстрого эксперимента. Каждый из них может нарушить работу производственного агента, который зависит от совпадения аргументов инструмента со шаблоном, от кэширования для контроля задержек и затрат или от системных инструкций, вставляемых в процесс общения.
Слой совместимости Google
Решение от Google более полно сразу после установки. Согласно его документации Gemini об совместимости с OpenAI, стандартные функции завершения чата, потоковая передача данных и вызовы функций работают корректно. Однако Google также четко указывает, что не все опции, специфичные для того или иного поставщика, совместимы между этими двумя API, и рекомендует перейти на нативный API Gemini, как только возникает потребность в функциях, специфичных для Gemini.
Затраты на использование всех этих решений
Каждый слой сам по себе является разумной временной мерой для оценки одной модели. Если объединить все три поставщика в одно приложение, нагрузка увеличивается: три базовых URL-адреса, три API-ключа, три панели управления оплатой, три набора ограничений на количество запросов и три разных списка параметров, которые безвозвратно игнорируются, всё это ради поддержки кода, который выглядит одинаково для каждого поставщика.
Настройка SDK OpenAI под Claude
Чтобы переключить интеграцию SDK OpenAI на Claude, требуется внести три изменения: заменить базовый URL-адрес, API-ключ OpenAI на ключ Anthropic и указать имя модели Claude. Это быстрейший способ оценить Claude перед тем, как полностью перейти на нативный SDK Anthropic. Импорты остаются прежними:
import os
from openai import OpenAI
Клиент создается с использованием конечной точки Anthropic и ключа, зачитываемого из окружения; сам вызов представляет собой стандартное завершение чата. Обратите внимание, что в приведённом фрагменте отсутствует перенос строки между закрывающей скобкой клиента и строкой response =; при копировании разделите их на два отдельных оператора:
client = OpenAI(
api_key=os.environ.get("ANTHROPIC_API_KEY"),
base_url="https://api.anthropic.com/v1/",
)response = client.chat.completions.create(
model="claude-opus-5",
messages=[{"role": "user", "content": "Explain how AI works"}],
)
Для простого завершения чата это и есть вся процедура миграции. Всё, что зависит от вышеупомянутых особенностей, требует более тщательного подхода. Если ваше приложение зависит от строгих схем инструментов, кэширования промптов или полного расширенного результата обработки, используйте нативный API Anthropic для получения полноценных функций вместо его адаптации под OpenAI. Названия моделей, такие как те, что показаны, часто меняются, поэтому уточните текущий идентификатор в списке моделей провайдера.
Направление SDK OpenAI на Gemini
Версия Gemini того же механизма обмена данных направлена на конечную точку Google. Для этого требуется ключ API Gemini, который можно создать в Google AI Studio. Как и раньше, необходимо только стандартное импортирование данных через OpenAI:
from openai import OpenAI
Клиент использует ключ Gemini и базовый URL Google, совместимый с OpenAI; тело запроса остается неизменным. Здесь также отсутствует разрыв строки, а место для хранения ключа в жестко заданном виде лучше заменить на переменную окружения, как показано в примере с Claude:
client = OpenAI(
api_key="YOUR_GEMINI_API_KEY",
base_url="https://generativelanguage.googleapis.com/v1beta/openai/",
)response = client.chat.completions.create(
model="gemini-3.7-flash",
messages=[{"role": "user", "content": "Explain how AI works"}],
)
Как стриминг, так и вызов функций работают через эту конечную точку. Контроль процесса рассуждений в Gemini реализуется с помощью параметра reasoning_effort в OpenAI, однако это соответствие не всегда является точным и зависит от выбранной модели Gemini. Если вы хотите использовать новую функцию, предназначенную исключительно для Gemini, сразу после её выхода, использование нативного SDK остается более быстрым решением.
А что насчет самого GPT?
Собственный API OpenAI не требует слоя совместимости, поскольку он определяет формат, которого придерживаются все остальные. Это не решает проблему множества поставщиков, а лишь откладывает её. Код, написанный с учётом формата OpenAI, облегчает последующее добавление слоев от Anthropic и Google, но вам всё равно придётся использовать отдельные ключи, отдельные лимиты на количество запросов и учитывать особенности каждого поставщика.
Перенаправление всех моделей через один шлюз
Собственные слои ни одного из поставщиков не решают проблему множества поставщиков, поскольку каждый из них перенаправляет запросы только на свои собственные модели. Шлюз для LLM заполняет этот пробел: единый конечный пункт, совместимый с OpenAI, который перенаправляет запросы на Claude, GPT или Gemini в зависимости от указанной модели, так что вашему коду больше не нужно отслеживать, какие особенности принадлежат тому или иному поставщику.
Процесс миграции выглядит точно так же, как и в двух предыдущих случаях. В приведённом ниже примере используется конечная точка одного коммерческого шлюза; тот же принцип применим к любому шлюзу, совместимому с OpenAI. Формат импорта остаётся неизменным:
from openai import OpenAI
Теперь клиент указывает на базовый URL шлюза с помощью ключа шлюза, а имя модели определяет поставщика услуг. Как и раньше, необходимо добавить перенос строки перед response =:
client = OpenAI(
api_key="YOUR_SAYGM_API_KEY",
base_url="https://api.saygm.com/v1",
)response = client.chat.completions.create(
model="claude-opus-5",
messages=[{"role": "user", "content": "Explain how AI works"}],
)
Для смены поставщика достаточно изменить значение model на gpt-5.6-luna или gemini-3.7-flash; все остальные параметры остаются без изменений. Рассматривайте эти имена моделей как примеры, действительные на момент написания текста, и проверяйте каталог моделей шлюза для получения актуальных идентификаторов. Одна и та же конфигурация работает в инструментах для разработчиков, которые уже поддерживают настройки, совместимые с OpenAI, таких как Cursor, Cline, Claude Code и Vercel AI SDK: один базовый URL и один ключ позволяют получить доступ ко всем моделям, предлагаемым шлюзом, а не только к моделям конкретного поставщика. У каждого инструмента свои названия полей для базового URL и ключа, поэтому обращайтесь к документации шлюза по интеграции для получения точных настроек.
Что шлюз не меняет
Перенаправление через шлюз не устраняет ограничений, связанных с поведением компатибельности основного поставщика услуг. Отправка запросов к Claude в формате OpenAI через шлюз также не обеспечивает кэширования запросов или строгого соблюдения спецификаций; все вышеописанные ограничения продолжают действовать.
Шлюзы также становятся частью границ доверия, поскольку каждый запрос и ответ проходят через них. Некоторые поставщики рекламируют меры конфиденциальности, например обработку запросов в защищённых средах выполнения, подтверждённых аппаратным обеспечением, чтобы оператор шлюза не мог читать трафик. Такие гарантии касаются только шлюза; поставщик модели всё равно принимает и обрабатывает ваш запрос по собственным правилам. Оценивайте оба уровня отдельно и проверяйте заявления о защите на основе технической документации поставщика, а не его маркетинговых материалов.
Частые вопросы о миграции
Сохраняются ли функции, специфичные для Claude или Gemini, при использовании слоя, совместимого с OpenAI?
Только те функции, которые может преобразовать данный слой. Независимо от того, обращаетесь ли вы к собственному концепту совместимости поставщика или используете шлюз, всё, что он не может преобразовать, теряется. У Claude это кэширование запросов, обработка PDF и полный результат расширенного мышления; у Gemini — параметры рассуждений, специфичные для модели. Если вы зависите от этих функций, используйте нативный API для соответствующих сценариев.
Сколько стоит переход?
При использовании шлюза обычно взимается плата за токен, примерно как при прямом обращении к поставщику, но тарифы различаются в зависимости от модели и поставщика, к тому же некоторые шлюзы добавляют свою наценку. Перед переносом рабочего трафика уточните актуальные цены для конкретной модели.
Что происходит, если у поставщика сбой?
Это самый убедительный аргумент в пользу единого конечного точки. Шлюз, созданный для аварийного переключения, может перенаправить запросы на резервную модель без каких-либо изменений в коде приложения, тогда как три прямые интеграции каждая требуют собственной логики повторных попыток и резервного варианта. Имейте в виду, что резервная модель — это отдельная модель: промпты, настроенные для Claude, могут вести себя иначе в Gemini, а надежность вызова инструментов различается. Перед тем как полагаться на автоматическое переключение, протестируйте ваши критичные промпты на каждой модели из цепочки резервного варианта.
Выбор пути миграции
- Оценка дополнительного поставщика: используйте собственный конечный пункт, совместимый с OpenAI, у этого поставщика. Именно для этого он и предназначен, а настройка требует всего трех изменений.
Каким бы путем вы ни решили идти, храните базовый URL, ключи и названия моделей в конфигурации, а не в коде, и добавляйте тесты на интеграцию для проверки поведения, от которого зависит ваше приложение, например, соблюдения структуры вызовов инструментов. Таким образом, пропуск параметра останется незамеченным только в тестах, а не приведет к сбою в производстве.
Основные выводы
- Концовки, совместимые с OpenAI, соответствуют формату запроса, но не всем его аспектам; параметры, которые не поддерживаются, часто игнорируются без возникновения ошибки.
- Слой Anthropic игнорирует схемы инструментов режима
strict, не поддерживает кэширование промптов и объединяет системные сообщения; он описан как вариант для тестирования. - Слой Gemini хорошо справляется с чатом, стримингом и вызовами функций, но опции, специфичные для конкретных поставщиков, всё ещё требуют использования нативного API.
- Единый шлюз упрощает работу с ключами, оплатой и переключением на резервные решения между поставщиками, но унаследовывает все ограничения совместимости и добавляет ещё одну сторону в круг лиц, которым доверяете.