Bộ máy Strands
Libre WebUI tích hợp một bộ máy tác tử xây dựng trên
Strands Agents harness mã nguồn mở
(@strands-agents/harness 0.1.1 trên @strands-agents/sdk 1.19.0). Bộ máy chạy
bên trong tiến trình backend của Libre WebUI, nên bạn không phải cài daemon riêng.
SDK chỉ được nạp vào lần đầu bộ máy được dùng; server đã tắt Strands sẽ không bao
giờ nạp nó.
Bộ máy điều khiển các mô hình mà Libre WebUI đang phục vụ:
- mô hình Ollama, khi Ollama được bật
- mô hình từ các plugin nhà cung cấp chat hoặc completion đang hoạt động
Mọi lệnh gọi mô hình đều đi qua đúng các dịch vụ Ollama và plugin mà Chat đang dùng. Không có cấu hình nhà cung cấp riêng và không có khóa API riêng. Thông tin xác thực của nhà cung cấp và công tắc Ollama vẫn áp dụng như cũ.
Bạn có thể dùng bộ máy ở ba nơi:
- trang Strands, cho các phiên tác tử bền vững
- Trò chuyện (Chat), qua các mục Strands trong bộ chọn mô hình
- Work, dưới dạng tùy chọn Strands của mục Bộ máy trong khung soạn thảo
Quyền truy cập
Quản trị viên chọn ai được dùng bộ máy tại Cài đặt → Quản lý người dùng → Quyền truy cập và chính sách → Công cụ Strands:
| Chế độ | Nhãn trong cài đặt | Ai được dùng Strands |
|---|---|---|
disabled | Tắt | Không ai, kể cả quản trị viên (mặc định) |
admins | Quản trị viên | Quản trị viên đang hoạt động |
all-users | Tất cả người dùng | Mọi tài khoản đang hoạt động |
Thay đổi có hiệu lực từ yêu cầu tiếp theo, không cần khởi động lại.
Để cố định chế độ ở cấp triển khai, đặt LIBRE_STRANDS_ACCESS:
LIBRE_STRANDS_ACCESS=admins # or disabled, all-users
Chế độ đã cố định sẽ khóa mục điều khiển trong Quản lý người dùng. Mọi giá trị
khác disabled, admins hoặc all-users đều khóa bộ máy ở trạng thái tắt, thay
vì quay về cài đặt đã lưu.
Server áp dụng chế độ này cho mọi yêu cầu REST, cho chat qua WebSocket và cho mọi
lệnh gọi mô hình trong một lần chạy Work. Nếu không đọc được chế độ, quyền truy
cập bị từ chối. Tài khoản không có quyền sẽ không thấy trang Strands, các mục
Strands trong chat hay bộ máy Strands của Work, và API trả về 403.
Trang Strands
Mở Strands từ thanh bên (/strands).
- Phiên được giữ lại qua các lần khởi động lại, tối đa 200 phiên mỗi tài khoản. Tin nhắn đầu tiên sẽ đặt tên cho phiên mới.
- Chọn mô hình cho từng phiên. Mô hình mặc định dùng mô hình chat mặc định của bạn.
- Câu trả lời được truyền dần ngay khi được tạo, kèm phần lập luận của mô hình và một thẻ cho mỗi lệnh gọi công cụ.
- Dừng hủy lượt đang chạy. Mỗi phiên chỉ chạy một lượt tại một thời điểm.
- Xóa phiên sẽ xóa lịch sử và không gian làm việc của phiên đó.
Chat
Chọn Strands trong bộ chọn mô hình. Mục này nằm trong nhóm Tác nhân, cạnh các mô hình tác tử CLI:
- Strands (
strands) dùng mặc định của bộ máy, tức là mô hình chat mặc định của bạn. - Strands · mô hình (nhà cung cấp) (
strands:<route>) ghim một mô hình cùng nhà cung cấp của nó cho cuộc hội thoại.
Strands trong Chat chỉ phụ thuộc vào quyền truy cập Strands. Nó không cần công tắc mô hình tác tử CLI và vẫn xuất hiện khi công tắc đó tắt. Trong Chat, tác tử có cùng các công cụ tệp như trên trang Strands, trong một không gian làm việc riêng cho mỗi tài khoản, và câu trả lời của nó đến dưới dạng văn bản và phần lập luận. Xem Đại lý lập trình đã cài để biết về nhóm Tác nhân và cách dùng một mục Strands làm mô hình tác vụ cho tiêu đề và tóm tắt suy nghĩ.
Work
Trong khung soạn thảo của Work, chọn Libre WebUI hoặc Strands ở mục Bộ máy, rồi chọn mô hình riêng. Với Strands, một tác tử Strands lập kế hoạch cho từng bước, còn Work thực thi các công cụ mà tác tử yêu cầu trong sandbox của Work, theo chính sách phê duyệt thông thường của Work. Work vẫn là nguồn có thẩm quyền cho bản ghi hội thoại, phê duyệt, việc thực thi công cụ và lịch sử chạy; trong Work, tác tử Strands không tự chạy công cụ nào.
Mô hình nhà cung cấp bên dưới phải hỗ trợ gọi công cụ. Work kiểm tra điều này trước khi bắt đầu chạy và từ chối mô hình không công bố hỗ trợ công cụ.
Các lần chạy Work do phiên bản cũ lưu với tiền tố mô hình dsh: sẽ mở thành lần
chạy Strands. Xem Work: bộ máy Strands để biết lựa
chọn bộ máy tương tác thế nào với các mô hình được mang sang từ Chat.
Mô hình bảo mật
Trên trang Strands và trong Chat, tác tử có một bộ công cụ được giữ nhỏ có chủ ý:
read,writevàedit, cho các tệp trong không gian làm việc của nó- plugin
todoscủa harness, để lập kế hoạch cho công việc nhiều bước
Tác tử không có shell, không tải web, không có bộ nhớ và không có kỹ năng, và
không có tệp AGENTS.md nào được chèn vào chỉ dẫn của nó.
Mỗi phiên có một thư mục không gian làm việc riêng, tác tử nhìn thấy thư mục này
là /workspace. Mọi đường dẫn đều được phân giải sau khi đi theo symlink và phải
nằm trong thư mục đó, nên một liên kết trong không gian làm việc không thể chạm tới
phần còn lại của ổ đĩa. Sandbox từ chối thực thi lệnh.
| Mục | Giới hạn |
|---|---|
| Số phiên mỗi tài khoản | 200 |
| Độ dài prompt | 32.000 ký tự |
| Số lượt tác tử mỗi tin nhắn | 24 |
| Đọc hoặc ghi tệp | 2 MB mỗi lệnh gọi |
| Tiêu đề phiên | 120 ký tự |
Lượt nào chạm giới hạn số lượt sẽ dừng lại và báo điều đó. Mỗi lượt có thể gọi mô hình nhiều lần tới các nhà cung cấp của bạn, vì vậy hãy cấp quyền cẩn trọng như với mọi quyền truy cập mô hình khác có tiêu tốn ngân sách nhà cung cấp.
Lưu trữ
Dữ liệu Strands nằm trong <DATA_DIR>/strands/, không nằm trong cơ sở dữ liệu của
ứng dụng. Mỗi tài khoản có thư mục riêng,
<DATA_DIR>/strands/users/<account-hash>/, gồm:
registry.json: danh sách phiên của tài khoảnsessions/: các snapshot phiên Strands mà tác tử dùng làm ngữ cảnhtranscripts/: bản ghi hội thoại hiển thị trên trang Strands cho từng phiênworkspaces/: không gian làm việc riêng của từng phiênchat-workspace/: không gian làm việc dùng cho các lượt Chat
Hãy đưa <DATA_DIR>/strands/ vào bản sao lưu nếu các phiên này quan trọng với bạn.
Mức sử dụng
Mức sử dụng nhà cung cấp (/usage) ghi nhận các lệnh gọi Strands cho tác tử
Strands trong mục Tác nhân. Xem
Mức sử dụng tác tử.
API
Mọi route đều yêu cầu tài khoản đã xác thực và có quyền truy cập Strands, trừ
/api/strands/access, route này yêu cầu quản trị viên.
| Phương thức | Đường dẫn | Mục đích |
|---|---|---|
GET | /api/strands/access | Đọc chế độ truy cập và việc LIBRE_STRANDS_ACCESS có cố định nó hay không (quản trị) |
PUT | /api/strands/access | Đặt mode thành disabled, admins hoặc all-users (quản trị; 409 nếu đã cố định) |
GET | /api/strands/health | Tình trạng sẵn sàng của bộ máy cùng phiên bản harness và SDK |
GET | /api/strands/models | Các mô hình bộ máy có thể điều khiển cho tài khoản này |
GET | /api/strands/sessions | Liệt kê phiên |
POST | /api/strands/sessions | Tạo phiên (tùy chọn title và model) |
GET | /api/strands/sessions/:sessionId | Đọc một phiên, bản ghi hội thoại của phiên và liệu có lượt nào đang chạy |
PATCH | /api/strands/sessions/:sessionId | Đổi tiêu đề hoặc mô hình của phiên |
DELETE | /api/strands/sessions/:sessionId | Xóa phiên cùng bản ghi hội thoại và không gian làm việc của nó |
POST | /api/strands/sessions/:sessionId/messages | Gửi { "text": "..." } và truyền lượt dưới dạng NDJSON |
POST | /api/strands/sessions/:sessionId/cancel | Dừng lượt đang chạy |
Luồng tin nhắn ghi một sự kiện JSON trên mỗi dòng: turn-start, text,
reasoning, tool-start, tool-result, done (kèm lý do dừng và lượng token đã
dùng khi nhà cung cấp báo cáo) và error. Đóng kết nối sẽ hủy lượt. Gửi tin nhắn
khi đang có lượt chạy sẽ trả về 409.
Cấu hình
| Biến | Mặc định | Mục đích |
|---|---|---|
LIBRE_STRANDS_ACCESS | chưa đặt (theo cài đặt quản trị, admins) | Cố định disabled, admins hoặc all-users; mọi giá trị khác đều khóa bộ máy ở trạng thái tắt |
Khắc phục sự cố
Xem Sự cố bộ máy Strands.