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

Рушій 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/: розшифровка кожного сеансу, яку показує сторінка Strands
  • workspaces/: приватна робоча область кожного сеансу
  • 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.