Lewati ke konten utama

Mesin Strands

Libre WebUI menyertakan mesin agen yang dibangun di atas Strands Agents harness sumber terbuka (@strands-agents/harness 0.1.1 di atas @strands-agents/sdk 1.19.0). Mesin ini berjalan di dalam proses backend Libre WebUI, jadi tidak ada daemon terpisah yang perlu dipasang. SDK baru dimuat saat mesin pertama kali digunakan; server yang mematikan Strands tidak pernah memuatnya.

Mesin ini menjalankan model yang sudah disajikan Libre WebUI:

  • model Ollama, jika Ollama diaktifkan
  • model dari plugin penyedia chat atau completion yang aktif

Setiap panggilan model melewati layanan Ollama dan plugin yang sama dengan yang dipakai Chat. Tidak ada konfigurasi penyedia terpisah dan tidak ada kunci API terpisah. Kredensial penyedia dan sakelar Ollama berlaku tanpa perubahan.

Mesin ini dapat digunakan di tiga tempat:

  • halaman Strands, untuk sesi agen yang persisten
  • Chat, melalui entri Strands di pemilih model
  • Work, sebagai opsi Strands pada kontrol Mesin di composer

Akses​

Administrator menentukan siapa yang dapat menggunakan mesin ini di Pengaturan → Manajemen Pengguna → Akses dan kebijakan → Mesin Strands:

ModeLabel di pengaturanSiapa yang dapat menggunakan Strands
disabledMatiTidak ada, termasuk administrator (bawaan)
adminsAdministratorAdministrator aktif
all-usersSemua penggunaSetiap akun aktif

Perubahan berlaku pada permintaan berikutnya, tanpa restart.

Untuk mengunci mode di tingkat deployment, atur LIBRE_STRANDS_ACCESS:

LIBRE_STRANDS_ACCESS=admins # or disabled, all-users

Mode yang dikunci akan mengunci kontrolnya di Manajemen Pengguna. Nilai apa pun selain disabled, admins, atau all-users justru mengunci mesin dalam keadaan mati, alih-alih kembali ke pengaturan yang tersimpan.

Server menerapkan mode ini pada setiap permintaan REST, pada chat WebSocket, dan pada setiap panggilan model dalam run Work. Jika mode tidak dapat dibaca, akses ditolak. Akun tanpa akses tidak melihat halaman Strands, entri chat Strands, atau mesin Work Strands, dan API menjawab 403.

Halaman Strands​

Buka Strands dari sidebar (/strands).

  • Sesi tetap tersimpan setelah restart, hingga 200 per akun. Pesan pertama menjadi nama sesi baru.
  • Pilih model untuk setiap sesi. Model default memakai model chat default Anda.
  • Balasan dialirkan saat dihasilkan, lengkap dengan penalaran model dan kartu untuk setiap panggilan alat.
  • Hentikan membatalkan giliran yang sedang berjalan. Satu sesi menjalankan satu giliran dalam satu waktu.
  • Menghapus sesi akan menghapus riwayat dan ruang kerjanya.

Chat​

Pilih Strands di pemilih model. Entri ini muncul di grup Agen di samping model agen CLI:

  • Strands (strands) memakai model bawaan mesin, yaitu model chat default Anda.
  • Strands · model (penyedia) (strands:<route>) mengunci satu model beserta penyedianya untuk percakapan tersebut.

Strands di Chat hanya bergantung pada akses Strands. Fitur ini tidak memerlukan sakelar model agen CLI, dan tetap muncul saat sakelar itu mati. Di Chat, agen memiliki alat file yang sama seperti di halaman Strands, dalam satu ruang kerja pribadi per akun, dan balasannya tiba sebagai teks dan penalaran. Lihat Agen koding terpasang untuk grup Agen dan untuk memakai entri Strands sebagai model tugas untuk judul dan ringkasan pemikiran.

Work​

Di composer Work, pilih Libre WebUI atau Strands pada kontrol Mesin, lalu pilih modelnya secara terpisah. Dengan Strands, agen Strands merencanakan setiap langkah, dan Work menjalankan alat yang dimintanya di sandbox Work sesuai kebijakan persetujuan Work yang biasa. Work tetap menjadi sumber otoritatif untuk transkrip, persetujuan, eksekusi alat, dan riwayat run; agen Strands tidak menjalankan alatnya sendiri di Work.

