Інструменти чату
Chat може дозволити моделі викликати інструменти. Хід із ними запускає власний багатоетапний цикл: модель просить інструмент, Libre WebUI виконує його від імені й з дозволами користувача, повертає результат моделі та продовжує до відповіді — не більше восьми раундів і восьми викликів у кожному. Зупинка скасовує модель, поточний інструмент і очікування схвалення.
Виклики записуються як нормалізовані події (chat.tool-call.v1, chat.tool-result.v1, chat.approval.v1), які однаково проходять приватним WebSocket і постійним потоком, тож оновлення або повторне з’єднання відтворює той самий стан. Завершений хід зберігає виклики з обмеженим переглядом результатів у повідомленні асистента.
Увімкнення інструментів
Типово інструменти вимкнено. Адміністратор відкриває їх у Налаштування → Керування користувачами лише адміністраторам або всім, після чого кожен хід вмикає їх гайковим ключем у редакторі. Селектор має загальний перемикач і прапорець кожного вбудованого інструмента та зареєстрованого сервера, тому хід отримує саме вибраний набір. Селектор може звузити інструменти профілю, але не розширити. Приватні чати ніколи не пропонують інструменти: зовнішня дія може залишати схвалення й аудит.
Профіль асистента може обмежити пропозицію прив’язаними серверами, підмножиною вбудованих інструментів, навичками й колекціями знань.
Вбудовані інструменти
Chat містить тринадцять власних інструментів; усі лише читають, крім змін Нотаток і Календаря, що проходять схвалення побічного ефекту:
web_search— налаштована адміністратором пошукова система з режимом доступу.search_documents— гібридний пошук у документах і колекціях, зокрема наданих; профіль може звузити колекції, а кожен уривок має фрагмент і місце джерела.list_documents— перелік документів області чату з ID, типами й розмірами.read_document— обмежене вікно документа за ID і зміщенням із позначеним джерелом.load_skill— повні інструкції навички за slug; опис містить маніфест увімкнених навичок, тому вони завантажуються лише за потреби. Для супровідних файлів додається їх перелік.read_skill_file— один супровідний файл за slug і відносним шляхом.list_notes— власні й надані нотатки з ID.read_note— повний вміст однієї нотатки.create_note— створення нотатки, потребує схвалення.update_note— заміна вмісту зі збереженням попередньої версії, потребує схвалення.list_calendar_events— власні й надані події в діапазоні мілісекунд епохи.create_calendar_event— створення події, потребує схвалення.delete_calendar_event— видалення події за ID, потребує схвалення.
Сервери інструментів
Адміністратори реєструють зовнішні сервери в Налаштування → Інструменти; початкові шаблони заповнюють форму, зокрема безпечним публічним демо API:
- OpenAPI: специфікація JSON OpenAPI 3.x завантажується один раз і фіксується дайджестом SHA-256. Кожна операція стає інструментом;
GETвважається лише читанням, інші — побічним ефектом, доки адміністратор не змінить класифікацію. Виклик відтворюється із зафіксованої операції; аргументи моделі не вибирають місце призначення. - MCP (Streamable HTTP): список інструментів отримується через JSON-RPC і так само фіксується.
annotations.readOnlyHintпозначає читання. MCP через stdio навмисно не підтримується: зовнішні процеси не запускаються у вебпроцесі.
Зміна переліку набуває чинності лише після оновлення адміністратором, що просуває зафіксовану версію й зберігає перевизначення окремих інструментів. Доступність сервера може бути лише для адміністраторів, для всіх або за дозволами користувачів і груп спільної моделі ресурсів.
Облікові дані
Сервери з автентифікацією використовують облікові дані окремих користувачів: bearer-токен або названий заголовок. Кожен секрет шифрується з додатковими автентифікованими даними, що прив’язують його до точних користувача й сервера, вводиться в Налаштування → Інструменти й ніколи не ділиться між обліковими записами.
Політика вихідного трафіку
Кожен запит сам визначає місце призначення, відмовляється від приватних, loopback і метаданих адрес та фіксує з’єднання на визначеній адресі, щоб DNS rebinding не перенаправив виклик. Перенаправлення відхиляються. Відповіді мають ліміт розміру, виклики — жорсткий тайм-аут. Точні внутрішні хости можна дозволити через TOOLS_PRIVATE_NETWORK_ALLOWLIST (список через кому); вони залишаються зафіксованими й обмеженими. Вивід повертається моделі як недовірений текст.
Схвалення
Інструменти лише для читання запускаються без запиту. Побічний ефект призупиняє хід і пропонує: дозволити один раз, для цього чату, завжди для цього інструмента на сервері або відхилити. Рішення постійні — дозвіл «завжди» переживає перезапуск і відкликається в Налаштування → Інструменти — а очікування спливає за дві хвилини й виглядає моделі як відмова. Відмова й тайм-аут ніколи не виконують виклик. Кожне рішення й виклик залишають зредаговану подію аудиту безпеки.
Приклади
Спочатку ввімкніть гайковий ключ; кожен приклад — звичайне повідомлення.
web_search — знайти відомості
Що змінилося в останньому випуску SQLite? Перед відповіддю виконай веб-пошук.
Модель викликає web_search із запитом на кшталт {"query": "SQLite latest release changelog"}, картка показує отримані уривки, а відповідь посилається на знайдене. Потрібне налаштоване й дозволене веб-вишукування.
search_documents — запитати власні файли
Завантажте PDF або додайте документи до колекції, потім:
Знайди в моїх документах умову розірвання й процитуй її точно.
Модель викликає search_documents із {"query": "termination clause"} та отримує уривки з позначеними джерелами.
load_skill — застосувати збережену навичку
Створіть навичку в Налаштування → Навички, наприклад $release-notes, і напишіть:
Підготуй примітки до випуску для цієї різниці за допомогою $release-notes.
Модель бачить її в маніфесті, викликає load_skill {"slug": "release-notes"} і дотримується інструкцій. Символ $ у редакторі доповнює slug навичок.
Сервер OpenAPI — наприклад, погода
-
Налаштування → Інструменти → Зареєструвати сервер: ім’я
Weather, типOpenAPI, базовий URLhttps://api.example-weather.dev, URL специфікаціїhttps://api.example-weather.dev/openapi.json, автентифікаціяbearer. -
Специфікація фіксується, а операції стають інструментами, наприклад
getForecast(GET, читання) іcreateAlert(POST, побічний ефект). -
Кожен користувач зберігає власний ключ API на картці сервера.
-
У чаті:
Який прогноз для Монреаля на ці вихідні?
weather__getForecast {"city": "Montreal"}виконується одразу.Сповісти мене, якщо сьогодні вночі температура впаде нижче -20.
weather__createAlertпризупиняє хід із карткою Дозволити один раз, Дозволити для чату, Завжди дозволяти або Відхилити. До вибору нічого не надсилається.
Сервер MCP — наприклад, трекер задач
-
Налаштування → Інструменти → Зареєструвати сервер: ім’я
Issues, типMCP, URLhttps://mcp.example-tracker.dev/mcp, автентифікаціяheaderізX-Api-Key. -
Список фіксується; позначені сервером інструменти читання, як
search_issues, виконуються одразу, інші, якcreate_issue, запитують дозвіл. -
У чаті:
Знайди відкриті задачі зі словами «database lock» і створи нову з узагальненням закономірності.
issues__search_issuesвиконується одразу;issues__create_issueпоказує точні аргументи до схвалення.
Змінні середовища
| Змінна | Дія |
|---|---|
TOOLS_ACCESS_MODE | Фіксує функцію як admins або all-users і блокує перемикач. |
TOOLS_PRIVATE_NETWORK_ALLOWLIST | Точні хости, яким дозволено визначатися в приватні адреси, через кому. |
Межі
- Виклики працюють через WebSocket і постійний шлях генерації збережених чатів. Приватний транспорт навмисно виключено, а старий потоковий REST не запускає цикл.
- Агенти Work викликають ті самі сервери через той самий шлюз: лише запуски з доступом до мережі, сервери без збережених облікових даних відсіюються на етапі пропозиції, а інструменти з побічним ефектом проходять схвалення Work.
- Gemini й моделі агентів CLI не отримують інструментів; Ollama, сумісні з OpenAI, Responses API та Anthropic отримують.
- MCP використовує статичні облікові дані користувача; сервер лише з інтерактивним OAuth поки не можна зареєструвати.