Перейти к основному содержанию
Агенту не нужно сливать данные, чтобы навредить вам. Он может просто тратить — цикл повторов, молотящий дорогую модель, инструкция с prompt-инъекцией, веером разворачивающая тысячу вызовов инструментов, или утёкший API-ключ, накручивающий инференс, пока не придёт счёт. Это denial of wallet: атака — это сама стоимость. В отличие от классического denial-of-service, шлюз остаётся работоспособным, и каждый запрос выглядит по отдельности легитимным — ущерб в совокупном расходе. OrcaRouter даёт вам три независимых потолка, которые все стоят перед вышестоящей моделью, так что ни один неуправляемый путь не может прогнать ваш счёт неограниченно.

1. Угроза denial of wallet на ИИ

Инцидент denial-of-wallet обычно прослеживается к одной из трёх форм:
Агент повторяет один и тот же отказывающий инструмент или перепланирует в узком цикле, переплачивая за токены на каждом проходе. Злого умысла не требуется — достаточно плохого условия остановки.
Prompt injection направляет агента на спам инструментом или выпуск чрезмерных запросов, умножая расход за ход.
Ключ оказывается там, где не должен — закоммиченный .env, расшаренный ноутбук — и злоумышленник гоняет инференс на вашем аккаунте, пока расход не заметят.
Защита одна и та же во всех трёх случаях: жёсткий потолок, мимо которого злоумышленник не уговорит, применяемый на шлюзе, а не в коде вашего агента.

2. Потолок стоимости на прогон с cap_cost

Вердикт cap_cost Firewall — это автоматический выключатель для неуправляемых циклов. Вы пишете его как правило с потолком в центах на прогон; движок суммирует накопленный расход прогона агента, и как только прогон пересекает потолок, движок разрешает вердикт в deny — каждый последующий вызов инструмента в этом прогоне блокируется. cap_cost — это потолок до отправки: он оценивается до того, как вызов достигнет инструмента, так что он останавливает следующий дорогой вызов, а не возвращает уже совершённый. Типичный catch-all потолок на каждый инструмент:
{
  "priority": 50,
  "label": "cap runaway spend at $5 per run",
  "tool_name_glob": "*",
  "verdict": "cap_cost",
  "cap_cost_cents": 500
}
Ниже потолка вызов разрешён; выше него прогон запрещается с HTTP 400 firewall_blocked — помечено skip-retry, так что цикл не может молотить вокруг запрета. Потолок — на прогон агента и суммируется по всей политике рабочего пространства, так что один неуправляемый разговор не может перетечь в бюджет другого.
cap_cost читает текущий расход из ваших логов запросов. Держите захват логов запросов включённым для рабочего пространства, чтобы сводке текущего расхода было что суммировать — иначе оценка предыдущего расхода консервативно равна 0, и потолок не может видеть, во что прогон уже обошёлся.
См. Справочник правил Firewall для полного языка сопоставления и того, где cap_cost стоит среди других вердиктов.

3. Жёсткий бюджет на ключ с credit_limit_usd

cap_cost ограничивает один прогон. Чтобы ограничить ключ — каждый прогон, который он когда-либо выпускает — установите credit_limit_usd на API-ключе. Это жёсткий потолок расхода в USD на пожизненный расход этого ключа: шлюз конвертирует его в оставшуюся квоту ключа, и как только ключ потратил своё содержание, дальнейшие relay-вызовы отклоняются за недостаток кредита. 0 означает безлимитный. Сочетайте его с другими ограничениями ключа, чтобы утёкший ключ был ограничен по каждой оси сразу:

credit_limit_usd

Жёсткий потолок расхода в USD для ключа (0 = безлимитный).

expired_time

Метка времени авто-истечения (-1 = никогда). Короткоживущий ключ ограничивает окно радиуса поражения.

allow_ips

Привяжите ключ к известным исходным IP — утёкший ключ бесполезен вне сети.

