GPT-6 Astra у пяти зарубежных сторонних API-роутеров: сравнение ответов с официальным API

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

При работе с такими платформами возникает ключевой вопрос: совпадают ли их ответы на одну и ту же задачу с ответами официального API?

Я сравнил GPT-6 Astra у OrcaRouter, TeamoRouter, OpenRouter, Token Harbor и NaraRouter на 30 задачах с независимо проверяемыми ответами. Для каждой задачи сначала вызывался официальный API OpenAI, затем по очереди пять платформ и в конце ещё раз официальный API. Чтобы говорить о сопоставимом качестве в рамках этой проверки, все 30 ответов платформы должны совпасть с обоими официальными ответами. Тогда более низкая цена API имеет практический смысл.

Ниже я последовательно рассмотрю результаты проверки API каждой платформы, а затем разберу расхождения на конкретных задачах.

I. Методика: как сравнивались ответы

В качестве эталона для сравнения платформ я выбрал GPT-6 Astra — флагманскую модель OpenAI. Набор состоит из 30 англоязычных задач по трём фиксированным шаблонам, по 10 экземпляров каждого: подсчёт перестановок с ограничениями, трассировка состояния Python-кода и моделирование операций со шкафчиками. Во всех задачах требовалось ответить одним целым числом, что позволяет точно сравнивать итоговые ответы.

Каждый тип задач проверяет отдельный навык. В перестановках нужно одновременно учитывать соседство элементов, их порядок, фиксированные позиции и условия чётности для крайних цифр. В коде — отслеживать состояние множества и вычислять чередующуюся сумму элементов списка. В задачах со шкафчиками — выполнять переключения и присваивания в заданном порядке. Такие задачи позволяют обнаружить однозначные числовые расхождения. Для каждой задачи вызовы выполнялись в порядке, показанном на рис. 1. Порядок пяти роутеров перемешивался с заданным seed, чтобы одна и та же платформа не оказывалась постоянно первой или последней.

Рис. 1. Для каждой задачи получены 2 ответа официального API и 5 ответов роутеров. Для 30 задач это 210 записей: 60 официальных и 150 от роутеров. Схема показывает порядок сбора данных.
Рис. 1. Для каждой задачи получены 2 ответа официального API и 5 ответов роутеров. Для 30 задач это 210 записей: 60 официальных и 150 от роутеров. Схема показывает порядок сбора данных.

Запросы отправлялись через потоковый интерфейс Chat Completions. Клиент отправлял одно сообщение с ролью user, без сообщения с ролью system. Лимит вывода везде устанавливался равным 4096: для официального API использовался max_completion_tokens, для роутеров — max_tokens. Параметры temperature и reasoning_effort не передавались, поэтому на каждой стороне применялись значения по умолчанию.

Обработка результатов состояла из двух этапов: сначала проверялись полнота передачи и формат ответа, затем сравнивались целые числа. Если два официальных ответа различались, задача должна была попасть в отдельную категорию с нестабильным опорным ответом. Если они совпадали, ответ роутера сравнивался с этим значением и получал отметку «совпадение ответов» или «расхождение».

II. Результаты: реальные вызовы API пяти платформ

Ниже приведены конечные точки и идентификаторы моделей, которые фактически использовались в этом прогоне. Контрольные запросы к официальному API отправлялись на https://api.openai.com/v1/chat/completions; и в запросе, и в ответе идентификатором модели был gpt-6-astra.

OrcaRouter

Конечная точка: https://api.orcarouter.ai/v1/chat/completions. В запросе использовался идентификатор openai/gpt-6-astra, в ответе возвращался gpt-6-astra.

В каждом из трёх разделов — «Подсчёт перестановок», «Трассировка кода» и «Шкафчики» — 10/10 ответов совпали с обоими официальными ответами, всего 30/30.

OrcaRouter: OpenAI до, ответ платформы и OpenAI после для 30 задач этого прогона. Скриншот локального журнала эксперимента.
OrcaRouter: OpenAI до, ответ платформы и OpenAI после для 30 задач этого прогона. Скриншот локального журнала эксперимента.

TeamoRouter

Конечная точка: https://api.teamorouter.com/v1/chat/completions. И в запросе, и в ответе использовался идентификатор gpt-6-astra.

