Рушій Strands
Libre WebUI містить вбудований рушій агентів на основі відкритого Strands Agents harness (@strands-agents/harness 0.1.1 на @strands-agents/sdk 1.19.0). Він працює всередині процесу backend Libre WebUI, тож окремий демон встановлювати не потрібно. SDK завантажується під час першого використання рушія; сервер, на якому Strands вимкнено, його взагалі не завантажує.
Рушій працює з моделями, які вже обслуговує Libre WebUI:
- моделі Ollama, якщо Ollama ввімкнено
- моделі з активних плагінів провайдерів чату або доповнення
Кожен виклик моделі проходить через ті самі сервіси Ollama і плагінів, що й у чаті. Окремого налаштування провайдерів і окремого ключа API немає. Облікові дані провайдерів і перемикач Ollama діють без змін.
Рушій доступний у трьох місцях:
- на сторінці Strands, для постійних сеансів агента
- у розділі Чат, через пункти Strands у виборі моделей
- у Work, як варіант Strands елемента керування Рушій у полі введення
Доступ
Адміністратор визначає, хто може користуватися рушієм, у розділі Налаштування → Керування користувачами → Доступ і політики → Рушій Strands:
| Режим | Назва в налаштуванні | Хто може користуватися Strands |
|---|---|---|
disabled | Вимк. | Ніхто, навіть адміністратори (за замовчуванням) |
admins | Адміністратори | Активні адміністратори |
all-users | Усі користувачі | Кожен активний обліковий запис |
Зміна набуває чинності з наступного запиту, без перезапуску.
Щоб закріпити режим на рівні розгортання, задайте LIBRE_STRANDS_ACCESS:
LIBRE_STRANDS_ACCESS=admins # or disabled, all-users
Закріплений режим блокує елемент керування в розділі «Керування користувачами». Будь-яке значення, крім disabled, admins або all-users, вимикає рушій, а не повертає до збереженого налаштування.
Сервер перевіряє режим під час кожного запиту REST, у чаті через WebSocket і під час кожного виклику моделі в запуску Work. Якщо режим не вдається прочитати, у доступі відмовлено. Облікові записи без доступу не бачать сторінки Strands, пунктів Strands у чаті та рушія Strands у Work, а API відповідає 403.
Сторінка Strands
Відкрийте Strands на бічній панелі (/strands).
- Сеанси зберігаються після перезапусків, до 200 на обліковий запис. Перше повідомлення дає назву новому сеансу.
- Для кожного сеансу можна вибрати модель. Модель за замовчуванням використовує вашу типову модель чату.
- Відповіді надходять потоком під час генерації, разом із міркуваннями моделі та карткою для кожного виклику інструмента.
- Зупинити скасовує поточний хід. Сеанс виконує лише один хід за раз.
- Видалення сеансу видаляє його історію та робочу область.
Чат
Виберіть Strands у виборі моделей. Цей пункт з’являється в групі Агенти поруч із моделями агентів CLI:
- Strands (
strands) використовує типову модель рушія, тобто вашу типову модель чату. - Strands · модель (провайдер) (
strands:<route>) закріплює для розмови одну модель і її провайдера.
Strands у чаті залежить лише від доступу до Strands. Йому не потрібен перемикач моделей агентів CLI, і він з’являється, навіть коли цей перемикач вимкнено. У чаті агент має ті самі файлові інструменти, що й на сторінці Strands, в одній приватній робочій області на обліковий запис, а його відповіді надходять як текст і міркування. Про групу «Агенти» і про використання пункту Strands як моделі завдань для заголовків і підсумків міркувань див. Встановлені агенти програмування.
Work
У полі введення Work виберіть Libre WebUI або Strands в елементі керування Рушій, а модель виберіть окремо. Зі Strands агент Strands планує кожен крок, а Work виконує запитані ним інструменти в пісочниці Work за звичайною політикою схвалень Work. Work залишається головним джерелом для розшифровки, схвалень, виконання інструментів та історії запусків; власних інструментів агент Strands у Work не запускає.
Базова модель провайдера має підтримувати виклик інструментів. Work перевіряє це перед початком запуску й відхиляє модель, яка не заявляє підтримки інструментів.
Запуски Work, збережені попередніми випусками з префіксом моделі dsh:, відкриваються як запуски Strands. Як вибір рушія взаємодіє з моделями, перенесеними з чату, описано в розділі Work: рушій Strands.
Модель безпеки
На сторінці Strands і в чаті агент має навмисно невеликий набір інструментів:
read,writeіedit, для файлів у його робочій області- плагін harness
todos, для планування багатокрокової роботи
У нього немає оболонки, завантаження вебсторінок, пам’яті та навичок, а файл AGENTS.md не додається до його інструкцій.
Кожен сеанс має приватний каталог робочої області, який агент бачить як /workspace. Кожен шлях розв’язується після переходу за символьними посиланнями й має залишатися всередині цього каталогу, тож посилання в робочій області не може дістатися решти диска. Пісочниця відмовляється виконувати команди.
| Елемент | Ліміт |
|---|---|
| Сеансів на обліковий запис | 200 |
| Довжина промпту | 32 000 символів |
| Ходів агента на повідомлення | 24 |
| Читання або запис файлу | 2 МБ за виклик |
| Заголовок сеансу | 120 символів |
Хід, що досягає ліміту ходів, зупиняється й повідомляє про це. Кожен хід може робити кілька викликів моделей до ваших провайдерів, тож надавайте доступ так само обережно, як і будь-який інший доступ до моделей, що витрачає бюджет провайдера.
Сховище
Дані Strands зберігаються в <DATA_DIR>/strands/, а не в базі даних застосунку. Кожен обліковий запис має власний каталог <DATA_DIR>/strands/users/<account-hash>/, який містить:
registry.json: список сеансів облікового записуsessions/: знімки сеансів Strands, які агент використовує як контекстtranscripts/: розшифровка кожного сеансу, яку показує сторінка Strandsworkspaces/: приватна робоча область кожного сеансуchat-workspace/: робоча область для ходів у чаті
Додайте <DATA_DIR>/strands/ до резервних копій, якщо сеанси для вас важливі.
Використання
Використання провайдерів (/usage) зараховує виклики Strands агенту Strands у своєму розділі Агенти. Див. Використання агентів.
API
Кожен маршрут потребує автентифікованого облікового запису з доступом до Strands, крім /api/strands/access, для якого потрібен адміністратор.
| Метод | Шлях | Призначення |
|---|---|---|
GET | /api/strands/access | Прочитати режим доступу й те, чи закріплює його LIBRE_STRANDS_ACCESS (адмін) |
PUT | /api/strands/access | Задати mode як disabled, admins або all-users (адмін; 409, якщо закріплено) |
GET | /api/strands/health | Доступність рушія та версії harness і SDK |
GET | /api/strands/models | Моделі, з якими рушій може працювати для цього облікового запису |
GET | /api/strands/sessions | Список сеансів |
POST | /api/strands/sessions | Створити сеанс (необов’язкові title і model) |
GET | /api/strands/sessions/:sessionId | Прочитати сеанс, його розшифровку й те, чи виконується хід |
PATCH | /api/strands/sessions/:sessionId | Змінити заголовок або модель сеансу |
DELETE | /api/strands/sessions/:sessionId | Видалити сеанс разом із розшифровкою та робочою областю |
POST | /api/strands/sessions/:sessionId/messages | Надіслати { "text": "..." } і отримати хід потоком як NDJSON |
POST | /api/strands/sessions/:sessionId/cancel | Зупинити поточний хід |
Потік повідомлень записує одну подію JSON на рядок: turn-start, text, reasoning, tool-start, tool-result, done (із причиною зупинки та використанням токенів, якщо провайдер його повідомляє) і error. Закриття з’єднання скасовує хід. Надсилання повідомлення під час виконання ходу повертає 409.
Налаштування
| Змінна | За замовчуванням | Призначення |
|---|---|---|
LIBRE_STRANDS_ACCESS | не задано (налаштування адміністратора, admins) | Закріплює disabled, admins або all-users; будь-яке інше значення вимикає рушій |
Усунення несправностей
Див. Проблеми рушія Strands.