Інструменти вузла моделі — пошук, читання сторінок, код і функції

Дайте вузлу моделі вбудовані інструменти та функції, дізнайтеся, скільки коштує кожен і що обмежує виклик, і дозвольте запуску приносити власні інструменти.

12 хв читання

Вузол моделі може дати моделі інструменти. Налаштування називають інструмент нейтральним іменем — web_search, web_fetch, code_execution, функція, — а Slen перекладає його в те, що приймає провайдер моделі. Ця сторінка каже, що таке кожен інструмент у кожного провайдера, що обмежує ціну виклику з інструментами і як запуск може принести власні інструменти.

Два види інструментів

  • Вбудований інструмент виконує провайдер усередині виклику: шукає у вебі, читає сторінку, виконує код, — і модель відповідає тим, що знайшла. Пошук і сторінка коштують токенів, а деякі інструменти понад них коштують грошей за виклик.

  • Функцію виконує ваш код. Модель лише просить її: відповідь називає функцію та її аргументи, виконання виходить через Виклик функції, а ваш код виконує функцію і починає наступний запуск із її результатом — Функції.

Вузол зберігає свої інструменти в налаштуваннях у такій формі:

JSON
{
  "model": "claude-haiku-4-5",
  "tools": [
    { "type": "web_search", "max_uses": 5, "allowed_domains": ["docs.example.com"], "user_location": { "country": "UA", "city": "Kyiv" } },
    { "type": "web_fetch", "max_uses": 3, "blocked_domains": ["ads.example.com"], "max_content_tokens": 20000 },
    { "type": "function", "name": "lookup_crm", "description": "Find a customer by email", "parameters": { "type": "object", "properties": { "email": { "type": "string" } } }, "strict": true }
  ],
  "tool_choice": "auto",
  "response_format": null,
  "input_overrides": null
}

Імена в кожного провайдера

Нейтральне ім’яAnthropicOpenAIGemini
web_searchвебпошуквебпошукGoogle Search
web_fetchчитання сторінок—URL context
code_execution——виконання коду

В OpenAI немає окремого інструмента для читання сторінки: його вебпошук сам відкриває сторінки. Виконання коду є лише в Gemini: в Anthropic і OpenAI за нього платять за часом контейнера, і виклик із ним не можна ні оцінити заздалегідь, ні обмежити. Які інструменти має модель і які налаштування приймає кожен, сказано в каталозі — Моделі та ціни, — і конструктор пропонує лише їх.

Задайте інструменти вузла

1. Відкрийте вузол

Відкрийте флоу на вкладці Конструктор і виберіть вузол AI-модель. На його вкладці Налаштування під межею відповіді є розділ Інструменти.

2. Увімкніть інструмент

Вбудований інструмент, який має модель, — це рядок із перемикачем і ціною. Увімкнений інструмент починає з ліміту в 5 використань за виклик, якщо провайдер приймає ліміт. Задайте ліміт, сайти й розташування, які приймає провайдер.

3. Додайте функцію

Натисніть Додати функцію, потім дайте їй ім’я, опис і JSON Schema її аргументів — Функції.

4. Опублікуйте

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

Коли ви вибираєте іншу модель, інструменти, яких вона не має, лишаються у вузлі — сірими, з причиною, — і флоу не публікується, доки ви їх не вимкнете або не виберете модель, яка їх має. Копія, створена кнопкою Додати запасну модель, зберігає інструменти оригіналу і перевіряється так само.

Що обмежує виклик

Ціна виклику з інструментами заздалегідь невідома: модель сама вирішує, скільки разів шукати, і кожен пошук додається до входу наступного кола. Що Slen може знати — це скільки виклик може коштувати щонайбільше, його стеля:

  • без вбудованих інструментів — вхід виклику та max_output_tokens за цінами моделі;

  • із вбудованими інструментами — кожне коло виклику за вікном моделі, платні виклики інструментів до їхніх лімітів і межа відповіді. Модель із ціновим рівнем довгого контексту рахується за цим рівнем.

Панель показує її як «Не дорожче $X за виклик», коли чернетку збережено. Це число рахується до того, як відомий хоч якийсь вхід: замість входу береться вікно моделі, за більшою з цін входу й запису в кеш, для кожного кола серверних інструментів, із кожним платним викликом і max_output_tokens — або межею за замовчуванням. Стеля реального виклику, вхід якого відомий, нижча. Вона діє на виклик цілком, разом із продовженнями виклику Anthropic. Вихід Оцінка вартості несе її як ceiling поруч з estimated_cost. Інструменту, що приймає ліміт, ліміт потрібен — max_uses, від 1 до 20, — бо без нього виклик нічим не обмежений.

