Motorul Strands
Libre WebUI integrează un motor de agenți construit pe Strands Agents harness, un proiect open source (@strands-agents/harness 0.1.1 peste @strands-agents/sdk 1.19.0). Motorul rulează în interiorul procesului backend Libre WebUI, deci nu trebuie instalat niciun daemon separat. SDK-ul se încarcă prima dată când motorul este folosit; un server cu Strands dezactivat nu îl încarcă niciodată.
Motorul folosește modelele pe care Libre WebUI le servește deja:
- modelele Ollama, când Ollama este activat
- modelele din pluginurile active de furnizor pentru chat sau completare
Fiecare apel de model trece prin aceleași servicii Ollama și de pluginuri pe care le folosește Chat. Nu există o configurare separată a furnizorilor și nici o cheie API separată. Datele de autentificare ale furnizorilor și comutatorul Ollama se aplică neschimbate.
Puteți folosi motorul în trei locuri:
- pagina Strands, pentru sesiuni de agent persistente
- Chat, prin intrările Strands din selectorul de modele
- Work, ca opțiunea Strands a controlului Motor din compozitor
Acces
Un administrator alege cine poate folosi motorul în Setări → Gestionarea utilizatorilor → Acces și politici → Motorul Strands:
| Mod | Eticheta din setare | Cine poate folosi Strands |
|---|---|---|
disabled | Dezactivat | Nimeni, nici administratorii (implicit) |
admins | Administratori | Administratorii activi |
all-users | Toți utilizatorii | Orice cont activ |
O modificare intră în vigoare la următoarea cerere, fără repornire.
Pentru a fixa modul la nivelul implementării, setați LIBRE_STRANDS_ACCESS:
LIBRE_STRANDS_ACCESS=admins # or disabled, all-users
Un mod fixat blochează controlul din Gestionarea utilizatorilor. Orice altă valoare decât disabled, admins sau all-users blochează motorul în starea dezactivată, în loc să revină la setarea salvată.
Serverul aplică modul la fiecare cerere REST, în chatul prin WebSocket și la fiecare apel de model dintr-o rulare Work. Dacă modul nu poate fi citit, accesul este refuzat. Conturile fără acces nu văd pagina Strands, intrările Strands din chat sau motorul Strands din Work, iar API-ul răspunde cu 403.
Pagina Strands
Deschideți Strands din bara laterală (/strands).
- Sesiunile se păstrează după reporniri, până la 200 pe cont. Primul mesaj dă numele unei sesiuni noi.
- Alegeți un model pentru fiecare sesiune. Model implicit folosește modelul de chat implicit.
- Răspunsurile sunt transmise pe măsură ce sunt generate, împreună cu raționamentul modelului și un card pentru fiecare apel de instrument.
- Oprire anulează tura în curs. O sesiune rulează o singură tură o dată.
- Ștergerea unei sesiuni elimină istoricul și spațiul ei de lucru.
Chat
Alegeți Strands în selectorul de modele. Apare în grupul Agents, lângă modelele Agent CLI:
- Strands (
strands) folosește valoarea implicită a motorului, adică modelul de chat implicit. - Strands · model (furnizor) (
strands:<route>) fixează un model și furnizorul lui pentru conversație.
Strands în Chat depinde doar de accesul la Strands. Nu are nevoie de comutatorul pentru modelele Agent CLI și apare chiar dacă acel comutator este oprit. În Chat, agentul are aceleași instrumente pentru fișiere ca pe pagina Strands, într-un singur spațiu de lucru privat pe cont, iar răspunsurile lui sosesc ca text și raționament. Consultați Agenți de programare instalați pentru grupul Agents și pentru folosirea unei intrări Strands ca model de sarcini pentru titluri și rezumate ale raționamentului.
Work
În compozitorul Work, alegeți Libre WebUI sau Strands în controlul Motor și selectați modelul separat. Cu Strands, un agent Strands planifică fiecare pas, iar Work execută instrumentele cerute de acesta în sandboxul Work, conform politicii obișnuite de aprobare din Work. Work rămâne autoritatea pentru transcriere, aprobări, executarea instrumentelor și istoricul rulărilor; agentul Strands nu rulează niciun instrument propriu în Work.
Modelul furnizorului de dedesubt trebuie să accepte apelarea instrumentelor. Work verifică acest lucru înainte de începerea unei rulări și respinge un model care nu declară suport pentru instrumente.
Rulările Work salvate de versiunile anterioare cu prefixul de model dsh: se deschid ca rulări Strands. Consultați Work: motorul Strands pentru a vedea cum interacționează alegerea motorului cu modelele preluate din Chat.
Modelul de securitate
Pe pagina Strands și în Chat, agentul are intenționat un set restrâns de instrumente:
read,writeșiedit, pentru fișierele din spațiul său de lucru- pluginul
todosal harness-ului, pentru planificarea lucrărilor în mai mulți pași
Nu are shell, preluare web, memorie sau skilluri, iar niciun fișier AGENTS.md nu este injectat în instrucțiunile sale.
Fiecare sesiune are un director privat de spațiu de lucru, pe care agentul îl vede ca /workspace. Fiecare cale este rezolvată după urmarea legăturilor simbolice și trebuie să rămână în acel director, astfel încât o legătură din spațiul de lucru nu poate ajunge la restul discului. Sandboxul refuză să execute comenzi.
| Element | Limită |
|---|---|
| Sesiuni pe cont | 200 |
| Lungimea promptului | 32.000 de caractere |
| Ture de agent pe mesaj | 24 |
| Citire sau scriere de fișier | 2 MB pe apel |
| Titlul sesiunii | 120 de caractere |
O tură care atinge limita de ture se oprește și anunță acest lucru. Fiecare tură poate face mai multe apeluri de model către furnizorii dumneavoastră, așa că acordați accesul cu aceeași grijă ca pentru orice alt acces la modele care consumă bugetul furnizorului.
Stocare
Datele Strands se află în <DATA_DIR>/strands/, nu în baza de date a aplicației. Fiecare cont are propriul director, <DATA_DIR>/strands/users/<account-hash>/, care conține:
registry.json: lista de sesiuni a contuluisessions/: instantaneele sesiunilor Strands pe care agentul le folosește drept contexttranscripts/: transcrierea afișată pe pagina Strands pentru fiecare sesiuneworkspaces/: spațiul de lucru privat al fiecărei sesiunichat-workspace/: spațiul de lucru folosit de turele din Chat
Includeți <DATA_DIR>/strands/ în copiile de rezervă dacă sesiunile sunt importante pentru dumneavoastră.
Utilizare
Provider Usage (/usage) atribuie apelurile Strands agentului Strands din secțiunea sa Agents. Consultați Utilizarea agenților.
API
Fiecare rută necesită un cont autentificat cu acces la Strands, cu excepția /api/strands/access, care necesită un administrator.
| Metodă | Cale | Scop |
|---|---|---|
GET | /api/strands/access | Citește modul de acces și dacă LIBRE_STRANDS_ACCESS îl fixează (admin) |
PUT | /api/strands/access | Setează mode la disabled, admins sau all-users (admin; 409 dacă este fixat) |
GET | /api/strands/health | Disponibilitatea motorului și versiunile harness-ului și ale SDK-ului |
GET | /api/strands/models | Modelele pe care motorul le poate folosi pentru acest cont |
GET | /api/strands/sessions | Listează sesiunile |
POST | /api/strands/sessions | Creează o sesiune (title și model opționale) |
GET | /api/strands/sessions/:sessionId | Citește o sesiune, transcrierea ei și dacă o tură rulează |
PATCH | /api/strands/sessions/:sessionId | Schimbă titlul sau modelul unei sesiuni |
DELETE | /api/strands/sessions/:sessionId | Șterge o sesiune împreună cu transcrierea și spațiul ei de lucru |
POST | /api/strands/sessions/:sessionId/messages | Trimite { "text": "..." } și transmite tura ca NDJSON |
POST | /api/strands/sessions/:sessionId/cancel | Oprește tura în curs |
Fluxul de mesaje scrie câte un eveniment JSON pe linie: turn-start, text, reasoning, tool-start, tool-result, done (cu motivul opririi și consumul de tokeni când furnizorul îl raportează) și error. Închiderea conexiunii anulează tura. Trimiterea unui mesaj în timp ce o tură rulează returnează 409.
Configurare
| Variabilă | Implicit | Scop |
|---|---|---|
LIBRE_STRANDS_ACCESS | nesetată (setarea de administrare, admins) | Fixează disabled, admins sau all-users; orice altă valoare blochează motorul în starea dezactivată |
Depanare
Consultați Probleme cu motorul Strands.