Aller au contenu principal

Moteur Strands

Libre WebUI intègre un moteur d’agents fondé sur le harnais open source Strands Agents (@strands-agents/harness 0.1.1 sur @strands-agents/sdk 1.19.0). Il s’exécute dans le processus du backend de Libre WebUI : aucun démon séparé n’est donc à installer. Le SDK est chargé à la première utilisation du moteur ; un serveur sur lequel Strands est désactivé ne le charge jamais.

Le moteur pilote les modèles que Libre WebUI sert déjà :

  • les modèles Ollama, lorsque Ollama est activé
  • les modèles des plugins de fournisseurs de chat ou de complétion actifs

Chaque appel de modèle passe par les mêmes services Ollama et de plugins que ceux utilisés par le chat. Il n’y a ni configuration de fournisseur distincte ni clé API distincte. Les identifiants des fournisseurs et l’interrupteur Ollama s’appliquent sans changement.

Vous pouvez utiliser le moteur à trois endroits :

  • la page Strands, pour des sessions d’agent persistantes
  • Chat, grâce aux entrées Strands du sélecteur de modèle
  • Work, comme option Strands du contrôle Moteur du compositeur

Accès​

Un administrateur choisit qui peut utiliser le moteur dans Paramètres → Gestion des utilisateurs → Accès et politiques → Moteur Strands :

ModeLibellé dans le paramètreQui peut utiliser Strands
disabledDésactivéPersonne, administrateurs compris (par défaut)
adminsAdministrateursLes administrateurs actifs
all-usersTous les utilisateursTous les comptes actifs

Une modification prend effet dès la requête suivante, sans redémarrage.

Pour fixer le mode au niveau du déploiement, définissez LIBRE_STRANDS_ACCESS :

LIBRE_STRANDS_ACCESS=admins # or disabled, all-users

Un mode fixé verrouille le contrôle dans Gestion des utilisateurs. Toute valeur autre que disabled, admins ou all-users verrouille le moteur en position désactivée au lieu de revenir au paramètre enregistré.

Le serveur applique le mode à chaque requête REST, au chat WebSocket et à chaque appel de modèle d’une exécution Work. Si le mode ne peut pas être lu, l’accès est refusé. Les comptes sans accès ne voient ni la page Strands, ni les entrées Strands du chat, ni le moteur Strands de Work, et l’API répond 403.

Page Strands​

Ouvrez Strands depuis la barre latérale (/strands).

  • Les sessions sont conservées après un redémarrage, jusqu’à 200 par compte. Le premier message donne son nom à une nouvelle session.
  • Choisissez un modèle pour chaque session. Modèle par défaut utilise votre modèle de chat par défaut.
  • Les réponses s’affichent au fil de leur génération, avec le raisonnement du modèle et une carte pour chaque appel d’outil.
  • Arrêter annule le tour en cours. Une session exécute un seul tour à la fois.
  • Supprimer une session efface son historique et son espace de travail.

Chat​

Choisissez Strands dans le sélecteur de modèle. L’entrée figure dans le groupe Agents, à côté des modèles d’agents CLI :

  • Strands (strands) utilise le modèle par défaut du moteur, c’est-à-dire votre modèle de chat par défaut.
  • Strands · modèle (fournisseur) (strands:<route>) fixe un modèle et son fournisseur pour la conversation.

Dans le chat, Strands dépend uniquement de l’accès à Strands. Il n’a pas besoin de l’interrupteur des modèles d’agents CLI et reste visible lorsque celui-ci est désactivé. Dans le chat, l’agent dispose des mêmes outils de fichiers que sur la page Strands, dans un espace de travail privé par compte, et ses réponses arrivent sous forme de texte et de raisonnement. Consultez Agents de programmation installés pour le groupe Agents et pour utiliser une entrée Strands comme modèle de tâche pour les titres et les résumés de raisonnement.

Work​

Dans le compositeur de Work, choisissez Libre WebUI ou Strands dans le contrôle Moteur, puis sélectionnez le modèle séparément. Avec Strands, un agent Strands planifie chaque étape, et Work exécute les outils qu’il demande dans le bac à sable de Work, selon la politique d’approbation habituelle de Work. Work reste la référence pour la transcription, les approbations, l’exécution des outils et l’historique des exécutions ; dans Work, l’agent Strands n’exécute aucun outil par lui-même.

