API Relay Audit — локальный аудит прокси для LLM
📂 Исходный код на GitHubЛокальный инструмент для проверки сторонних прокси и шлюзов для LLM: находит скрытые инструкции в промптах, подмену модели, правку команд установки пакетов, странности в потоке SSE, утечки в ответах с ошибками и риски для кошельков Web3.
API Relay Audit: локальный аудит прокси для LLM
Если вы покупаете доступ к Claude или другим моделям у стороннего посредника, между вами и провайдером моделей появляется ещё одно звено. Оно видит каждый запрос и каждый ответ. Оно может дописать в промпт свои инструкции, выдать дешёвую модель вместо заявленной, обрезать контекст, поправить команду установки пакета или показать ваш ключ в тексте ошибки.
Проверить такого посредника на своей машине позволяет API Relay Audit. Это один Python-файл без внешних зависимостей. Он отправляет ключ API только на тот адрес прокси, который вы сами указали в командной строке.
Что проверяет инструмент
Инструмент смотрит, меняет ли прокси что-то на пути между вами и моделью. Есть четыре направления проверок:
- Безопасность промпта. Скрытая внедрённая инструкция, попытка извлечь системный промпт, переопределение инструкций, устойчивость к обходу ограничений.
- Целостность работы прокси. Обрезка контекста, подмена команд установки пакетов, утечки в ответах с ошибками, целостность потока.
- Идентичность модели. Утечки имён других моделей, сигналы подмены модели, поведение Claude-совместимых и OpenAI-совместимых прокси.
- Безопасность кошелька Web3. Проверки переводов, отказ подписывать транзакцию, отказ отдавать приватный ключ.
Откуда взялся инструмент
Замысел подсказан научной статьёй Your Agent Is Mine от Liu и соавторов. В ней описаны вредоносные прокси, которые подмешивают полезную нагрузку в запросы и выносят чужие учётные данные.
Отдельный толчок дал отчёт Anthropic от 10 сентября 2026 года. В нём описаны мошеннические продавцы Claude, которые меняют модель и собирают учётные данные через свои клиентские инструменты. Соавтор статьи Chaofan Shou рассказал 11 сентября, что купил данные роутера с ключами пользователей.
Быстрый старт
Скрипт тянут по конкретной версии, а не по ветке master:
AUDIT_SCRIPT_REF=v2.4.0
curl -fsSL "https://raw.githubusercontent.com/toby-bridges/api-relay-audit/${AUDIT_SCRIPT_REF}/audit.py" -o audit.py
python audit.py --key <YOUR_KEY> --url <BASE_URL> --output report.md
# Web3 / wallet users
python audit.py --key <YOUR_KEY> --url <BASE_URL> --profile web3 --output report.md
Полный прогон занимает около двух минут и стоит примерно 0,2–0,5 доллара по тарифам вашего провайдера. Отчёт в Markdown появляется в текущем каталоге. Пример отчёта с обезличенными данными лежит в репозитории: sanitized audit report.
Ветку master стоит указывать только если вы намеренно проверяете ещё не выпущенные изменения.
Что происходит внутри: 14 шагов
| Шаги | Что делает |
|---|---|
| 1–2 | Разведка инфраструктуры: DNS, CDN, SSL-сертификат, панель управления, перечисление доступных моделей |
| 3 | Лишние токены: сравнивает фактический расход токенов с ожидаемым. Скрытая инструкция добавляет токены, и разница это показывает |
| 4 и 6 | Извлечение промпта: три приёма — дословное воспроизведение, попытка через перевод, продолжение JSON. Плюс проверки устойчивости к обходу ограничений |
| 5 | Согласованность идентичности: ищет в ответах имена GPT, DeepSeek, GLM, Qwen и других моделей там, где заявлен Claude |
| 7 | Обрезка контекста: пять маркеров-«канареек» и бинарный поиск находят настоящую границу окна контекста |
| 8 | Подмена команд установки пакетов: сверяет команды из ответа с теми, что были отправлены, чтобы поймать правку на уровне прокси |
| 9 | Утечки в ошибках: семь намеренно сломанных запросов проверяют, не утекают ли ключи, переменные окружения, пути к файлам и внутренности LiteLLM |
| 10–11 | Целостность потока: список разрешённых событий SSE, монотонность расхода токенов, корректность подписи рассуждений, идентичность модели в потоке. Плюс проверки кошелька Web3 |
Три режима и две формы поставки
Проект существует в двух видах:
audit.py— один файл без зависимостей, удобно для быстрой проверки;api_relay_audit/иscripts/— модульная версия для разработки, с тестами.
Режимы выполнения задают, что именно проверять:
general— обычные проверки прокси и LLM-прокси, режим по умолчанию;web3— проверки кошелька для агентных сценариев Web3;full— общие проверки плюс проверки кошелька.
Плагин для DeepSeek Harness
Репозиторий — это ещё и устанавливаемый пакет dsh-api-relay-audit для DeepSeek Harness. Пакет ставится и на веб-версию, и на сторонние терминалы, которые пользуются официальным реестром @deepseek-ai/dsh-commands. Версию нужно зафиксировать:
DSH_PLUGIN_REF=v2.4.0
dsh plugin --profile web add "github:toby-bridges/api-relay-audit#${DSH_PLUGIN_REF}"
# dsh-cc-tui and other compatible profile-based clients
dsh plugin --profile cc-tui add "github:toby-bridges/api-relay-audit#${DSH_PLUGIN_REF}"
Команда /relay-audit берёт у текущего провайдера в DSH адрес baseURL, модель и ссылку на учётные данные. Сам ключ остаётся в хранилище DSH и передаётся процессу аудита через переменную окружения. В аргументах команды и в журнале сессии его нет.
/relay-audit
/relay-audit --connectivity
/relay-audit --profile web3 --fast-context
/relay-audit --url <URL> --model <claude-model> --credential-ref <DSH_CREDENTIAL_REF>
Запуск без аргументов означает полный аудит и может израсходовать заметное число токенов. Для дешёвой проверки есть --connectivity. Плагин не расширяет список моделей: проверяемая линия должна называться Claude, хотя сам интерфейс прокси может быть совместим с Anthropic или с OpenAI.
Подробности о поставке для агентов собраны в docs/skill-distribution.md.
Файлы навыков для агентов
В репозитории остались файлы навыков для OpenClaw и Hermes. В OpenClaw аудит запускается перед тем, как агент отдаст свой трафик стороннему прокси. В Hermes те же 14 шагов запускаются как навык агента прямо в рабочем процессе. Это вспомогательные способы доставки. Основной сейчас — плагин для DSH.
Границы доказательств
Если модель в ответе называет себя Qwen, DeepSeek, GPT или Claude, это сигнал о расхождении. Это не доказательство подмены. Чтобы утверждать что-то о провайдере, нужны подтверждения: сырой JSON ответа, идентификаторы запросов, метаданные провайдера и модели, подписи потока, хеши прозрачного журнала и повторяемый прогон.
GitHub Actions проверяет форму сообщений о находках, но публикация всё равно идёт через поддерживающего автора. О чувствительных находках нужно сообщать по инструкции из SECURITY.md.
Чего инструмент не делает
- Не выдаёт прокси сертификат безопасности.
- Не заменяет ручную проверку и наблюдение за системой в работе.
- Не считает результат
inconclusiveчистым. Заблокированные пробы и неоднозначные ответы остаются в отчёте видимыми.
Сравнение с веб-сервисами
Инструменты решают разные задачи:
| Инструмент | Чем занимается |
|---|---|
| hvoy.ai | Поиск репутации прокси |
| cctest.ai | Проверка в один клик и распознавание канала |
| API Relay Audit | Локальный открытый аудит с повторяемым отчётом в Markdown |
Состояние проекта
| Метрика | Значение |
|---|---|
| Версия | v2.4 |
| Шагов аудита | 14 |
| Матрица рисков | 6D |
| Тестов pytest | 808 |
| Флагов командной строки | 22 |
Лицензия и цитирование
Лицензия AGPL-3.0-only, текст лежит в LICENSE. Она требует, чтобы сетевой сервис с изменениями оставался с открытым кодом. Тот же принцип проект применяет к экосистеме прокси, которую проверяет.
Для научных работ и отчётов есть файл CITATION.cff. В нём записаны две работы, на которые опирается модель аудита: Liu et al., Your Agent Is Mine (arXiv:2604.08407) и Zhang et al., Real Money, Fake Models (arXiv:2603.01919).
Где читать дальше
- Документация проекта: toby-bridges.github.io/api-relay-audit
- Границы семейств проверок: docs/query-families.md
- Как проверять прокси для Claude: гайд на сайте проекта
- Как прокси подмешивают инструкции: гайд на сайте проекта
- Как участвовать в проекте: CONTRIBUTING.md