Chuyển tới nội dung chính

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 đặtAi được dùng Strands
disabledTắtKhông ai, kể cả quản trị viên (mặc định)
adminsQuản trị viênQuản trị viên đang hoạt động
all-usersTất cả người dùngMọ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, write và edit, cho các tệp trong không gian làm việc của nó
  • plugin todos củ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ụcGiới hạn
Số phiên mỗi tài khoản200
Độ dài prompt32.000 ký tự
Số lượt tác tử mỗi tin nhắn24
Đọc hoặc ghi tệp2 MB mỗi lệnh gọi
Tiêu đề phiên120 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ản
  • sessions/: các snapshot phiên Strands mà tác tử dùng làm ngữ cảnh
  • transcripts/: bản ghi hội thoại hiển thị trên trang Strands cho từng phiên
  • workspaces/: không gian làm việc riêng của từng phiên
  • chat-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ẫnMụ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/healthTình trạng sẵn sàng của bộ máy cùng phiên bản harness và SDK
GET/api/strands/modelsCác mô hình bộ máy có thể điều khiển cho tài khoản này
GET/api/strands/sessionsLiệt kê phiên
POST/api/strands/sessionsTạ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/:sessionIdXó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/messagesGửi { "text": "..." } và truyền lượt dưới dạng NDJSON
POST/api/strands/sessions/:sessionId/cancelDừ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ếnMặc địnhMục đích
LIBRE_STRANDS_ACCESSchư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.