В каждом из трёх разделов — «Подсчёт перестановок», «Трассировка кода» и «Шкафчики» — 10/10 ответов совпали с обоими официальными ответами, всего 30/30.

TeamoRouter: OpenAI до, ответ платформы и OpenAI после для 30 задач этого прогона. Скриншот локального журнала эксперимента.
TeamoRouter: OpenAI до, ответ платформы и OpenAI после для 30 задач этого прогона. Скриншот локального журнала эксперимента.

OpenRouter

Конечная точка: https://openrouter.ai/api/v1/chat/completions. И в запросе, и в ответе использовался идентификатор openai/gpt-6-astra.

Все 30 ответов совпали с обоими официальными ответами для соответствующих задач, по 10/10 в каждом разделе.

OpenRouter: OpenAI до, ответ платформы и OpenAI после для 30 задач этого прогона. Скриншот локального журнала эксперимента.
OpenRouter: OpenAI до, ответ платформы и OpenAI после для 30 задач этого прогона. Скриншот локального журнала эксперимента.

Token Harbor

Конечная точка: https://tokenharbor.ai/v1/chat/completions. И в запросе, и в ответе использовался идентификатор gpt-6-astra. Клиент также отправлял заголовок X-TH-Cache-Control: force-refresh.

В каждом из трёх разделов 10/10 ответов совпали с обоими официальными ответами, всего 30/30.

Token Harbor: OpenAI до, ответ платформы и OpenAI после для 30 задач этого прогона. Скриншот локального журнала эксперимента.
Token Harbor: OpenAI до, ответ платформы и OpenAI после для 30 задач этого прогона. Скриншот локального журнала эксперимента.

NaraRouter

Конечная точка: https://router.bynara.id/v1/chat/completions. И в запросе, и в ответе использовался идентификатор gpt-6-astra.

Все 30 вызовов завершились успешно. В 25 случаях ответы совпали с обоими официальными ответами, в 5 обнаружены числовые расхождения. По разделам: «Подсчёт перестановок» — 6/10 совпадений, «Трассировка кода» — 9/10, «Шкафчики» — 10/10.

NaraRouter: сопоставление ответов для 30 задач этого прогона. Цветом выделены 5 числовых расхождений. Скриншот локального журнала эксперимента.
NaraRouter: сопоставление ответов для 30 задач этого прогона. Цветом выделены 5 числовых расхождений. Скриншот локального журнала эксперимента.

На рис. 2 показаны все 5 задач с расхождениями.

Рис. 2. Все 5 задач, в которых обнаружены расхождения у NaraRouter. В каждой из них оба официальных ответа совпали между собой и с локально рассчитанным правильным ответом.
Рис. 2. Все 5 задач, в которых обнаружены расхождения у NaraRouter. В каждой из них оба официальных ответа совпали между собой и с локально рассчитанным правильным ответом.

III. Пример расхождения 1: подсчёт перестановок

Рассмотрим core-permutation-008. В этой задаче нужно составить семизначный код, использовав каждую цифру от 1 до 7 ровно один раз. Ограничения: 1 стоит левее 5; 7 идёт непосредственно справа от 3; 6 занимает позицию 4; первая и последняя цифры чётные.

Официальный API до вызовов роутеров выдал 4, NaraRouter — 8, официальный API после — снова 4. Остальные четыре платформы также ответили 4. На рис. 3 приведены исходный текст задачи на английском языке, три исходных ответа, идентификаторы записей и префиксы хешей SHA256 файлов с необработанными ответами.

Рис. 3. Сопоставление исходных ответов по реальным API-записям.
Рис. 3. Сопоставление исходных ответов по реальным API-записям.

У этой задачи 4 решения, поэтому ответ NaraRouter (8) неверен.

IV. Пример расхождения 2: трассировка кода

В core-trace-007 передавалась приведённая ниже программа. Требовалось определить, какое целое число она напечатает.

def f(xs):
    out = []
    seen = set()
    for i, x in enumerate(xs):
        k = (x * 9 + i) % 7
        if k in seen:
            out.append(-x)
        else:
            seen.add(k)
            out.append(x + len(seen))
    return sum(out[::2]) - sum(out[1::2])

print(f([12, 6, 24, 13, 11, 20, 10, 2, 23, 4, 15, 17, 8]))

