Перейти к основному содержимому

Движок 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; любое другое значение блокирует движок в выключенном состоянии

Устранение неполадок​

См. Проблемы движка Strands.