Tool Side-Effect Classification в 2026: как различать безопасные и опасные последствия вызова инструмента

Tool side-effect classification в 2026: как делить инструменты и их результаты на read, draft, mutate и external-commit классы, чтобы routing, approvals и retries учитывали реальный риск побочных эффектов.

Tool side-effect classification в 2026 нужен потому, что инструменты редко бывают просто "безопасными" или "опасными". Один tool только читает данные. Другой создаёт draft. Третий меняет внутреннее состояние. Четвёртый запускает внешний необратимый commit. Если система не различает эти классы, то retry policy, approvals, sandboxing и degraded mode начинают работать слишком грубо. В результате harmless lookup и external money move выглядят почти одинаково на уровне orchestration.

Side effect — это последствие вызова tool-а. Оно может быть нулевым, обратимым, внутренним или внешним. Хорошая классификация помогает системе понимать не только "какой tool вызвали", но и "что реально изменилось в мире".
Самый вредный anti-pattern - считать все tool calls одинаковыми с точки зрения риска. Тогда одинаково ретраятся и read-only lookup, и внешняя операция, у которой уже мог случиться побочный эффект.

Короткая версия

Хорошая side-effect classification в 2026 обычно делит tools на:

  1. Read-only
  2. Draft-producing
  3. Internal state mutation
  4. External commit
  5. Irreversible high-risk action

Что особенно важно

  • класс side effect важнее имени tool-а;
  • retry policy должна зависеть от side-effect class;
  • approvals нужны не всем tool-ам, а risky effect classes;
  • classification полезно хранить в tool registry, а не только в голове команды.
Без техники
Все tools идут через один retry wrapper и одну permission policy.
С техникой
Read-only lookup ретраится свободно, draft tool требует меньше контроля, а external commit имеет approval gate и idempotency checks.
ПромптSide-effect intuition
Почему side-effect class важнее простого списка tools?
Ответ модели

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

1. Имя tool-а плохо описывает риск

Даже tool с innocuous названием может:

  • триггерить webhook;
  • менять CRM state;
  • запускать downstream automation;
  • писать во внешний канал.

Поэтому полезно классифицировать не только функцию, но и её operational последствия.

2. Side-effect class должен влиять на policy

Например:

  • read-only tools можно ретраить и логировать свободнее;
  • draft-producing tools требуют validation, но не всегда approval;
  • mutation tools требуют stronger audit;
  • external commit tools требуют approval, idempotency и stricter stop conditions.
Если retry policy не знает, был ли у tool call реальный side effect, она почти наверняка будет слишком агрессивной или слишком осторожной.

3. Классификация помогает видеть скрытую опасность chained tools

Слабое место многих agent systems:

  • tool A выглядит harmless;
  • но его output запускает tool B;
  • или state mutation в одной системе вызывает внешний эффект в другой.

Именно поэтому side-effect classification полезно связывать с outcome class, а не только с immediate result.

4. Side-effect class полезно учитывать в observability

Команде важно различать:

  • количество read calls;
  • количество mutation attempts;
  • blocked external commits;
  • irreversible action failures;
  • repeated retries on side-effecting tools.

Иначе метрика "tool usage" слишком грубая.

5. Что особенно часто ломают команды

One retry policy for all tools

Не учитывается характер side effect.

Hidden downstream commits

Tool формально внутренний, но запускает внешний процесс.

No draft class

Draft и execute путаются.

Permissions by tool name only

Не видно эквивалентных risk classes.

No irreversible-action marker

Самые опасные tools не выделены явно.

6. Какие метрики полезны

Минимальный dashboard обычно включает:

  • tool calls by side-effect class;
  • retries on non-idempotent tools;
  • blocked external commits;
  • draft-to-execute conversion rate;
  • mutation incidents by tool class;
  • irreversible action attempt rate.

Плюсы

  • Side-effect classes делают tool policy более realistic
  • Помогают правильно настраивать approvals, retries и audits
  • Упрощают route-level risk management
  • Позволяют увидеть скрытые опасные инструменты и chains

Минусы

  • Нужно поддерживать tool registry и side-effect metadata
  • Некоторые tools трудно отнести к одному классу
  • Downstream side effects не всегда видны из интерфейса tool-а
  • Без регулярного review classification быстро устаревает

Пример tool registry

tools:
  kb_lookup:
    side_effect_class: read_only
  draft_email:
    side_effect_class: draft
  crm_update:
    side_effect_class: internal_mutation
  send_email:
    side_effect_class: external_commit

Простой policy hook

def may_retry(tool_meta):
    return tool_meta["side_effect_class"] in ["read_only", "draft"]

Практический совет: зрелая tool policy начинается не с вопроса "какой это API", а с вопроса "что именно изменится в мире, если этот вызов сработает".

Проверьте себя

1. Почему side-effect class важнее простого имени tool-а?

2. Что особенно важно учитывать для retry policy?

3. Какой anti-pattern особенно опасен?