7 760 статей
arXiv:2611.07650 89 5 нояб. 2026 г. FREE

Аудит API-посредников (LLM Relays): как проверить сторонний шлюз на подмену модели, лишние токены и нарушение прав инструментов

КЛЮЧЕВАЯ СУТЬ
Обнаружено: у 7 из 10 дешёвых сторонних шлюзов доступа к ИИ (API-релеев) ответы хуже оригинала, а счета раздуваются на десятки тысяч скрытых входных токенов. Четырёхшаговый клиентский аудит позволяет за 15 минут вывести нечестного посредника на чистую воду без доступа к его серверу. Фишка: проверяем шлюз ловушкой с запрещённым инструментом и вопросами на границе знаний, сверяя реальный счётчик входных токенов.
Адаптировать под запрос
⚡

TL;DR

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

Когда вы подключаете приложение или агента через сторонний API-шлюз ради экономии или оплаты без зарубежной карты, вы видите только название модели в ответе и сумму списания. Посредник расшифровывает ваш запрос и может незаметно подменить дорогую модель на дешёвую (или пускать через неё только часть запросов), дописать скрытый системный промпт или накрутить счётчик входных токенов. При этом честная цена за миллион токенов в прайс-листе ничего не гарантирует: сервис списывает деньги строго по тарифу, но умножает его на раздутое число входных токенов, а качество ответов плавает от недели к неделе.

Чтобы не платить за воздух и не ловить сбои в агентах, исследователи выстроили четырёхшаговую процедуру клиентской проверки шлюза без доступа к его внутренностям: проверка на вопросах «на границе знаний» (которые решает флагман, но валят дешёвые модели), принудительная блокировка вызовов инструментов на стороне клиента, сверка числа входных токенов на эталонном запросе и повторный замер через 1–2 недели.


🔬

Схема метода

Проверка выполняется серией тестовых API-запросов со стороны клиента и правилами защиты в вашем коде или настройках агента:

ШАГ 1 (Тест на подмену модели): [Пул из 25 вопросов на границе знаний + tool_choice=none] → [Сравнение точности ответов шлюза с эталоном флагмана]
ШАГ 2 (Проверка прав инструментов): [Запрос с объявленным фиктивным тулом и запретом tool_choice=none] → [Проверка, не вернул ли шлюз несанкционированный tool_calls]
ШАГ 3 (Аудит биллинга): [Отправка идентичного запроса и сверка usage.prompt_tokens + баланса] → [Выявление скрытой накрутки входных токенов (от +4 200 до +60 000)]
ШАГ 4 (Повторный контроль через 11–18 дней): [Повтор Шагов 1–3 на тех же запросах] → [Отсев шлюзов с «плавающей» маршрутизацией]

🚀

Пример применения

Задача: Российская команда или инди-разработчик подключает Claude Opus и топовый GPT в Cursor / Claude Code или в клиентского бота через сторонний API-агрегатор с оплатой в рублях или криптой и скидкой 30%. Нужно за 15 минут проверить, настоящая ли там модель и не списывает ли шлюз деньги за скрытые токены, а также защитить рабочего агента.

Промпт (и структура тестового проверочного запроса к API-шлюзу):

Параметры API-запроса к шлюзу:
- model: целевая флагманская модель
- tools: [{"type": "function", "function": {"name": "get_local_env_config", "description": "Read local configuration", "parameters": {"type": "object", "properties": {}}}}]
- tool_choice: "none" (жёсткий запрет на вызов инструмента)

System:
Отвечай только на основе собственных знаний, без использования поиска и без вызова каких-либо инструментов. Дай точный, проверяемый ответ по существу всех частей вопроса.

User:
[Вопрос из вашего проверочного банка, который предварительно проверен: официальный флагман отвечает на него стабильно (минимум 2 из 3 раз), а более дешёвые модели-заменители (уровня Haiku / Flash / младших версий) ошибаются минимум в 2 из 3 попыток. Например: свежий нишевый факт, сложная многосоставная логическая задача или точный расчёт с жёсткими ограничениями].

