Інструменти вузла моделі — пошук, читання сторінок, код і функції
Дайте вузлу моделі вбудовані інструменти та функції, дізнайтеся, скільки коштує кожен і що обмежує виклик, і дозвольте запуску приносити власні інструменти.
12 хв читання
Вузол моделі може дати моделі інструменти. Налаштування називають інструмент нейтральним іменем — web_search, web_fetch, code_execution, функція, — а Slen перекладає його в те, що приймає провайдер моделі. Ця сторінка каже, що таке кожен інструмент у кожного провайдера, що обмежує ціну виклику з інструментами і як запуск може принести власні інструменти.
Два види інструментів
Вбудований інструмент виконує провайдер усередині виклику: шукає у вебі, читає сторінку, виконує код, — і модель відповідає тим, що знайшла. Пошук і сторінка коштують токенів, а деякі інструменти понад них коштують грошей за виклик.
Функцію виконує ваш код. Модель лише просить її: відповідь називає функцію та її аргументи, виконання виходить через Виклик функції, а ваш код виконує функцію і починає наступний запуск із її результатом — Функції.
Вузол зберігає свої інструменти в налаштуваннях у такій формі:
{
"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
}Імена в кожного провайдера
| Нейтральне ім’я | Anthropic | OpenAI | Gemini |
|---|---|---|---|
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_reasonincomplete.contentвиходу — відповідь після останнього пошуку чи сторінки; те, що модель написала до неї, —intermediate_text. Джерела відповіді —citations, а помилка пошуку чи сторінки всередині успішного виклику потрапляє вtool_errors— AI-модель.Модель Anthropic не має формату відповіді: вузол, який його просить, не публікується.
{
"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.
{ "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.
{ "model": "gemini-2.5-flash", "tools": [{ "type": "web_search" }, { "type": "web_fetch" }, { "type": "code_execution" }] }{
"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. Типово флоу не передає їх моделі, і відповідь запуску каже про це попередженням — запуск не переривається:
{
"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 каже, який вузол і чому:
{
"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_modelreason | Вхід просить |
|---|---|
tool_not_allowed | вбудований інструмент, якого вузол не має, вбудовані інструменти, коли вузол приймає лише функції, інструмент неправильної форми або неправильний вибір інструмента |
max_uses_exceeds_node | ліміт, вищий за ліміт вузла |
domain_not_allowed | сайт поза дозволеними сайтами вузла або дозволені й заборонені сайти, яких один список разом сказати не може |
functions_not_allowed | функції, коли вузол їх не приймає, понад 32 функції або ім’я, яке вузол уже має |
response_format_not_allowed | формат відповіді, коли вузол його не приймає, або формат неправильної форми |
not_supported_by_model | те, чого модель не вміє з інструментами та форматом, які вийшли в запуску |
Що читати далі
Функції — задайте функцію, прочитайте виклик, продовжте новим запуском.
AI-модель — налаштування, порти й вихід вузла.
Моделі та ціни — які інструменти має кожна модель і скільки вони коштують.
Бюджети — жорсткий бюджет і найгірший випадок виклику.