Sari la conținutul principal

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:

ModEticheta din setareCine poate folosi Strands
disabledDezactivatNimeni, nici administratorii (implicit)
adminsAdministratoriAdministratorii activi
all-usersToți utilizatoriiOrice 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 și edit, pentru fișierele din spațiul său de lucru
  • pluginul todos al 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.

ElementLimită
Sesiuni pe cont200
Lungimea promptului32.000 de caractere
Ture de agent pe mesaj24
Citire sau scriere de fișier2 MB pe apel
Titlul sesiunii120 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 contului
  • sessions/: instantaneele sesiunilor Strands pe care agentul le folosește drept context
  • transcripts/: transcrierea afișată pe pagina Strands pentru fiecare sesiune
  • workspaces/: spațiul de lucru privat al fiecărei sesiuni
  • chat-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ăCaleScop
GET/api/strands/accessCitește modul de acces și dacă LIBRE_STRANDS_ACCESS îl fixează (admin)
PUT/api/strands/accessSetează mode la disabled, admins sau all-users (admin; 409 dacă este fixat)
GET/api/strands/healthDisponibilitatea motorului și versiunile harness-ului și ale SDK-ului
GET/api/strands/modelsModelele pe care motorul le poate folosi pentru acest cont
GET/api/strands/sessionsListează sesiunile
POST/api/strands/sessionsCreează o sesiune (title și model opționale)
GET/api/strands/sessions/:sessionIdCitește o sesiune, transcrierea ei și dacă o tură rulează
PATCH/api/strands/sessions/:sessionIdSchimbă 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/messagesTrimite { "text": "..." } și transmite tura ca NDJSON
POST/api/strands/sessions/:sessionId/cancelOpreș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ăImplicitScop
LIBRE_STRANDS_ACCESSnesetată (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.