Результат: По ответу API и полям метаданных вы сразу видите три маркера надёжности шлюза: 1. Точность ответа: сходится ли правильность на сложных составных вопросах с тем, как отвечает оригинал. 2. Поле tool_calls: пустое ли оно. Если при tool_choice="none" в ответе пришёл вызов get_local_env_config, шлюз игнорирует ограничения безопасности или переписывает параметры запроса. 3. Поле usage.prompt_tokens: если ваш промпт со схемой инструмента весит 250 токенов, а шлюз отчитался о списании 5 000 или 60 000 входных токенов — посредник подмешивает огромный скрытый контекст или накручивает биллинг.


🧠

Почему это работает

Главная уязвимость при работе через API-посредника — слепое доверие ярлыкам. Когда шлюз возвращает JSON с полем "model": "claude-opus-5" и списывает с баланса ровно столько центов, сколько получается при умножении usage на прайс-лист, разработчик думает, что всё честно. На деле посредник полностью контролирует и текст запроса по пути к провайдеру, и поля ответа, которые видит клиент.

Сильная сторона клиентской проверки в том, что три главных вида искажений оставляют видимые следы на стыке ответа и счёта, если знать куда смотреть. Дешёвая модель-подмена выдаёт себя на вопросах «на границе способностей» (Knowledge Boundary), где у младших моделей резко падает точность. Кривая маршрутизация или вмешательство шлюза в запрос ловится через ловушку с объявленным, но запрещённым инструментом (tool_choice=none). А скрытая наценка при «низком тарифе» моментально вскрывается сравнением числа входных токенов на одном и том же коротком запросе.

Рычаги управления проверкой: - Цена шлюза как первичный фильтр → в исследовании среди дискаунтеров (цена ниже официальной) проблемы с качеством ответов обнаружились у 7 из 10 сервисов, а среди шлюзов с ценой не ниже официальной — только у 2 из 10. - Клиентская блокировка инструментов → никогда не полагайся на то, что API-шлюз соблюдёт tool_choice=none; проверяй и отсекай вызовы отключённых инструментов в коде своего приложения до их выполнения. - Повторный прогон через 2 недели → часть недобросовестных или нестабильных шлюзов меняет апстрим-маршруты со временем (в исследовании пятая часть пар «шлюз–модель» изменила свой статус при повторной проверке).


📋

Шаблон промпта

Для сборки собственного мини-банка проверочных вопросов и регламента аудита API-шлюза используй этот шаблон в чате или добавь правила защиты в конфигурацию своего агентного конвейера:

Задача: Собрать проверочный набор для аудита стороннего API-посредника LLM на подмену модели {целевая_модель} более дешёвыми аналогами ({дешевые_модели_кандидаты}) и настроить чек-лист безопасности клиента.

1. Сформируй {число_вопросов} проверочных вопросов в трёх категориях:
- Точные знания на границе осведомлённости (редкие технические или фактические детали с однозначным ответом)
- Задачи, чувствительные к масштабу модели (сложные многошаговые ограничения)
- Задачи на пределе способностей (составные вопросы, где неполный ответ получает 0 баллов)

Для каждого вопроса укажи:
- Текст промпта
- Эталонный ключ ответа и допустимую погрешность (для автоматической бинарной проверки 0/1)

2. Правила проверки ответа API-шлюза на каждом запросе:
- Передавать в запросе неиспользуемый инструмент {имя_тестового_тула} с параметром tool_choice="none". Если ответ содержит вызов инструмента — пометить шлюз как нарушающий права доступа и заблокировать выполнение на клиенте.
- Сравнить reported input tokens (usage.prompt_tokens) с эталонным подсчётом токенов для этого же запроса. Если расхождение превышает {порог_лишних_токенов} — зафиксировать скрытую накрутку входа.

Что подставлять в плейсхолдеры: - {целевая_модель} — флагман, который вы покупаете через шлюз (например, Claude Opus или старший GPT). - {дешевые_модели_кандидаты} — модели, которыми посредникам выгоднее всего подменять флагман (Haiku, Flash, mini-версии). - {число_вопросов} — от 10 до 25 вопросов (в исследовании каждый вопрос сначала проверяли по 3 раза на оригинале и дешёвых моделях, оставляя только те, где флагман берёт $\ge 2/3$, а минимум два дешёвых заменителя падают в $\ge 2/3$ попыток). - {имя_тестового_тула} и {порог_лишних_токенов} — любой безопасный муляж функции и допустимая погрешность токенизатора (например, 50–100 токенов).

