Движок Strands
Libre WebUI содержит встроенный движок агентов на основе открытого
Strands Agents harness
(@strands-agents/harness 0.1.1 на @strands-agents/sdk 1.19.0). Он работает
внутри процесса бэкенда 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 в выборе модели. Этот пункт находится в группе Агенты рядом с моделями Agent CLI:
- Strands (
strands) использует модель движка по умолчанию, то есть вашу модель чата по умолчанию. - Strands · модель (провайдер) (
strands:<route>) закрепляет за разговором одну модель и её провайдера.
Strands в чате зависит только от доступа к Strands. Ему не нужен переключатель моделей Agent 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; любое другое значение блокирует движок в выключенном состоянии |