Saltar al contenido principal

Motor Strands

Libre WebUI integra un motor de agentes basado en el harness de código abierto de Strands Agents (@strands-agents/harness 0.1.1 sobre @strands-agents/sdk 1.19.0). Se ejecuta dentro del proceso del backend de Libre WebUI, así que no hay que instalar ningún daemon aparte. El SDK se carga la primera vez que se usa el motor; un servidor con Strands desactivado nunca lo carga.

El motor trabaja con los modelos que Libre WebUI ya sirve:

  • modelos de Ollama, cuando Ollama está habilitado
  • modelos de los plugins de proveedores de chat o de completado que estén activos

Cada llamada al modelo pasa por los mismos servicios de Ollama y de plugins que usa Chat. No hay una configuración de proveedores aparte ni una clave API aparte. Las credenciales de los proveedores y el interruptor de Ollama se aplican sin cambios.

Puedes usar el motor en tres lugares:

  • la página Strands, para sesiones de agente persistentes
  • Chat, mediante las entradas Strands del selector de modelos
  • Work, como la opción Strands del control Motor del compositor

Acceso​

Un administrador elige quién puede usar el motor en Configuración → Gestión de usuarios → Acceso y políticas → Motor Strands:

ModoEtiqueta en el ajusteQuién puede usar Strands
disabledDesactivadoNadie, administradores incluidos (predeterminado)
adminsAdministradoresAdministradores activos
all-usersTodos los usuariosTodas las cuentas activas

Los cambios surten efecto en la siguiente solicitud, sin reiniciar.

Para fijar el modo a nivel de despliegue, define LIBRE_STRANDS_ACCESS:

LIBRE_STRANDS_ACCESS=admins # or disabled, all-users

Un modo fijado bloquea el control en Gestión de usuarios. Cualquier valor distinto de disabled, admins o all-users deja el motor bloqueado en desactivado en lugar de recurrir al ajuste guardado.

El servidor aplica el modo en cada solicitud REST, en el chat por WebSocket y en cada llamada al modelo de una ejecución de Work. Si no se puede leer el modo, se deniega el acceso. Las cuentas sin acceso no ven la página Strands, las entradas Strands del chat ni el motor Strands de Work, y la API responde 403.

Página Strands​

Abre Strands desde la barra lateral (/strands).

  • Las sesiones se conservan tras reiniciar, hasta 200 por cuenta. El primer mensaje da nombre a una sesión nueva.
  • Elige un modelo para cada sesión. Modelo predeterminado usa tu modelo de chat predeterminado.
  • Las respuestas se transmiten a medida que se generan, con el razonamiento del modelo y una tarjeta por cada llamada a herramientas.
  • Detener cancela el turno en curso. Una sesión ejecuta un solo turno a la vez.
  • Eliminar una sesión borra su historial y su espacio de trabajo.

Chat​

Elige Strands en el selector de modelos. Aparece en el grupo Agentes, junto a los modelos de agentes CLI:

  • Strands (strands) usa el valor predeterminado del motor, que es tu modelo de chat predeterminado.
  • Strands · modelo (proveedor) (strands:<route>) fija un modelo y su proveedor para la conversación.

Strands en Chat depende únicamente del acceso a Strands. No necesita el interruptor de modelos de agentes CLI y aparece aunque ese interruptor esté desactivado. En Chat, el agente tiene las mismas herramientas de archivos que en la página Strands, en un espacio de trabajo privado por cuenta, y sus respuestas llegan como texto y razonamiento. Consulta Agentes de programación instalados para conocer el grupo Agentes y cómo usar una entrada Strands como modelo de tareas para títulos y resúmenes de razonamiento.

Work​

En el compositor de Work, elige Libre WebUI o Strands en el control Motor y selecciona el modelo por separado. Con Strands, un agente Strands planifica cada paso y Work ejecuta las herramientas que solicita en el entorno aislado de Work, bajo la política de aprobación habitual de Work. Work sigue siendo la referencia para la transcripción, las aprobaciones, la ejecución de herramientas y el historial de ejecuciones; el agente Strands no ejecuta herramientas propias en Work.