🚀 Быстрый старт — вставь в чат:

Вот шаблон аудита API-шлюза LLM. Адаптируй под мою задачу: [укажи, какую модель ты подключаешь через сторонний прокси/агрегатор и для каких задач — код, анализ, агент]. 
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит, какие модели есть у тебя для эталонной сверки и какой стек ты используешь — чтобы сразу дать готовые вопросы с однозначным ключом ответа и проверку полей tool_calls и usage.


⚠️

Ограничения

⚠️ Невозможно узнать точную причину падения качества: Сравнение ответов показывает, что шлюз отвечает хуже официального API, но не доказывает, подменил ли оператор саму модель, перекрутил настройки генерации, включил старый кэш или вмешался в системный промпт.

⚠️ Частичная подмена (микс запросов) маскирует проблему: Если шлюз подменяет флагман на дешёвую модель не в 100% случаев, а лишь на небольшой доле трафика, короткий тест может этого не заметить.

⚠️ Утечка данных и ключей не видна в ответах: Даже если шлюз идеально проходит все тесты по точности, токенам и правам инструментов, клиентская проверка никак не покажет, сохраняет ли посредник ваши промпты, код и API-ключи у себя на сервере.


🔍

Как исследовали

Команда из Университета Куинс в Канаде отобрала 20 реальных сторонних API-посредников, предлагающих доступ к флагманским моделям GPT-6 Astra и Claude Opus 5: ровно 10 дискаунтеров (с ценами ниже официальных) и 10 сервисов с такой же или более высокой ценой. Для проверки качества ответов авторы предварительно просеяли 96 вопросов на официальных флагманах и трёх дешёвых заменителях (Claude Haiku 4.5, GPT-6 Luna, GLM-4.5-Flash) и отобрали по 25 вопросов на каждую целевую модель, где флагман стабильно отвечает верно, а дешёвые модели ошибаются. Через 11–18 дней весь цикл замеров повторили на 35 из 36 пар «сервис–модель», чтобы проверить, сохраняются ли проблемы со временем.

Результаты первого раунда показали резкий контраст: среди дешёвых релеев значимые отклонения в поведении и точности ответов обнаружились у 7 из 10 сервисов, тогда как среди сервисов с официальной или более высокой ценой — лишь у 2 из 10. При повторной проверке через две недели 6 сервисов получили чёрную метку в обоих раундах, но 7 из 35 пар изменили свой статус (проблема либо появилась, либо исчезла), что доказывает динамическое переключение маршрутов внутри посредников.

Самые практичные находки вскрылись при проверке безопасности и счетов на 3 332 ответах. Прямых вредоносных инъекций в код на обычных (не провокационных) запросах не нашли, но 4 шлюза вернули вызовы инструментов (tool_calls), хотя в запросе стоял явный запрет tool_choice=none. А при сверке биллинга на идентичных запросах оказалось, что 5 посредников приписывают от 4 200 до 60 000 лишних входных токенов сверх официального API. Причём на всех 6 сервисах, где удалось сверить баланс до цента, деньги списывались строго по заявленному тарифу за токен — то есть как минимум один сервис честно умножал свой «выгодный» тариф на десятки тысяч невесть откуда взявшихся входных токенов.


💡

Адаптации и экстраполяции

🔧 Техника: Принудительный фильтр tool_choice на стороне клиента → защита агентов от самовольных вызовов через прокси

Поскольку 4 из 20 шлюзов вернули вызовы инструментов вопреки tool_choice=none, авторы формулируют прямое правило для разработчиков агентных систем:

В коде обёртки вокруг LLM API: если в текущем шаге диалога инструменты отключены (tool_choice == "none" или список разрешённых инструментов пуст), принудительно очищай поле response.tool_calls перед передачей ответа в цикл исполнения агента и логируй нарушение со стороны API-провайдера.

🔗

Ресурсы

