Silnik Strands
Libre WebUI ma wbudowany silnik agentów oparty na otwartoźródłowym
harnessie Strands Agents
(@strands-agents/harness 0.1.1 na @strands-agents/sdk 1.19.0). Działa on
w procesie backendu Libre WebUI, więc nie trzeba instalować osobnego demona.
SDK jest ładowane przy pierwszym użyciu silnika; serwer z wyłączonym Strands
nigdy go nie ładuje.
Silnik korzysta z modeli, które Libre WebUI już udostępnia:
- modeli Ollama, gdy Ollama jest włączona
- modeli z aktywnych wtyczek dostawców czatu lub uzupełnień
Każde wywołanie modelu przechodzi przez te same usługi Ollama i wtyczek, z których korzysta czat. Nie ma osobnej konfiguracji dostawców ani osobnego klucza API. Dane uwierzytelniające dostawców i przełącznik Ollama działają bez zmian.
Z silnika możesz korzystać w trzech miejscach:
- na stronie Strands, w trwałych sesjach agenta
- w widoku Czat, przez pozycje Strands w wyborze modelu
- w Work, jako opcję Strands w kontrolce Silnik w kompozytorze
Dostęp
Administrator decyduje, kto może korzystać z silnika, w Ustawienia → Zarządzanie użytkownikami → Dostęp i zasady → Silnik Strands:
| Tryb | Etykieta w ustawieniu | Kto może korzystać ze Strands |
|---|---|---|
disabled | Wył. | Nikt, również administratorzy (domyślnie) |
admins | Administratorzy | Aktywni administratorzy |
all-users | Wszyscy użytkownicy | Każde aktywne konto |
Zmiana obowiązuje od następnego żądania, bez restartu.
Aby przypiąć tryb na poziomie wdrożenia, ustaw LIBRE_STRANDS_ACCESS:
LIBRE_STRANDS_ACCESS=admins # or disabled, all-users
Przypięty tryb blokuje kontrolkę w Zarządzaniu użytkownikami. Każda wartość
inna niż disabled, admins lub all-users blokuje silnik w stanie
wyłączonym, zamiast wracać do zapisanego ustawienia.
Serwer egzekwuje tryb przy każdym żądaniu REST, w czacie przez WebSocket i
przy każdym wywołaniu modelu w przebiegu Work. Jeśli trybu nie da się
odczytać, dostęp jest odmawiany. Konta bez dostępu nie widzą strony Strands,
pozycji Strands w czacie ani silnika Strands w Work, a API odpowiada 403.
Strona Strands
Otwórz Strands z paska bocznego (/strands).
- Sesje przetrwają restart, maksymalnie 200 na konto. Pierwsza wiadomość nadaje nazwę nowej sesji.
- Dla każdej sesji wybierz model. Model domyślny używa Twojego domyślnego modelu czatu.
- Odpowiedzi są przesyłane strumieniowo w trakcie generowania, razem z rozumowaniem modelu i kartą dla każdego wywołania narzędzia.
- Zatrzymaj anuluje trwającą turę. Sesja wykonuje jedną turę naraz.
- Usunięcie sesji usuwa jej historię i obszar roboczy.
Czat
Wybierz Strands w wyborze modelu. Pozycja pojawia się w grupie Agenci obok modeli Agent CLI:
- Strands (
strands) używa domyślnego modelu silnika, czyli Twojego domyślnego modelu czatu. - Strands · model (dostawca) (
strands:<route>) przypina do rozmowy jeden model i jego dostawcę.
Strands w czacie zależy wyłącznie od dostępu do Strands. Nie wymaga przełącznika modeli Agent CLI i jest widoczny także wtedy, gdy ten przełącznik jest wyłączony. W czacie agent ma te same narzędzia plikowe co na stronie Strands, w jednym prywatnym obszarze roboczym na konto, a jego odpowiedzi przychodzą jako tekst i rozumowanie. Zobacz Zainstalowani agenci programistyczni, aby dowiedzieć się więcej o grupie Agenci i o używaniu pozycji Strands jako modelu zadań do tytułów i podsumowań myślenia.
Work
W kompozytorze Work wybierz Libre WebUI lub Strands w kontrolce Silnik, a model wybierz osobno. Przy Strands agent Strands planuje każdy krok, a Work wykonuje żądane przez niego narzędzia w piaskownicy Work, zgodnie ze zwykłą polityką zatwierdzeń Work. Work pozostaje nadrzędnym źródłem dla transkryptu, zatwierdzeń, wykonywania narzędzi i historii przebiegów; agent Strands nie uruchamia w Work żadnych własnych narzędzi.
Bazowy model dostawcy musi obsługiwać wywoływanie narzędzi. Work sprawdza to przed rozpoczęciem przebiegu i odrzuca model, który nie deklaruje obsługi narzędzi.
Przebiegi Work zapisane przez wcześniejsze wydania z prefiksem modelu dsh:
otwierają się jako przebiegi Strands. Zobacz
Work: silnik Strands, aby dowiedzieć się, jak
wybór silnika współdziała z modelami przeniesionymi z czatu.
Model bezpieczeństwa
Na stronie Strands i w czacie agent ma celowo mały zestaw narzędzi:
read,writeieditdo plików w jego obszarze roboczym- wtyczkę harnessu
todosdo planowania pracy wieloetapowej
Nie ma powłoki, pobierania stron z sieci, pamięci ani umiejętności, a do jego
instrukcji nie jest wstrzykiwany żaden plik AGENTS.md.
Każda sesja ma prywatny katalog obszaru roboczego, który agent widzi jako
/workspace. Każda ścieżka jest rozwiązywana po podążeniu za dowiązaniami
symbolicznymi i musi pozostać wewnątrz tego katalogu, więc dowiązanie w
obszarze roboczym nie sięgnie reszty dysku. Piaskownica odmawia wykonywania
poleceń.
| Element | Limit |
|---|---|
| Sesje na konto | 200 |
| Długość promptu | 32 000 znaków |
| Tury agenta na wiadomość | 24 |
| Odczyt lub zapis pliku | 2 MB na wywołanie |
| Tytuł sesji | 120 znaków |
Tura, która osiągnie limit tur, zatrzymuje się i informuje o tym. Każda tura może wykonać kilka wywołań modeli u Twoich dostawców, więc przyznawaj dostęp z taką samą ostrożnością jak każdy inny dostęp do modeli, który zużywa budżet dostawcy.
Przechowywanie danych
Dane Strands znajdują się w <DATA_DIR>/strands/, a nie w bazie danych
aplikacji. Każde konto ma własny katalog,
<DATA_DIR>/strands/users/<account-hash>/, który zawiera:
registry.json: listę sesji kontasessions/: migawki sesji Strands, których agent używa jako kontekstutranscripts/: transkrypt każdej sesji wyświetlany na stronie Strandsworkspaces/: prywatny obszar roboczy każdej sesjichat-workspace/: obszar roboczy używany przez tury w czacie
Uwzględnij <DATA_DIR>/strands/ w kopiach zapasowych, jeśli zależy Ci na
sesjach.
Użycie
Strona Użycie dostawców (/usage) przypisuje wywołania Strands do agenta
Strands w sekcji Agenci. Zobacz
Użycie agentów.
API
Każda trasa wymaga uwierzytelnionego konta z dostępem do Strands, z wyjątkiem
/api/strands/access, która wymaga administratora.
| Metoda | Ścieżka | Przeznaczenie |
|---|---|---|
GET | /api/strands/access | Odczytuje tryb dostępu i informację, czy przypina go LIBRE_STRANDS_ACCESS (admin) |
PUT | /api/strands/access | Ustawia mode na disabled, admins lub all-users (admin; 409, gdy przypięty) |
GET | /api/strands/health | Dostępność silnika oraz wersje harnessu i SDK |
GET | /api/strands/models | Modele, z których silnik może korzystać dla tego konta |
GET | /api/strands/sessions | Lista sesji |
POST | /api/strands/sessions | Tworzy sesję (opcjonalnie title i model) |
GET | /api/strands/sessions/:sessionId | Odczytuje sesję, jej transkrypt i informację, czy trwa tura |
PATCH | /api/strands/sessions/:sessionId | Zmienia tytuł lub model sesji |
DELETE | /api/strands/sessions/:sessionId | Usuwa sesję wraz z transkryptem i obszarem roboczym |
POST | /api/strands/sessions/:sessionId/messages | Wysyła { "text": "..." } i strumieniuje turę jako NDJSON |
POST | /api/strands/sessions/:sessionId/cancel | Zatrzymuje trwającą turę |
Strumień wiadomości zapisuje jedno zdarzenie JSON na wiersz: turn-start,
text, reasoning, tool-start, tool-result, done (z powodem
zatrzymania i zużyciem tokenów, gdy dostawca je raportuje) oraz error.
Zamknięcie połączenia anuluje turę. Wysłanie wiadomości podczas trwającej tury
zwraca 409.
Konfiguracja
| Zmienna | Domyślnie | Przeznaczenie |
|---|---|---|
LIBRE_STRANDS_ACCESS | nieustawiona (ustawienie administratora, admins) | Przypina disabled, admins lub all-users; każda inna wartość blokuje silnik w stanie wyłączonym |
Rozwiązywanie problemów
Zobacz Problemy z silnikiem Strands.