Анти-патерн Too Many Tools: занадто багато інструментів

Anti-pattern, коли агент має забагато tools і не може ефективно обрати потрібний.
На цій сторінці
  1. Ідея за 30 секунд
  2. Приклад анти-патерну
  3. Чому виникає і що йде не так
  4. Правильний підхід
  5. Швидкий тест
  6. Чим відрізняється від інших анти-патернів
  7. Tool Calling for Everything vs Too Many Tools
  8. Multi-Agent Overkill vs Too Many Tools
  9. Giant System Prompt vs Too Many Tools
  10. Самоперевірка: чи немає у вас цього анти-патерну
  11. FAQ
  12. Що далі

Ідея за 30 секунд

Too Many Tools — це анти-патерн, коли агенту дають занадто багато інструментів без чітких меж по задачах.

У результаті зростає шум у виборі дій: агент частіше бере нерелевантний інструмент і витрачає кроки на повторний вибір. Це підвищує latency, вартість і нестабільність відповіді.

Просте правило: для кожного сценарію агент має бачити лише мінімальний набір інструментів, які справді потрібні.


Приклад анти-патерну

Команда будує support-агента для запитів про замовлення, повернення і оплату.

Замість вузького набору команда дає агенту великий список інструментів "на всі випадки".

PYTHON
response = agent.run(
    "User: Чому не проходить оплата за замовлення #8341?"
)

У такій схемі агент має десятки варіантів і може піти в неправильний бік:

PYTHON
tools = ["get_payment_status", "get_invoice", "get_order"]
selected_tool = agent.pick_tool(tools)
result = run_tool(selected_tool, order_id)

# агент може спершу обрати get_invoice,
# не знайти причину збою
# і лише потім перейти до get_payment_status

Для цього кейсу достатньо короткого маршруту з кількома інструментами:

PYTHON
payment_data = get_payment_status(order_id)
return format_payment_answer(payment_data)

У цьому випадку надлишок tools додає:

  • шум у виборі дій
  • зайві виклики інструментів
  • вищий ризик неправильного маршруту

Чому виникає і що йде не так

Цей анти-патерн часто з’являється, коли команда намагається зробити "універсального" агента для всіх запитів одразу.

Типові причини:

  • додавання нових tools без видалення старих
  • відсутність per-task allowlist для інструментів
  • страх "а раптом не вистачить одного інструмента"
  • копіювання великих toolset із демо без перевірки продакшн-кейсів

У результаті виникають проблеми:

  • нестабільний вибір — агент бере tool, який формально підходить, але не найкращий
  • вища latency — цикл вибору і повторні виклики займають більше часу
  • більша вартість — зайві tool або LLM кроки на типовий запит
  • роздутий контекст — у prompt потрапляє опис багатьох tools і проміжні результати
  • складний дебаг — важко відстежити, чому агент обрав саме цей шлях

Типові production-сигнали, що інструментів уже забагато:

  • типовий user request запускає 3-5 tool викликів там, де вистачило б 1-2
  • одна й та сама задача проходить різними шляхами в різних запусках
  • команда не може чітко пояснити, чому tool A обирається замість tool B
  • додавання нового tool погіршує quality існуючих сценаріїв

У результаті агент витрачає більше кроків на вибір дії, ніж на розв’язання самої задачі. Важливо, що вибір інструмента — це частина LLM inference. Модель обирає дію серед опцій, які бачить у prompt. Коли інструментів стає багато, зростає кількість можливих шляхів, і вибір стає менш стабільним: модель частіше обирає інструмент, який формально підходить, але не є найкращим.

Коли така схема розростається, без trace і візуалізації виконання стає важко зрозуміти, чому агент обрав саме цей інструментальний шлях. Тому production-системи зазвичай мають окремий шар спостережуваності для запусків агентів.

Правильний підхід

Починайте з найпростішого маршруту, який стабільно закриває більшість запитів сьогодні. Інструменти додавайте лише тоді, коли є вимірюваний збій, ризик або обмеження поточного дизайну.

Практична рамка:

  • для кожного типу задачі задайте чіткий tool allowlist
  • тримайте малий набір tools у кожному маршруті
  • додавайте новий tool тільки тоді, коли є вимірювана причина (наприклад, покращення success rate або зменшення помилок без різкого росту latency і cost per request)
PYTHON
def answer_payment_question(order_id: str, user_message: str) -> str:
    route = classify_intent(user_message)  # simple classifier or rules

    if route == "payment_status":
        allowed_tools = ["get_payment_status"]
        data = run_tool("get_payment_status", order_id)
        return format_payment_answer(data)

    allowed_tools = ["get_payment_status", "get_invoice"]
    return agent.run(
        user_message=user_message,
        allowed_tools=allowed_tools,
    )

