Hoppa till huvudinnehåll

Strands-motorn

Libre WebUI har en inbyggd agentmotor som bygger på Strands Agents harness, som är öppen källkod (@strands-agents/harness 0.1.1 på @strands-agents/sdk 1.19.0). Den körs i Libre WebUI:s backendprocess, så det finns ingen separat daemon att installera. SDK:t läses in första gången motorn används. En server där Strands är avstängt läser aldrig in det.

Motorn driver de modeller som Libre WebUI redan tillhandahåller:

  • Ollama-modeller, när Ollama är aktiverat
  • modeller från aktiva leverantörsplugin för chatt eller textkomplettering

Varje modellanrop går genom samma Ollama- och plugintjänster som chatten använder. Det finns ingen separat leverantörskonfiguration och ingen separat API-nyckel. Leverantörernas autentiseringsuppgifter och Ollama-reglaget gäller oförändrade.

Du kan använda motorn på tre ställen:

  • sidan Strands, för beständiga agentsessioner
  • Chatt, via posterna Strands i modellväljaren
  • Work, som alternativet Strands i kompositörens reglage Motor

Åtkomst​

En administratör väljer vem som får använda motorn under Inställningar → Användarhantering → Åtkomst och policyer → Strands-motor:

LägeEtikett i inställningenVem kan använda Strands
disabledAvIngen, inte heller administratörer (standard)
adminsAdministratörerAktiva administratörer
all-usersAlla användareAlla aktiva konton

En ändring börjar gälla vid nästa förfrågan, utan omstart.

Om du vill låsa läget på driftsättningsnivå anger du LIBRE_STRANDS_ACCESS:

LIBRE_STRANDS_ACCESS=admins # or disabled, all-users

Ett låst läge spärrar reglaget i Användarhantering. Alla andra värden än disabled, admins eller all-users låser motorn i avstängt läge i stället för att falla tillbaka på den sparade inställningen.

Servern upprätthåller läget för varje REST-förfrågan, för chatt över WebSocket och för varje modellanrop i en Work-körning. Om läget inte kan läsas nekas åtkomst. Konton utan åtkomst ser varken Strands-sidan, Strands-posterna i chatten eller Strands-motorn i Work, och API:t svarar 403.

Strands-sidan​

Öppna Strands i sidofältet (/strands).

  • Sessioner finns kvar efter omstarter, upp till 200 per konto. Det första meddelandet ger en ny session dess namn.
  • Välj en modell för varje session. Standardmodell använder din standardmodell för chatt.
  • Svaren strömmas medan de genereras, med modellens resonemang och ett kort för varje verktygsanrop.
  • Stoppa avbryter den pågående turen. En session kör en tur i taget.
  • När du tar bort en session tas även dess historik och arbetsyta bort.

Chatt​

Välj Strands i modellväljaren. Posten finns i gruppen Agenter, bredvid Agent CLI-modellerna:

  • Strands (strands) använder motorns standard, som är din standardmodell för chatt.
  • Strands · modell (leverantör) (strands:<route>) låser en modell och dess leverantör för konversationen.

Strands i chatten beror bara på Strands-åtkomsten. Det kräver inte reglaget för Agent CLI-modeller och visas även när det reglaget är avstängt. I chatten har agenten samma filverktyg som på Strands-sidan, i en privat arbetsyta per konto, och svaren kommer som text och resonemang. Se Installerade kodagenter för gruppen Agenter och för hur du använder en Strands-post som uppgiftsmodell för titlar och tankesammanfattningar.

Work​

I Work-kompositören väljer du Libre WebUI eller Strands i reglaget Motor och väljer modellen separat. Med Strands planerar en Strands-agent varje steg, och Work kör de verktyg som agenten begär i Work-sandlådan enligt Works vanliga godkännandepolicy. Work är fortsatt den som bestämmer över transkriptet, godkännanden, verktygskörning och körhistorik. Strands-agenten kör inga egna verktyg i Work.