Le modèle de fournisseur sous-jacent doit prendre en charge l’appel d’outils. Work le vérifie avant le démarrage d’une exécution et refuse un modèle qui n’annonce pas cette prise en charge.

Les exécutions Work enregistrées par des versions antérieures avec un préfixe de modèle dsh: s’ouvrent comme des exécutions Strands. Consultez Work : moteur Strands pour savoir comment le choix du moteur interagit avec les modèles repris depuis le chat.

Modèle de sécurité​

Sur la page Strands et dans le chat, l’agent dispose d’un jeu d’outils volontairement restreint :

  • read, write et edit, pour les fichiers de son espace de travail
  • le plugin todos du harnais, pour planifier un travail en plusieurs étapes

Il n’a ni shell, ni récupération web, ni mémoire, ni compétences, et aucun fichier AGENTS.md n’est injecté dans ses instructions.

Chaque session dispose d’un répertoire d’espace de travail privé, que l’agent voit comme /workspace. Chaque chemin est résolu après le suivi des liens symboliques et doit rester dans ce répertoire : un lien placé dans l’espace de travail ne peut donc pas atteindre le reste du disque. Le bac à sable refuse d’exécuter des commandes.

ÉlémentLimite
Sessions par compte200
Longueur du prompt32 000 caractères
Tours d’agent par message24
Lecture ou écriture de fichier2 Mo par appel
Titre de session120 caractères

Un tour qui atteint la limite de tours s’arrête et le signale. Chaque tour peut effectuer plusieurs appels de modèle auprès de vos fournisseurs : accordez donc l’accès avec le même soin que tout autre accès aux modèles qui consomme le budget des fournisseurs.

Stockage​

Les données Strands se trouvent sous <DATA_DIR>/strands/, et non dans la base de données de l’application. Chaque compte possède son propre répertoire, <DATA_DIR>/strands/users/<account-hash>/, qui contient :

  • registry.json : la liste des sessions du compte
  • sessions/ : les instantanés de session Strands que l’agent utilise comme contexte
  • transcripts/ : la transcription affichée sur la page Strands pour chaque session
  • workspaces/ : l’espace de travail privé de chaque session
  • chat-workspace/ : l’espace de travail utilisé par les tours du chat

Incluez <DATA_DIR>/strands/ dans vos sauvegardes si ces sessions comptent pour vous.

Utilisation​

La page Utilisation des fournisseurs (/usage) attribue les appels Strands à l’agent Strands dans sa section Agents. Consultez Utilisation des agents.

API​

Chaque route exige un compte authentifié disposant de l’accès à Strands, sauf /api/strands/access, qui exige un administrateur.

MéthodeCheminRôle
GET/api/strands/accessLire le mode d’accès et savoir si LIBRE_STRANDS_ACCESS le fixe (admin)
PUT/api/strands/accessDéfinir mode sur disabled, admins ou all-users (admin ; 409 s’il est fixé)
GET/api/strands/healthDisponibilité du moteur et versions du harnais et du SDK
GET/api/strands/modelsModèles que le moteur peut piloter pour ce compte
GET/api/strands/sessionsLister les sessions
POST/api/strands/sessionsCréer une session (title et model facultatifs)
GET/api/strands/sessions/:sessionIdLire une session, sa transcription et savoir si un tour est en cours
PATCH/api/strands/sessions/:sessionIdModifier le titre ou le modèle d’une session
DELETE/api/strands/sessions/:sessionIdSupprimer une session avec sa transcription et son espace de travail
POST/api/strands/sessions/:sessionId/messagesEnvoyer { "text": "..." } et diffuser le tour en NDJSON
POST/api/strands/sessions/:sessionId/cancelArrêter le tour en cours

Le flux de messages écrit un événement JSON par ligne : turn-start, text, reasoning, tool-start, tool-result, done (avec la raison de l’arrêt et la consommation de jetons lorsque le fournisseur la communique) et error. Fermer la connexion annule le tour. Envoyer un message pendant qu’un tour est en cours renvoie 409.

Configuration​

VariableValeur par défautRôle
LIBRE_STRANDS_ACCESSnon définie (paramètre administrateur, administrateurs)Fixer disabled, admins ou all-users ; toute autre valeur verrouille le moteur en position désactivée

Dépannage​

Consultez Problèmes du moteur Strands.