У такій схемі агент працює з невеликим і релевантним набором інструментів, тому вибір дії стає стабільнішим.

Швидкий тест

Якщо на ці питання відповідь "так", у вас є ризик too-many-tools:

  • Чи типовий запит регулярно потребує 3+ tool викликів там, де мало б вистачити 1-2?
  • Чи один і той самий запит проходить різними tool-шляхами в різних запусках?
  • Чи нові tools додаються швидше, ніж команда встигає їх обмежувати, прибирати або переглядати?

Чим відрізняється від інших анти-патернів

Tool Calling for Everything vs Too Many Tools

Tool Calling for EverythingToo Many Tools
Основна проблема: інструменти викликають навіть там, де достатньо reasoning або простого workflow.Основна проблема: інструментів забагато, і агент нестабільно обирає між ними.
Коли виникає: коли майже кожен запит автоматично переводять у виклик інструмента.Коли виникає: коли один маршрут має надмірний набір інструментів без чіткого allowlist.

Multi-Agent Overkill vs Too Many Tools

Multi-Agent OverkillToo Many Tools
Основна проблема: надлишок агентів і складна координація між ролями.Основна проблема: надлишок інструментів у межах агентного маршруту.
Коли виникає: коли один запит проходить забагато handoff між агентами.Коли виникає: коли агент повторно перебирає кілька tools, щоб знайти релевантний інструмент.

Giant System Prompt vs Too Many Tools

Giant System PromptToo Many Tools
Основна проблема: один великий системний prompt із конфліктними інструкціями.Основна проблема: агент бачить забагато інструментів і помиляється у виборі дії.
Коли виникає: коли нові правила постійно додають у монолітний prompt.Коли виникає: коли tools додають без перегляду застарілих або дубльованих інструментів.

Самоперевірка: чи немає у вас цього анти-патерну

Швидка перевірка на anti-pattern Too Many Tools.
Відмічайте пункти під вашу систему і дивіться статус нижче.

Перевірте свою систему:

Прогрес: 0/8

⚠ Є ознаки цього anti-pattern

Спробуйте винести прості кроки у workflow і залишити агента лише для складних рішень.

FAQ

Q: Чи означає це, що багато tools — завжди погано?
A: Ні. Проблема не в кількості як такій, а в тому, що агент бачить забагато нерелевантних опцій у конкретному сценарії.

Q: Коли додавати новий tool?
A: Коли є конкретний сигнал: прогалини в покритті задач, помилки якості або ліміти поточного маршруту, які не закриваються поточним набором без непропорційного росту latency, cost або складності дебагу.

Q: Як зменшити хаос у виборі tools без великого рефакторингу?
A: Почніть із простого: введіть allowlist по типу задачі, зафіксуйте ліміт кроків і приберіть tools, які майже не використовуються або дають дублюючий результат.


Що далі

Схожі anti-patterns:

  • Agent Everywhere Problem — коли агент додається навіть для детермінованих задач.
  • Overengineering Agents — коли система обростає зайвими шарами без вимірюваної користі.
  • Multi-Agent Overkill — коли в системі надто багато агентів із розмитими ролями.

Що будувати замість цього:

  • Allowed Actions — як задавати чіткі межі того, що агенту дозволено робити.
  • Routing Agent — як маршрутизувати задачі й давати агенту лише релевантні інструменти.
  • Tool Execution Layer — де в архітектурі контролювати виклики tools і політики доступу.
⏱️ 7 хв читанняОновлено 16 березня 2026 р.Складність: ★★★
Реалізувати в OnceOnly
Safe defaults for tool permissions + write gating.
Використати в OnceOnly
# onceonly guardrails (concept)
version: 1
tools:
  default_mode: read_only
  allowlist:
    - search.read
    - kb.read
    - http.get
writes:
  enabled: false
  require_approval: true
  idempotency: true
controls:
  kill_switch: { enabled: true, mode: disable_writes }
audit:
  enabled: true
Інтегровано: продакшен-контрольOnceOnly
Додай guardrails до агентів з tool-calling
Зашип цей патерн з governance:
  • Бюджетами (кроки / ліміти витрат)
  • Дозволами на інструменти (allowlist / blocklist)
  • Kill switch та аварійна зупинка
  • Ідемпотентність і dedupe
  • Audit logs та трасування
Інтегрована згадка: OnceOnly — контрольний шар для продакшен агент-систем.
Автор

Цю документацію курують і підтримують інженери, які запускають AI-агентів у продакшені.

Контент створено з допомогою AI, із людською редакторською відповідальністю за точність, ясність і продакшн-релевантність.

Патерни та рекомендації базуються на постмортемах, режимах відмов і операційних інцидентах у розгорнутих системах, зокрема під час розробки та експлуатації governance-інфраструктури для агентів у OnceOnly.