Жорсткий бюджет користується стелею: виклик проходить, лише якщо витрачене, стелі викликів у польоті та стеля нового виклику вкладаються в ліміт — Бюджети. Виклик без стелі жорсткий бюджет не пропускає. Нежорсткий бюджет, як завжди, пропускає виклик за його резервом.

Anthropic

  • web_search приймає max_uses, allowed_domains або blocked_domains — щось одне, не обидва — і user_location. Пошук коштує $10 за 1 000 понад його токени. Невдалий пошук входить у ліміт і не оплачується.

  • web_fetch приймає max_uses, сайти та max_content_tokens — скільки токенів однієї сторінки потрапляє у вхід. Читання сторінки коштує лише її токенів.

  • Довгий виклик з інструментами може зупинитися на півдорозі; Slen продовжує його сам до 3 разів у межах однієї спроби. Кожне продовження отримує лише залишок лімітів виклику — пошуки й сторінки, що лишилися від max_uses, і токени, що лишилися від max_output_tokens, — і Slen не продовжує виклик, коли ліміт вичерпано або коли ще одна частина могла б вивести виклик за його стелю. Якщо виклик так і не закінчився, відповідь — те, що написала модель, з finish_reason incomplete.

  • content виходу — відповідь після останнього пошуку чи сторінки; те, що модель написала до неї, — intermediate_text. Джерела відповіді — citations, а помилка пошуку чи сторінки всередині успішного виклику потрапляє в tool_errors — AI-модель.

  • Модель Anthropic не має формату відповіді: вузол, який його просить, не публікується.

JSON
{
  "content": "The order ships on Monday.",
  "finish_reason": "stop",
  "intermediate_text": "Let me look up the delivery policy.",
  "citations": [{ "url": "https://docs.example.com/delivery", "title": "Delivery", "cited_text": "Orders ship on the next working day." }],
  "tool_errors": []
}

OpenAI

  • web_search приймає max_uses, allowed_domains і user_location; заборонені сайти не приймаються. Пошук коштує $10 за 1 000 викликів понад його токени.

  • В OpenAI один ліміт на всі вбудовані інструменти виклику: Slen надсилає суму лімітів вузла. У стелі кожен із цих викликів рахується за ціною найдорожчого інструмента.

  • gpt-5 не приймає температуру: вузол цієї моделі з температурою не публікується — Моделі та ціни.

  • Якщо у вузлі немає розташування, OpenAI отримує порожнє приблизне розташування: інакше він вважає, що користувач у США. Його цитати не несуть процитованого тексту — cited_text дорівнює null.

  • Власний код OpenAI для відхиленого запиту — context_length_exceeded і подібні — лежить усередині error.message виходу вузла, у вигляді «OpenAI error (context_length_exceeded): …»; Умова знаходить його оператором містить за шляхом nodes.<key>.output.error.message.

JSON
{ "error": { "class": "rejected", "code": "provider_error", "message": "OpenAI error (context_length_exceeded): Your input exceeds the context window of this model." } }

Gemini

  • web_search — це Google Search, web_fetch — URL context, а code_execution виконує код. Жоден із них не приймає налаштувань: Gemini не має для них ні ліміту, ні списку сайтів, ні розташування.

  • Gemini не вміє обмежувати свої пошуки. Як це обмежує виклик, залежить від того, як модель платить за Search. Модель, яка платить один раз за запит із пошуком, — Gemini 2.5 — має стелю: $35 за 1 000 таких запитів, а видача пошуку не тарифікується як вхід. Модель, яка платить за кожен пошуковий запит, — Gemini 3 і новіші — її не має: вузол із Search на такій моделі публікується з попередженням ai_model_tool_without_ceiling, панель каже, що стелю не гарантовано, а жорсткий бюджет виклик не пропускає.

  • URL context і виконання коду коштують лише токенів. Вхід, який вони додають, обмежений вікном моделі, тому виклик із ними має стелю.

  • Gemini 2.5 не приймає вбудований інструмент разом із функцією і формат відповіді разом з інструментом: такий вузол не публікується.

  • Пошукові підказки. Google вимагає показувати кінцевому користувачеві відповідь, що спирається на Google Search, разом із її пошуковими підказками, без змін. Slen віддає їх вашому коду, що викликає, як grounding.search_entry_point виходу і не зберігає в трасі відповідь, що спирається на пошук Google.

JSON
{ "model": "gemini-2.5-flash", "tools": [{ "type": "web_search" }, { "type": "web_fetch" }, { "type": "code_execution" }] }
JSON
{
  "content": "Kyiv is cloudy today, 12 °C.",
  "citations": [{ "url": "https://weather.example.com/kyiv", "title": "weather.example.com" }],
  "grounding": { "search_entry_point": "<div class=\"container\">…</div>" }
}