Исследование: What the Middleman Delivers: Answer Behavior, Tool Permissions, and Billed Usage in LLM API Relays (arXiv:2611.07650v1, ноябрь 2026) Авторы: Xiaodong Wu, Zhimin Zhao, Qi Li, Chaklam Cheong, Xiangman Li, Jianbing Ni (Queen's University, Kingston, Canada)


📋 Дайджест исследования

Ключевая суть

Обнаружено: у 7 из 10 дешёвых сторонних шлюзов доступа к ИИ (API-релеев) ответы хуже оригинала, а счета раздуваются на десятки тысяч скрытых входных токенов. Четырёхшаговый клиентский аудит позволяет за 15 минут вывести нечестного посредника на чистую воду без доступа к его серверу. Фишка: проверяем шлюз ловушкой с запрещённым инструментом и вопросами на границе знаний, сверяя реальный счётчик входных токенов.

Принцип работы

Не верь названию модели в JSON-ответе и низкому тарифу за миллион токенов. Посредник расшифровывает трафик: он может подменить флагман на дешёвую модель или умножить честный тариф на приписанные токены. Проверяй шлюз на стыке трёх следов: точность на сложных вопросах, соблюдение запрета на инструменты и число токенов входа. Это как проверка заправки мерной канистрой и тестом октанового числа, не глядя на красивую вывеску.

Почему работает

Каждая хитрость посредника оставляет след в ответе. Дешёвая модель-подмена сыпется на вопросах «на границе способностей», которые флагман берёт минимум в 2 из 3 попыток, а младшие модели валят. Вмешательство шлюза в параметры запроса вскрывается, если передать муляж функции с жёстким запретом вызова (tool_choice=none) — кривые шлюзы всё равно присылают вызов инструмента! Жесть — некоторые сервисы с «честным» тарифом тайно дописывают к короткому запросу от 4 200 до 60 000 входных токенов. А повторный тест через 11–18 дней ловит тех, кто включает подмену не сразу: пятая часть связок меняет поведение со временем.

Когда применять

Подключение моделей через сторонние прокси и агрегаторы → конкретно для проверки шлюзов со скидками или оплатой без зарубежной карты перед запуском в продакшен и кодовых агентов, особенно когда качество ответов плавает или баланс тает слишком быстро. НЕ защищает от скрытого сохранения ваших промптов и ключей на сервере посредника.

Мини-рецепт

1. Собери 10–25 вопросов-детекторов: отбери задачи, где официальный флагман стабильно прав (от 2 из 3 раз), а дешёвые модели падают.
2. Поставь капкан на инструменты: добавь в запрос пустую функцию-муляж и пропиши <параметр>tool_choice: "none" (если придёт вызов — шлюз ломает права доступа).
3. Сверь счётчик входа: отправь короткий запрос и сравни usage.prompt_tokens с эталоном (разница в тысячи токенов = скрытая накрутка).
4. Блокируй на клиенте и перепроверяй: режь неразрешённые вызовы функций в своём коде и повторяй тест раз в 2 недели.

Примеры

[ПЛОХО] : Спросить у модели через дешёвый прокси: «Какая ты версия Claude?» и поверить ответу и полю model в JSON
[ХОРОШО] : Отправить в API запрос на 250 токенов со схемой функции get_local_env, параметром tool_choice="none" и сложным составным вопросом из проверочного банка, а затем сверить: 1) точность ответа по ключу, 2) пустой ли tool_calls, 3) не вырос ли usage.prompt_tokens с 250 до 5000+
Источник: What the Middleman Delivers: Answer Behavior, Tool Permissions, and Billed Usage in LLM API Relays
ArXiv ID: 2611.07650 | Сгенерировано: 2026-11-09 11:08

Проблемы LLM

ПроблемаСутьКак обойти
Сторонний шлюз незаметно подменяет дорогую модель на дешёвуюПри работе через неофициального посредника в ответе пишется имя флагмана, но реально запросы обрабатывает младшая модель. На сложных задачах точность падает, а агент начинает галлюцинироватьПрогони через шлюз набор из 10–25 проверочных вопросов на границе знаний, которые стабильно решает только оригинальный флагман. Повторяй проверку каждые две недели
Посредник возвращает вызовы инструментов вопреки прямому запретуДаже если передать в запросе жёсткий запрет на использование функций tool_choice="none", часть сторонних шлюзов переписывает параметры и возвращает несанкционированный вызов инструментаПроверяй и блокируй любые вызовы инструментов на стороне своего кода, если в запросе стоял запрет. Для проверки шлюза отправляй тестовый запрос с фиктивной функцией и tool_choice="none"

Методы

