Функції у флоу — модель просить, ваш код виконує
Задайте функцію у вузла моделі, прочитайте виклик, про який просить модель, і продовжте розмову новим запуском.
4 хв читання
Функція — це інструмент, який виконує ваш код. Вузол моделі описує її моделі; коли модель просить її викликати, запуск відповідає цим викликом — іменем функції та її аргументами, — а ваш код виконує функцію і надсилає результат у наступному запуску. Ця сторінка показує таке коло — від налаштувань до другого запиту.
Чому коло йде поза флоу
Флоу йде вперед: жоден зв’язок не може вести назад до вузла, який уже виконався. Тому флоу викликає модель один раз, а коло «модель → функція → модель» робить ваш код: один запуск просить, ваш код відповідає, наступний запуск продовжує. Вузол моделі сам функцію не виконує.
Задайте функцію
У розділі Інструменти вузла AI-модель натисніть Додати функцію, потім заповніть:
ім’я — латинські літери, цифри,
_і-, до 64 символів, унікальне у вузлі;опис — що робить функція і коли її викликати; його читає модель;
аргументи — JSON Schema об’єкта (
"type": "object"), не більше 16 КБ;Строгі аргументи — чи має модель триматися схеми точно.
Вибір інструмента каже, чи мусить модель скористатися інструментом: типово вирішує модель; її можна також попросити завжди використовувати інструмент, ніколи не використовувати або завжди викликати одну функцію. У налаштуваннях функція виглядає так:
{
"type": "function",
"name": "get_weather",
"description": "The current weather in a city",
"parameters": { "type": "object", "properties": { "city": { "type": "string" } }, "required": ["city"] },
"strict": true
}Функції приймає кожна модель каталогу. Gemini 2.5 приймає їх лише без вбудованого інструмента поруч — Інструменти.
Під’єднайте порт
Відповідь, яка просить викликати функцію, виходить із вузла через Виклик функції. Під’єднайте його до Повернути відповідь: тоді запуск відповідає коду, що викликає, цим викликом. Без зв’язку така відповідь виходить через Успіх, як будь-яка інша, а перевірка флоу попереджає про вузол із функціями без такого зв’язку (tool_calls_port_not_connected).
Шаблон Функція через код, що викликає — це такий флоу, готовий до публікації, — Шаблони AI-флоу.
- Запит — Типовий → AI-модель
- AI-модель — Успіх → Повернути відповідь
- AI-модель — Виклик функції → Повернути відповідь
Прочитайте виклик
Вихід вузла має finish_reason tool_calls, а tool_calls перелічує функції, які попросила модель, — в одній формі в усіх провайдерів:
{
"model": "gpt-4o-mini",
"content": null,
"finish_reason": "tool_calls",
"tool_calls": [
{ "id": "call_8fz2", "name": "get_weather", "arguments": { "city": "Kyiv" }, "arguments_json": "{\"city\":\"Kyiv\"}" }
]
}idназиває виклик; ваша відповідь посилається на нього. Виклик, якому провайдер не дав id, отримує його від Slen.arguments— розібраний об’єкт, аarguments_json— текст, як його надіслав провайдер. Коли цей текст — невалідний JSON,argumentsдорівнюєnull, а текст лишається.Виклик моделі, яка попросила функцію, оплачується як будь-який інший виклик: його вхід і вихід. Сама функція в провайдера нічого не коштує.
Продовжте новим запуском
Виконайте функцію, потім надішліть новий запит до тієї самої операції. Його input.messages несе всю розмову: повідомлення, які ви надіслали, відповідь моделі з її викликом і повідомлення з role tool, у якому результат лежить під id виклику. Slen перекладає цю історію у форму провайдера моделі.
{
"operation": "weather_assistant",
"input": {
"messages": [
{ "role": "user", "content": "What is the weather in Kyiv?" },
{ "role": "assistant", "content": null, "tool_calls": [{ "id": "call_8fz2", "type": "function", "function": { "name": "get_weather", "arguments": "{\"city\":\"Kyiv\"}" } }] },
{ "role": "tool", "tool_call_id": "call_8fz2", "content": "{\"temperature_c\": 12, \"sky\": \"cloudy\"}" }
]
}
}Через HTTP це запит POST /v1/operations/execute із цим тілом і власним ключем ідемпотентності:
curl https://api.slen.ai/v1/operations/execute \
-H "Authorization: Bearer $SLEN_API_KEY" \
-H "Idempotency-Key: weather-42:round-2" \
-H "Content-Type: application/json" \
-d @next-round.jsonІз SDK це той самий operations.execute(), що й перший запит, із цими messages у вході — Надіслати запит. Другий запуск відповідає текстом через Успіх або просить іншу функцію.
Що читати далі
Інструменти — вбудовані інструменти, їхні ціни і що обмежує виклик.
AI-модель — порти й вихід вузла.
Повернути відповідь — чим відповідає запуск.
Надіслати запит — запит до флоу з вашого застосунку.