model_limits

Ограничьте ключ конкретными моделями, чтобы он вообще не мог достичь самых дорогих.
Дайте каждому агенту собственный узко-ограниченный ключ с credit_limit_usd, который он никогда не должен легитимно превышать. Лимит — это бюджет, а не догадка о поведении злоумышленника — даже полностью скомпрометированный ключ останавливается на потолке.
Настройте всё это из редактора ключей консоли (или token API) под вашей сессией — это настройки ключа, а не relay-вызовы. Только запросы вывода /v1/* используют сам ключ sk-orca-.... Редактирование лимита вступает в силу со следующего запроса ключа; без передеплоя.

4. Поймайте всплеск, который вы не предсказали: аномалии стоимости

Статический потолок останавливает расход, который вы предвидели. Обнаружение аномалий Firewall ловит расход, который вы не предвидели. Оно выучивает нормальную форму использования инструментов каждого рабочего пространства относительно базового уровня по часу недели (скользящее 14-дневное среднее) и всплывает отклонения в ленте, читаемой участником:
АномалияЧто отмечает
burn_spikeСтоимость инструмента далеко выше его выученной базовой стоимости — сигнал denial-of-wallet.
rate_spikeОбъём вызовов далеко выше базового уровня — веер и наводнения.
retry_loopОдин и тот же инструмент с одними и теми же аргументами, повторяющийся в узком окне — классический неуправляемый цикл.
Так что «этот инструмент сжёг 40× своей обычной стоимости в этот час» выделяется, даже когда каждый отдельный вызов был разрешён политикой. Вы можете отложить аномалию на срок до 7 дней, пока расследуете.
Обнаружение аномалий — это ваше раннее предупреждение; cap_cost и credit_limit_usd — это жёсткие остановки. Наблюдайте за лентой, чтобы обнаружить, где живёт ваш реальный расход, затем напишите потолок вокруг него.

5. Собираем вместе

Наслоите три так, чтобы неуправляемость никогда не достигла счёта:
КонтрольОбластьКогда срабатывает
Правило cap_costОдин прогон агентаНакопленный расход прогона пересекает потолок в центах
credit_limit_usdОдин ключ, пожизненноОбщий расход ключа достигает его потолка в USD
burn_spike / retry_loopРабочее пространство, выученноеРасход или паттерн повтора отклоняется от базового уровня
Практический базовый уровень: cap_cost на прогон на *, credit_limit_usd на каждом ключе агента и привычка проверять ленту аномалий. Выкатывайте новую политику cap_cost сначала в shadow mode — она логирует [shadow] would deny без блокировки — так что вы можете подобрать размер потолка относительно реального трафика до того, как он начнёт кусаться.
cap_cost и лента аномалий ограничивают вызовы инструментов и прогоны, которые пересекают шлюз. Инструмент, который агент выполняет целиком внутри своего процесса, никогда не достигает движка. Маршрутизируйте опосредованные моделью и MCP-вызовы инструментов через шлюз — и давайте каждому ключу credit_limit_usd — чтобы потолок держался независимо от того, как агент зацикливается.

6. Связанные угрозы

Denial of wallet редко приходит в одиночку — цикл, сжигающий ваш бюджет, часто управляется чем-то вышестоящим:
  • Prompt injection — внедрённые инструкции являются распространённым триггером для веера и спама инструментов.
  • Excessive agency — агент со слишком большой свободой имеет больше способов тратить.
  • Опасные вызовы инструментов — та же плоскость правил firewall ограничивает что инструмент может делать, а не только сколько это стоит.
  • Модель угроз — где неуправляемая стоимость вписывается в полную агентную поверхность атаки.

Обзор Firewall

Вердикты, обнаружение аномалий, уровни автономии и наблюдаемость.

Ограниченные ключи и политики

Как лимиты ключей, guardrails и политики firewall комбинируются на каждом ключе.