Перейти до основного вмісту

Інструменти чату

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 — наприклад, погода

  1. Налаштування → Інструменти → Зареєструвати сервер: ім’я Weather, тип OpenAPI, базовий URL https://api.example-weather.dev, URL специфікації https://api.example-weather.dev/openapi.json, автентифікація bearer.

  2. Специфікація фіксується, а операції стають інструментами, наприклад getForecast (GET, читання) і createAlert (POST, побічний ефект).

  3. Кожен користувач зберігає власний ключ API на картці сервера.

  4. У чаті:

    Який прогноз для Монреаля на ці вихідні?

    weather__getForecast {"city": "Montreal"} виконується одразу.

    Сповісти мене, якщо сьогодні вночі температура впаде нижче -20.

    weather__createAlert призупиняє хід із карткою Дозволити один раз, Дозволити для чату, Завжди дозволяти або Відхилити. До вибору нічого не надсилається.

Сервер MCP — наприклад, трекер задач

  1. Налаштування → Інструменти → Зареєструвати сервер: ім’я Issues, тип MCP, URL https://mcp.example-tracker.dev/mcp, автентифікація header із X-Api-Key.

  2. Список фіксується; позначені сервером інструменти читання, як search_issues, виконуються одразу, інші, як create_issue, запитують дозвіл.

  3. У чаті:

    Знайди відкриті задачі зі словами «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 поки не можна зареєструвати.