Model penyedia yang mendasarinya harus mendukung pemanggilan alat. Work memeriksanya sebelum run dimulai dan menolak model yang tidak menyatakan dukungan alat.

Run Work yang disimpan oleh rilis sebelumnya dengan awalan model dsh: dibuka sebagai run Strands. Lihat Work: mesin Strands untuk cara pilihan mesin berinteraksi dengan model yang dibawa dari Chat.

Model keamanan​

Di halaman Strands dan di Chat, agen sengaja diberi sekumpulan alat yang kecil:

  • read, write, dan edit, untuk file di ruang kerjanya
  • plugin todos dari harness, untuk merencanakan pekerjaan beberapa langkah

Agen tidak memiliki shell, web fetch, memori, maupun skill, dan tidak ada file AGENTS.md yang disisipkan ke instruksinya.

Setiap sesi memiliki direktori ruang kerja pribadi, yang dilihat agen sebagai /workspace. Setiap path diselesaikan setelah mengikuti symlink dan harus tetap berada di dalam direktori itu, sehingga tautan di ruang kerja tidak dapat menjangkau bagian lain dari disk. Sandbox menolak menjalankan perintah.

ItemBatas
Sesi per akun200
Panjang prompt32.000 karakter
Giliran agen per pesan24
Baca atau tulis file2 MB per panggilan
Judul sesi120 karakter

Giliran yang mencapai batas giliran akan berhenti dan memberi tahu hal itu. Setiap giliran dapat melakukan beberapa panggilan model ke penyedia Anda, jadi berikan akses dengan kehati-hatian yang sama seperti akses model lain yang menghabiskan anggaran penyedia.

Penyimpanan​

Data Strands disimpan di <DATA_DIR>/strands/, bukan di basis data aplikasi. Setiap akun memiliki direktorinya sendiri, <DATA_DIR>/strands/users/<account-hash>/, yang berisi:

  • registry.json: daftar sesi milik akun
  • sessions/: snapshot sesi Strands yang dipakai agen sebagai konteks
  • transcripts/: transkrip yang ditampilkan di halaman Strands untuk setiap sesi
  • workspaces/: ruang kerja pribadi setiap sesi
  • chat-workspace/: ruang kerja yang dipakai oleh giliran Chat

Sertakan <DATA_DIR>/strands/ dalam cadangan jika sesi-sesi tersebut penting bagi Anda.

Penggunaan​

Penggunaan Penyedia (/usage) mencatat panggilan Strands atas nama agen Strands di bagian Agen. Lihat Penggunaan agen.

API​

Setiap rute memerlukan akun terautentikasi dengan akses Strands, kecuali /api/strands/access, yang memerlukan administrator.

MetodePathTujuan
GET/api/strands/accessMembaca mode akses dan apakah LIBRE_STRANDS_ACCESS menguncinya (admin)
PUT/api/strands/accessMengatur mode ke disabled, admins, atau all-users (admin; 409 jika dikunci)
GET/api/strands/healthKetersediaan mesin serta versi harness dan SDK
GET/api/strands/modelsModel yang dapat dijalankan mesin untuk akun ini
GET/api/strands/sessionsMenampilkan daftar sesi
POST/api/strands/sessionsMembuat sesi (title dan model opsional)
GET/api/strands/sessions/:sessionIdMembaca sesi, transkripnya, dan apakah ada giliran yang sedang berjalan
PATCH/api/strands/sessions/:sessionIdMengubah judul atau model sesi
DELETE/api/strands/sessions/:sessionIdMenghapus sesi beserta transkrip dan ruang kerjanya
POST/api/strands/sessions/:sessionId/messagesMengirim { "text": "..." } dan mengalirkan giliran sebagai NDJSON
POST/api/strands/sessions/:sessionId/cancelMenghentikan giliran yang sedang berjalan

Aliran pesan menulis satu event JSON per baris: turn-start, text, reasoning, tool-start, tool-result, done (dengan alasan berhenti dan penggunaan token jika penyedia melaporkannya), dan error. Menutup koneksi akan membatalkan giliran. Mengirim pesan saat giliran sedang berjalan menghasilkan 409.

Konfigurasi​

VariabelBawaanTujuan
LIBRE_STRANDS_ACCESStidak ditetapkan (pengaturan admin, admins)Mengunci disabled, admins, atau all-users; nilai lain mengunci mesin dalam keadaan mati

Pemecahan masalah​

Lihat Masalah mesin Strands.