На каждой итерации программа сначала вычисляет k. Если такое значение уже встречалось, в список добавляется -x. Иначе значение сначала добавляется в множество, а в список записывается x + len(seen). Последовательное выполнение даёт:

[13, 8, 27, -13, 15, -20, -10, 7, -23, -4, -15, -17, 14]

При индексации с нуля сумма элементов с чётными индексами равна 21, а с нечётными — −39. Поэтому программа должна напечатать 21 - (-39) = 60. Оба официальных вызова и остальные четыре платформы вернули 60, NaraRouter — 83.

core-trace-007: OpenAI до — 60, NaraRouter — 83, OpenAI после — 60. Скриншот локального журнала исходных ответов.
core-trace-007: OpenAI до — 60, NaraRouter — 83, OpenAI после — 60. Скриншот локального журнала исходных ответов.

Сводные результаты и анализ

В ячейках на рис. 4 указаны число совпадений с обоими официальными ответами и общее число сопоставимых задач. Каждая платформа выполнила все 30 задач.

Рис. 4. Доля совпадений ответов платформ с официальными ответами: по 10 задач в каждом из трёх разделов.
Рис. 4. Доля совпадений ответов платформ с официальными ответами: по 10 задач в каждом из трёх разделов.

У NaraRouter расхождения обнаружены в четырёх задачах на перестановки и одной задаче на трассировку кода. В задачах со шкафчиками расхождений нет. У остальных четырёх платформ совпали 30/30 ответов.

Цена и совпадение ответов

Цены в таблице указаны в долларах за миллион токенов.

Платформа

Вход

Выход

В сравнении с официальным API OpenAI

Совпадение ответов с OpenAI

OpenAI (официальный API) [1]

$10.00

$50.00

База сравнения

Официальный эталон

OrcaRouter [2]

$10.00

$50.00

Та же цена

Совпадение (30/30) ✅

TeamoRouter [3]

$1.71

$8.55

Вход и выход дешевле на 82.9%

Совпадение (30/30) ✅

OpenRouter [4]

$10.00

$50.00

Та же цена

Совпадение (30/30) ✅

Token Harbor [5]

$10.00

$50.00

Та же цена

Совпадение (30/30) ✅

NaraRouter [6]

Около $1.41

Около $5.94

Вход дешевле примерно на 85.9%; Выход дешевле примерно на 88.1%

Есть различия (совпало 25/30) ❌

Исходные цены NaraRouter составляют Rp25,400 за миллион входных токенов и Rp106,999 за миллион выходных токенов; суммы в долларах взяты из пересчёта на странице платформы. Для TeamoRouter указаны актуальные цены со скидкой на момент проверки.

Среди 5 рассмотренных зарубежных платформ у трёх стоимость токенов совпадает с официальными тарифами OpenAI. Только у TeamoRouter и NaraRouter цены на входные и выходные токены ниже, чем у OpenAI. При этом ответы NaraRouter отличались от ответов официального API в 5/30 задачах, а ответы TeamoRouter совпали с ними в 30/30 задачах.

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

Источники цен: [1] Официальная страница модели OpenAI; [2] Страница модели на OrcaRouter; [3] Актуальные тарифы TeamoRouter; [4] Страница модели на OpenRouter; [5] Страница модели на Token Harbor; [6] Страница тарифов NaraRouter.

Источник: https://habr.com/ru/articles/1098136/


Интересные статьи

Интересные статьи

Привет, Хабр! Меня зовут Леонид, я ведущий PHP-разработчик в НЛМК ИТ.Наша команда отвечает за сервисы HR-направления на едином корпоративном портале (далее – ЕКП), а также занимается развитием и подде...
Есть у меня образ, который родился в одной из бесед с коллегами. Ты — партизан, тащащий через лес на себе тяжеленного андроида с деменцией. В одни моменты он&nb...
В рамках одной из внутренних задач коллега занимался исследованием того, как Bitrix измеряет общую производительность системы. Пользователи часто ссылаются на эти цифры как на аргумент в пользу «медле...
Снятие с продаж флагманского терминала Yealink M800 компенсируется вендором за счет появления на рынке нового терминала Yealink M500. На первый взгляд, учитывая идентичный форм-фактор и схожий функцио...
На форуме разработчиков Битрикс был опубликована запись о злоумышленниках, которые добавляют скрипты на страницы сайтов. Рекомендации, как переиграть негодяев, ниже.