El modelo del proveedor subyacente debe admitir llamadas a herramientas. Work lo comprueba antes de que empiece una ejecución y rechaza los modelos que no declaran compatibilidad con herramientas.

Las ejecuciones de Work guardadas por versiones anteriores con el prefijo de modelo dsh: se abren como ejecuciones de Strands. Consulta Work: motor Strands para ver cómo interactúa la elección del motor con los modelos que llegan desde Chat.

Modelo de seguridad​

En la página Strands y en Chat, el agente tiene un conjunto de herramientas deliberadamente reducido:

  • read, write y edit, para los archivos de su espacio de trabajo
  • el plugin todos del harness, para planificar trabajo de varios pasos

No tiene shell, ni descarga de páginas web, ni memoria, ni habilidades, y no se inyecta ningún archivo AGENTS.md en sus instrucciones.

Cada sesión tiene un directorio de espacio de trabajo privado, que el agente ve como /workspace. Cada ruta se resuelve después de seguir los enlaces simbólicos y debe quedar dentro de ese directorio, así que un enlace del espacio de trabajo no puede llegar al resto del disco. El entorno aislado se niega a ejecutar comandos.

ElementoLímite
Sesiones por cuenta200
Longitud del prompt32 000 caracteres
Turnos del agente por mensaje24
Lectura o escritura de archivo2 MB por llamada
Título de la sesión120 caracteres

Un turno que alcanza el límite de turnos se detiene y lo indica. Cada turno puede hacer varias llamadas al modelo a tus proveedores, así que concede el acceso con el mismo cuidado que cualquier otro acceso a modelos que consuma presupuesto de proveedores.

Almacenamiento​

Los datos de Strands se guardan en <DATA_DIR>/strands/, no en la base de datos de la aplicación. Cada cuenta tiene su propio directorio, <DATA_DIR>/strands/users/<account-hash>/, que contiene:

  • registry.json: la lista de sesiones de la cuenta
  • sessions/: las instantáneas de sesión de Strands que el agente usa como contexto
  • transcripts/: la transcripción que se muestra en la página Strands para cada sesión
  • workspaces/: el espacio de trabajo privado de cada sesión
  • chat-workspace/: el espacio de trabajo que usan los turnos de Chat

Incluye <DATA_DIR>/strands/ en las copias de seguridad si las sesiones te importan.

Uso​

Uso del proveedor (/usage) atribuye las llamadas de Strands al agente Strands en su sección Agentes. Consulta Uso de agentes.

API​

Todas las rutas requieren una cuenta autenticada con acceso a Strands, excepto /api/strands/access, que requiere un administrador.

MétodoRutaFinalidad
GET/api/strands/accessLeer el modo de acceso y si LIBRE_STRANDS_ACCESS lo fija (administrador)
PUT/api/strands/accessEstablecer mode en disabled, admins o all-users (administrador; 409 si está fijado)
GET/api/strands/healthDisponibilidad del motor y versiones del harness y del SDK
GET/api/strands/modelsModelos que el motor puede usar para esta cuenta
GET/api/strands/sessionsListar las sesiones
POST/api/strands/sessionsCrear una sesión (title y model opcionales)
GET/api/strands/sessions/:sessionIdLeer una sesión, su transcripción y si hay un turno en curso
PATCH/api/strands/sessions/:sessionIdCambiar el título o el modelo de una sesión
DELETE/api/strands/sessions/:sessionIdEliminar una sesión junto con su transcripción y su espacio de trabajo
POST/api/strands/sessions/:sessionId/messagesEnviar { "text": "..." } y transmitir el turno como NDJSON
POST/api/strands/sessions/:sessionId/cancelDetener el turno en curso

El flujo de mensajes escribe un evento JSON por línea: turn-start, text, reasoning, tool-start, tool-result, done (con el motivo de parada y el uso de tokens cuando el proveedor lo informa) y error. Cerrar la conexión cancela el turno. Enviar un mensaje mientras hay un turno en curso devuelve 409.

Configuración​

VariablePredeterminadoFinalidad
LIBRE_STRANDS_ACCESSsin definir (ajuste administrativo, admins)Fijar disabled, admins o all-users; cualquier otro valor deja el motor bloqueado en desactivado

Solución de problemas​

Consulta Problemas del motor Strands.