Den underliggande leverantörsmodellen måste stödja verktygsanrop. Work kontrollerar det innan en körning startar och avvisar en modell som inte anger stöd för verktyg.

Work-körningar som sparats i tidigare versioner med modellprefixet dsh: öppnas som Strands-körningar. Se Work: Strands-motorn för hur motorvalet samverkar med modeller som följer med från chatten.

Säkerhetsmodell​

På Strands-sidan och i chatten har agenten en medvetet liten verktygsuppsättning:

  • read, write och edit, för filer i dess arbetsyta
  • ramverkets plugin todos, för att planera arbete i flera steg

Den har inget skal, ingen webbhämtning, inget minne och inga färdigheter, och ingen AGENTS.md-fil förs in i dess instruktioner.

Varje session har en privat arbetsyta, som agenten ser som /workspace. Varje sökväg löses upp efter att symboliska länkar har följts och måste stanna inom den katalogen, så en länk i arbetsytan kan inte nå resten av disken. Sandlådan vägrar att köra kommandon.

ObjektGräns
Sessioner per konto200
Promptlängd32 000 tecken
Agentturer per meddelande24
Filläsning eller filskrivning2 MB per anrop
Sessionstitel120 tecken

En tur som når gränsen för antal turer stoppas och talar om det. Varje tur kan göra flera modellanrop till dina leverantörer, så ge åtkomst med samma omsorg som all annan modellåtkomst som förbrukar leverantörsbudget.

Lagring​

Strands-data lagras under <DATA_DIR>/strands/, inte i programmets databas. Varje konto har en egen katalog, <DATA_DIR>/strands/users/<account-hash>/, som innehåller:

  • registry.json: kontots sessionslista
  • sessions/: de Strands-sessionsögonblicksbilder som agenten använder som kontext
  • transcripts/: transkriptet som visas på Strands-sidan för varje session
  • workspaces/: varje sessions privata arbetsyta
  • chat-workspace/: arbetsytan som används av chattens turer

Ta med <DATA_DIR>/strands/ i säkerhetskopiorna om sessionerna är viktiga för dig.

Användning​

Leverantörsanvändning (/usage) tillskriver Strands-anrop agenten Strands i avsnittet Agenter. Se Agentanvändning.

API​

Varje route kräver ett autentiserat konto med Strands-åtkomst, utom /api/strands/access, som kräver en administratör.

MetodSökvägSyfte
GET/api/strands/accessLäs åtkomstläget och om LIBRE_STRANDS_ACCESS låser det (admin)
PUT/api/strands/accessSätt mode till disabled, admins eller all-users (admin; 409 om låst)
GET/api/strands/healthMotorns tillgänglighet samt versionerna av ramverket och SDK:t
GET/api/strands/modelsModeller som motorn kan driva för det här kontot
GET/api/strands/sessionsLista sessioner
POST/api/strands/sessionsSkapa en session (valfria title och model)
GET/api/strands/sessions/:sessionIdLäs en session, dess transkript och om en tur pågår
PATCH/api/strands/sessions/:sessionIdÄndra en sessions titel eller modell
DELETE/api/strands/sessions/:sessionIdTa bort en session med dess transkript och arbetsyta
POST/api/strands/sessions/:sessionId/messagesSkicka { "text": "..." } och strömma turen som NDJSON
POST/api/strands/sessions/:sessionId/cancelStoppa den pågående turen

Meddelandeströmmen skriver en JSON-händelse per rad: turn-start, text, reasoning, tool-start, tool-result, done (med stoppanledningen och tokenanvändningen när leverantören rapporterar den) och error. Om anslutningen stängs avbryts turen. Om du skickar ett meddelande medan en tur pågår returneras 409.

Konfiguration​

VariabelStandardSyfte
LIBRE_STRANDS_ACCESSinte satt (administratörsinställning, admins)Lås disabled, admins eller all-users; alla andra värden låser motorn i avstängt läge

Felsökning​

Se Problem med Strands-motorn.