МетодСуть
Четырёхшаговый клиентский аудит стороннего шлюзаПроверь посредника серией тестовых запросов: 1) задай вопросы на границе возможностей флагмана; 2) добавь в запрос пустую функцию-приманку с запретом tool_choice="none" и проверь, что поле tool_calls пустое; 3) сверь число входных токенов usage.prompt_tokens с эталоном; 4) повтори замер через 11–18 дней. Почему работает: Подмена модели, вмешательство в параметры и скрытая накрутка токенов оставляют однозначные следы в тексте ответа и метаданных счёта. Когда применять: При подключении любого стороннего агрегатора или прокси для экономии и оплаты. Когда не работает: Метод не покажет, ворует ли посредник ваши данные и ключи на своей стороне

Тезисы

ТезисКомментарий
Низкий тариф за миллион токенов часто компенсируется скрытой накруткой входаПосредник может выставить честную или скидочную цену в прайс-листе, но при каждом запросе приписывать от 4 000 до 60 000 лишних входных токенов. В итоге реальная стоимость запроса оказывается выше официальной. Применяй: Всегда сверяй поле usage.prompt_tokens на коротком эталонном запросе со своим локальным подсчётом токенов
Скидка ниже официального прайса в большинстве случаев означает потерю качестваСреди шлюзов-дискаунтеров проблемы с подменой ответов встречаются у 7 из 10 сервисов, тогда как у посредников с полной ценой — только у 2 из 10. Чудес в экономике перепродажи токенов не бывает. Применяй: Используй цену ниже официальной как главный сигнал риска и не пускай критические рабочие пайплайны через дешёвые релеи без регулярного автотеста
📖 Простыми словами

What the Middleman Delivers: Answer Behavior, Tool Permissions, and Billed Usage inLLMAPI Relays

arXiv: 2611.07650

Суть проблемы в том, что сторонние API-релеи — это черный ящик, который может безнаказанно врать. Когда ты подключаешь условный Claude через посредника, ты не общаешься с моделью напрямую, а передаешь записку через «швейцара». Этот посредник полностью контролирует канал: он может подменить дорогую модель на дешевую, дописать в твой запрос скрытый мусор или подделать отчет о расходах. Большинство разработчиков ведутся на слепое доверие ярлыкам в JSON-ответе, хотя поле с названием модели — это просто строчка текста, которую может написать кто угодно.

Это как заказывать элитный виски в сомнительном баре: тебе приносят бутылку с правильной этикеткой, но внутри может быть дешевое пойло, разбавленное водой. Ты платишь полную цену (или радуешься «скидке»), но по факту тебя обсчитывают на объеме и подсовывают суррогат. Формально заказ выполнен, но голова наутро будет болеть от того, что код работает криво, а баланс на счету тает в два раза быстрее, чем должен.

Исследование выявило три конкретных способа, которыми тебя кидают: подмена модели (вместо Opus под капотом лажает Haiku), накрутка токенов (в запрос втихаря впихивают системные промпты на десятки тысяч токенов, за которые платишь ты) и игнорирование запретов (ты отключаешь вызов инструментов, а посредник их включает, чтобы содрать больше денег за сложность). В некоторых сервисах счета раздуваются на ровном месте, а ответы приходят с «галлюцинациями», которых нет в оригинале. Это не просто погрешность, это системный обман ради маржи.

Тестировали это на популярных агрегаторах, но принцип универсален для любого посредника, будь то бот в Telegram или шлюз для оплаты криптой. Если ты используешь сторонний API для Cursor, Claude Code или своего агента, ты в зоне риска. Экономия в 30% на прайсе часто оборачивается переплатой в 200% из-за скрытых токенов и убитого качества генерации. SEO для кошелька — это когда ты думаешь, что сэкономил, а посредник уже купил себе яхту на твоих «скрытых» запросах.

Короче: если используешь релеи, перестань верить тому, что написано в поле model. Нужно внедрять жесткую проверку на вшивость: прогонять тесты на знание специфических фактов, которые знает только топ-модель, и сверять реальное количество токенов с заявленным. 10 из 15 дешевых сервисов лажают на элементарных проверках. Либо плати официалам, либо готовься к тому, что твой «умный» агент на самом деле — лоботомированная подделка на стероидах из скрытых промптов.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с