Przejdź do głównej zawartości

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:

TrybEtykieta w ustawieniuKto może korzystać ze Strands
disabledWył.Nikt, również administratorzy (domyślnie)
adminsAdministratorzyAktywni administratorzy
all-usersWszyscy użytkownicyKaż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, write i edit do plików w jego obszarze roboczym
  • wtyczkę harnessu todos do 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ń.

ElementLimit
Sesje na konto200
Długość promptu32 000 znaków
Tury agenta na wiadomość24
Odczyt lub zapis pliku2 MB na wywołanie
Tytuł sesji120 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 konta
  • sessions/: migawki sesji Strands, których agent używa jako kontekstu
  • transcripts/: transkrypt każdej sesji wyświetlany na stronie Strands
  • workspaces/: prywatny obszar roboczy każdej sesji
  • chat-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żkaPrzeznaczenie
GET/api/strands/accessOdczytuje tryb dostępu i informację, czy przypina go LIBRE_STRANDS_ACCESS (admin)
PUT/api/strands/accessUstawia mode na disabled, admins lub all-users (admin; 409, gdy przypięty)
GET/api/strands/healthDostępność silnika oraz wersje harnessu i SDK
GET/api/strands/modelsModele, z których silnik może korzystać dla tego konta
GET/api/strands/sessionsLista sesji
POST/api/strands/sessionsTworzy sesję (opcjonalnie title i model)
GET/api/strands/sessions/:sessionIdOdczytuje sesję, jej transkrypt i informację, czy trwa tura
PATCH/api/strands/sessions/:sessionIdZmienia tytuł lub model sesji
DELETE/api/strands/sessions/:sessionIdUsuwa sesję wraz z transkryptem i obszarem roboczym
POST/api/strands/sessions/:sessionId/messagesWysyła { "text": "..." } i strumieniuje turę jako NDJSON
POST/api/strands/sessions/:sessionId/cancelZatrzymuje 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​

ZmiennaDomyślniePrzeznaczenie
LIBRE_STRANDS_ACCESSnieustawiona (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.