Безкоштовні квоти провайдерів

Провайдери дають частину використання безкоштовно: Gemini — певну кількість запитів із Search на добу, Anthropic — години контейнера для коду на місяць. Slen рахує кожен виклик платним, тому за малих обсягів його фактична вартість може бути вищою за нарахування провайдера. Ця помилка — на користь бюджету.

Формат відповіді

Формат відповіді просить текст, будь-який JSON-об’єкт (json_object) або JSON за схемою (json_schema). Конструктор перелічує лише формати, які має модель; OpenAI і Gemini мають обидва види, Anthropic — жодного.

Інструменти із входу запуску

Коли код, що викликає, переносить свій виклик у Slen, він часто передає разом із ним tools або response_format. Типово флоу не передає їх моделі, і відповідь запуску каже про це попередженням — запуск не переривається:

JSON
{
  "warnings": [
    { "code": "input_key_ignored", "keys": ["tools", "temperature"], "message": "The input carries keys of a model call the flow does not pass to the model: tools, temperature" }
  ]
}

Попередження є у відповіді POST /v1/operations/execute, GET /v1/executions/{id}/status і GET /v1/executions/{id}, а також у трасі. Воно називає ключі виклику моделі, які були у вході і яких ніхто не читає, з цих:

model, tools, tool_choice, response_format, temperature, top_p, max_tokens, max_output_tokens,
max_completion_tokens, stop, parallel_tool_calls, reasoning, text, instructions, system, generationConfig

Ключ, який читає вузол, — шлях умови, налаштування, — не називається, як і ключ ваших власних даних.

Натомість їх може приймати вузол. У розділі Із входу запуску панель має три перемикачі, вони зберігаються як input_overrides:

  • Приймати інструменти (лише звужувати) — вбудовані інструменти з input.tools замінюють інструменти вузла на цей запуск. Кожен має бути інструментом, який має вузол; його ліміт не більший за ліміт вузла, а якщо ліміт не вказано, береться ліміт вузла; allowed_domains може лише звузити список вузла, blocked_domains додаються до списку вузла. Інструмента, якого вхід не називає, у виклику немає, тому стеля запуску не більша за стелю вузла.

  • Приймати функції — функції з input.tools додаються до функцій вузла: усього не більше 32, ім’я, якого вузол не має, схема кожної не більша за 16 КБ.

  • Приймати формат відповіді — input.response_format замінює формат вузла; модель мусить його мати.

Як порівнюються сайти входу: кожне ім’я — у нижньому регістрі й без крапки в кінці; сайт розташований усередині іншого, якщо це те саме ім’я або його піддомен, а *.example.com покриває піддомени example.com, але не саме ім’я.

  • Кожен дозволений сайт входу має бути всередині одного з дозволених сайтів вузла: docs.example.com приймається під example.com.

  • Коли список дозволених зустрічається із забороненими сайтами, відхиляється дозволений сайт усередині забороненого, і так само — заборонений сайт нижче дозволеного: дозволений example.com із забороненим ads.example.com — це те, чого один список сказати не може. Заборонений сайт поза всіма дозволеними не потрібен і нічого не змінює.

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

Запуск, що порушує одне з цих правил, закінчується з 422 invalid_flow_input ще до виклику моделі, і error.details каже, який вузол і чому:

JSON
{
  "error": {
    "code": "invalid_flow_input",
    "message": "The input asks for a tool the node does not allow",
    "details": { "node": "answer", "reason": "tool_not_allowed", "tool": "web_fetch" }
  }
}

reason — одне з цих значень:

tool_not_allowed, max_uses_exceeds_node, domain_not_allowed, functions_not_allowed,
response_format_not_allowed, not_supported_by_model
reasonВхід просить
tool_not_allowedвбудований інструмент, якого вузол не має, вбудовані інструменти, коли вузол приймає лише функції, інструмент неправильної форми або неправильний вибір інструмента
max_uses_exceeds_nodeліміт, вищий за ліміт вузла
domain_not_allowedсайт поза дозволеними сайтами вузла або дозволені й заборонені сайти, яких один список разом сказати не може
functions_not_allowedфункції, коли вузол їх не приймає, понад 32 функції або ім’я, яке вузол уже має
response_format_not_allowedформат відповіді, коли вузол його не приймає, або формат неправильної форми
not_supported_by_modelте, чого модель не вміє з інструментами та форматом, які вийшли в запуску

Що читати далі

  • Функції — задайте функцію, прочитайте виклик, продовжте новим запуском.

  • AI-модель — налаштування, порти й вихід вузла.

  • Моделі та ціни — які інструменти має кожна модель і скільки вони коштують.

  • Бюджети — жорсткий бюджет і найгірший випадок виклику.